無標題.jpg (171.94 KB, 下載次數: 43)
下載附件
2021-11-20 11:11 上傳
- #include <reg51.h>
- #define DPIO_DIG P0
- #define DPIO_PLACE P2
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- unsigned char code LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0x39,0xff};//共陽極數碼管顯示的從0~c,即段碼,最后一個表示全滅
- unsigned char LEDBuf[]={8,8,8,8};//數據顯示緩沖區
- unsigned char code PLACE_CODE[]={0x01,0x02,0x04,0x08};//存放位選的數組,同時放在rom存儲器
- unsigned char KeyNum=0;
- unsigned int Numcon=0;
- void DelayXms(unsigned int t)
- {
- unsigned int i,j;
- for(i=t;i>0;i--)
- for(j=120;j>0;j--);
- }
- void Key_Scan()
- {
- static unsigned char i;
- static bit sign=0;
- if(!key1||!key2||!key3||!key4)
- {
- if(++i>=10 && sign==0)
- {
- sign=1;
- if(!key1)KeyNum=1;
- if(!key2)KeyNum=2;
- if(!key3)KeyNum=3;
- if(!key4)KeyNum=4;
- }
- }
- else
- {
- i=0;
- sign=0;
- }
- }
- void Disply()
- {
- static unsigned char i;
- DPIO_DIG=0xff;//消隱
- DPIO_PLACE=PLACE_CODE[i];//送位選
- DPIO_DIG =LEDBuf[i];//送段碼
- i=++i%4;
- }
- void main()
- {
- while(1)
- {
- Key_Scan();
- switch(KeyNum)
- {
- case 1 :if(Numcon<9999)Numcon++;KeyNum=0;break;
- case 2 :if(Numcon>0)Numcon--;KeyNum=0;break;
- case 3 :Numcon=0;KeyNum=0;break;
- case 4 :Numcon=88;KeyNum=0;break;
- }
- LEDBuf[0]=LED[Numcon/1000%10];
- LEDBuf[1]=LED[Numcon/100%10];
- LEDBuf[2]=LED[Numcon/10%10];
- LEDBuf[3]=LED[Numcon%10];
- Disply();
- DelayXms(1);
- }
- }
復制代碼
|