按鍵掃描和數碼管動態顯示代碼,常見有十多鐘寫法。你選擇了兩個最差的寫法。給你改了一下,你試試。
無標題.jpg (231.92 KB, 下載次數: 30)
下載附件
2022-3-4 21:12 上傳
- #include <reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- /*
- sbit key1 = P1^0;
- sbit key2 = P1^1;
- sbit key3 = P1^2;
- sbit LSA = P1^3;
- sbit LSB = P1^4;
- sbit LSC = P1^5;
- **/
- uint point1=0,point2=0;
- uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar disp[8]={0,0,0,0x40,0x40,0,0,0};
- void delay(uint z)
- {
- uint y;
- for(;z>0;z--)
- for(y=0;y<110;y++);
- }
- void key_scan()
- {
- static uchar count=0;
- static bit key_sign=0;
- uchar key_value=P1&0x07;
- if(key_value!=0x07)
- {
- if(++count>=10 && key_sign==0)
- {
- key_sign=1;
- switch(key_value)
- {
- case 0x06: if(point1<100)point1++; break;
- case 0x05: if(point2<100)point2++; break;
- case 0x03: point1=0;point2=0; break;
- default: break;
- }
- }
- }
- else
- {
- count=0;
- key_sign=0;
- }
- }
- void DisplayData()
- {
- disp[0] = duan[point1/100%10];
- disp[1] = duan[point1/10%10];
- disp[2] = duan[point1%10];
- disp[5] = duan[point2/100%10];
- disp[6] = duan[point2/10%10];
- disp[7] = duan[point2%10];
- }
- void weixuan()
- {
- static uchar i;
- P0=0x00;
- P1&=0xc7;
- P1|=i<<3;
- P0=disp[i];
- i=++i%8;
- }
- void main()
- {
- while (1)
- {
- key_scan();
- DisplayData();
- weixuan();
- delay(1);
- }
- }
復制代碼
|