- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit Key1=P3^1;
- sbit Key2=P3^0;
- sbit Key3=P3^2;
- sbit Key4=P3^3;
- uchar num,num1,shi,ge;
- uint z,i,j;
- uchar code smgdisplay[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void delayms(uint z);
- void keydown()
- {
- if(Key1==0)
- {
- delayms(5);
- if(Key1==0) //再次确认按键按下
- {
- num++;
- if(num==60)
- num=0;
- while(!Key1); //此处等待按键释放 ,但不加该语句,程序依然能够实现。这是为什么呢?
- }
-
- }
- } //关于该处语句的理解如此:按键按下松开,数码管数值加一。开发板上的现象是按下数码管不显示任何数字,松开数值加一。
- void display(uchar num1)
- {
- shi=num1/10;
- ge=num1%10;
-
- LSA=1;
- LSB=0;
- LSC=0;
-
- P0=smgdisplay[shi];
- delayms(10);
- P0=0X00;
- LSA=0;
- LSB=0;
- LSC=0;
-
- P0=smgdisplay[ge];
- delayms(10);
- P0=0X00;
-
-
- }
- void main()
- {
- while(1)
- {
- keydown();
- display(num);
- }
-
- }
- void delayms(uint z)
- {
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
复制代码 |