消完抖以后还要判断键是否按下。 |
year1987 发表于 2017-6-13 17:09 蟹蟹大神,i了i了 |
//你的程序改起来好辛苦,从新写了个,你试试 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit k1=P1^0; uchar bai,shi,ge; uint code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //共阴极数码管 void delay(uchar xms)//x毫秒的延时程序,你的延时程序问题太大了,while不是那么用的 { uchar i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display()//显示程序 { P3=0xff;//清屏 delay(5); P3=0xfe;//位选 P2=table[bai]; delay(5); P3=0xff; delay(5); P3=0xfd; P2=table[shi]; delay(5);P3=0xff; delay(5); P3=0xfb; P2=table[ge]; delay(5); } void keyboard()//键盘扫描程序 { if(k1==0) { delay(10); if(k1==0) { while(!k1);//等待按键释放 ge++; if(ge>9) { ge=0; shi++; } if(shi>9) { shi=0; bai++; } if(bai>9) { ge=0; shi=0; bai=0; } } } } void main() { bai=0; shi=0; ge=0; while(1) { display(); keboard(); } |
wangminfu 发表于 2017-6-9 03:55 谢谢,那为啥我那个明明是选择了三个数码管,怎么同时只能亮一个 |
消抖动和按键放开有冲突。 消抖动是 先判断按下,然后计数,放开时检查 计数(时间),如果时间很短,认为是抖动,不予理睬,继续等待按下。 |