按下k1/k2数码管左四位数字加/减1,按下k3/k4数码管右四位数字加/减1
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit K1=P3^0;
- sbit K2=P3^1;
- sbit K3=P3^2;
- sbit K4=P3^3;
- uchar code table[]={//共阳LED段码表
- 0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8,0x80,0x90};
- uchar data dis_buf[8];//显示数据缓存
- uint a,b;//计数变量
- void delay(uint n)
- {
- while(n--);
- }
- //按键扫描函数
- void keyscan()
- {
- static uchar count=0;
- static bit sign=0;
- if(!K1||!K2||!K3||!K4)
- {
- if(++count>=10&&sign==0)//消抖/自锁
- {
- sign=1;
- if(!K1){if(a<9999)a++;}
- else if(!K2){if(a>0)a--;}
- else if(!K3){if(b<9999)b++;}
- else if(!K4){if(b>0)b--;}
- }
- }
- else //松手
- {
- count=0;
- sign=0;
- }
- }
- //共阳数码管显示函数
- void display()
- {
- static uchar i=0;
- //数据分解
- dis_buf[0]=table[a/1000%10];
- dis_buf[1]=table[a/100%10];
- dis_buf[2]=table[a/10%10];
- dis_buf[3]=table[a%10];
- dis_buf[4]=table[b/1000%10];
- dis_buf[5]=table[b/100%10];
- dis_buf[6]=table[b/10%10];
- dis_buf[7]=table[b%10];
- P2&=0x00;//消隐
- P0=dis_buf[i];//送段码
- P2|=0x01<<i;//送位码
- i++;i%=8;//扫描计数
- }
- void main()//主函数
- {
- while(1)
- {
- keyscan();//按键扫描
- display();//数码管显示
- delay(35);//少许延时,控制主循环周期约1ms
- }
- }
复制代码
|