单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
来源:互联网 发布:淘宝全屏店招怎么做 编辑:程序博客网 时间:2024/05/17 04:18
本实验的目的:
使用中断实现通过编号为8和C的按键控制数码管数字的加减,加至15之后再循环到0,减到0之后保持0不变。
#include <reg52.h>sbit WEI=P2^7;sbit DUAN=P2^6;void delay(int t){ while(t--);}unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫描法{ unsigned char Val; P3=0xf0;//高四位置高,低四位拉低 if(P3!=0xf0)//表示有按键按下 { //DelayMs(10); //去抖if(P3!=0xf0) { //表示有按键按下 P3=0xfe; //检测第一行if(P3!=0xfe) { Val=P3&0xf0; Val+=0x0e; while(P3!=0xfe); while(P3!=0xfe); return Val; } P3=0xfd; //检测第二行if(P3!=0xfd) { Val=P3&0xf0; Val+=0x0d; while(P3!=0xfd); while(P3!=0xfd); return Val; } P3=0xfb; //检测第三行if(P3!=0xfb) { Val=P3&0xf0; Val+=0x0b; while(P3!=0xfb); while(P3!=0xfb); return Val; } P3=0xf7; //检测第四行if(P3!=0xf7) { Val=P3&0xf0; Val+=0x07; while(P3!=0xf7); while(P3!=0xf7); return Val; } } } return 0xff;}/*------------------------------------------------ 按键值处理函数,返回扫键值------------------------------------------------*/unsigned char KeyPro(void){ switch(KeyScan()) { case 0xee:return 0;break;//0 按下相应的键显示相对应的码值 case 0xde:return 1;break;//1 case 0xbe:return 2;break;//2 case 0x7e:return 3;break;//3 case 0xed:return 4;break;//4 case 0xdd:return 5;break;//5 case 0xbd:return 6;break;//6 case 0x7d:return 7;break;//7 case 0xeb:return 8;break;//8 case 0xdb:return 9;break;//9 case 0xbb:return 10;break;//a case 0x7b:return 11;break;//b case 0xe7:return 12;break;//c case 0xd7:return 13;break;//d case 0xb7:return 14;break;//e case 0x77:return 15;break;//f default:return 0xff;break; }} //第一个参数i代表控制第几个数码管,n代表要显示的数字void Screen1(int i,int n){ int high; P0=0; DUAN=1; DUAN=0; high=n/10; WEI=1; P0=dofly_WeiMa[i]; WEI=0; DUAN=1; P0=dofly_DuanMa[high]; DUAN=0;}void Screen2(int i,int n){ int lower; P0=0; DUAN=1; DUAN=0; lower=n%10; WEI=1; P0=dofly_WeiMa[i]; WEI=0; DUAN=1; P0=dofly_DuanMa[lower]; DUAN=0;}int num;int Key_push;int flag;int main(){ num=0; WEI=0; DUAN=0;EA=1; EX0=1; IT0=0; EX1=1; IT1=0;flag=0; while(1) { if(flag && num>9) { Screen1(6,num); flag=0; }else{ Screen2(7,num); flag=1; } Key_push=KeyPro();} return 0;}//外部中断处理void inter_sub() interrupt 0 using 1{ if(Key_push==8) { if(num>0) num--; } Key_push=0;}void inter_add() interrupt 2 using 1{ if(Key_push==12) { num++; if(num==16) num=0; } Key_push=0;}
2 0
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- 单片机C语言实现数码管控制
- 外中断(按键)控制数码管显示
- 4个独立按键实现对数码管数字显示的加减清零等
- 单片机==独立按键+数码管计数+中断法(9)
- 浅谈51单片机(c语言)中断以及定时器(计数器)的使用
- 并行口实现数字0~9、A~F、L、U、P、n总共19个键盘,将按键的结果用7段数码管(例如:7SEG-MPX-CA-BLUE)显示(可选——按键控制移位)出来
- 52单片机控制数码管显示数字
- 单片机控制的数码管显示
- 好玩的51单片机——数码管实现(二)
- 单片机:c语言实现秒表计数(按键开始,结束,重置)
- 使用单片机的定时器0和中断实现9到0的倒计时功能,并用数码管显示
- 基于51单片机的按键控制超声波测距及显示(带提示音)的实现
- 数码管流动显示(自己的单片机)
- 基于mini2440的按键中断控制LED(裸机代码)
- 按键控制数码管显示
- 按键控制数码管显示
- FPGA 按键控制数码管
- ReactNativeiOS(二)读书记录 2代码结构
- Raspberrypi 2 树莓派2代 拨号华为E398设备
- 蓝懿 iOS 技术交流和心得分享 11.25
- Java作业——学籍管理系统
- windows下wavelib的配置和使用
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- MediaWiki 用起来还是比较麻烦的
- hdoj 1689 Just a Hook 【线段树区间更新求和】
- data race check with valgrind
- Java中获取完整的url
- DMA的基本概念
- NSIndexSet基本用法
- JS模版引擎实现原理
- android获取屏幕宽高