給一段例子,讓你參考
- #include <reg52.h>
- typedef unsigned char u8; //0 to 255
- typedef unsigned int u16; //0 — 65535
- typedef unsigned long u32; //0 — 4294967295
- u8 code smgduan[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管
- //u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管
- u8 DigiTubeShow[3];
- u16 count_XX=0; //消抖計數
- u16 TMR_XX_OT;
- u8 num;
- sbit P20 = P2^0;
- sbit P21 = P2^1;
- sbit P37 = P3^7;
- void main()
- {
- while (1)
- {
- //按鍵掃描V
- if(!P20 || !P21)
- {
- if(count_XX<0xFFFF)count_XX++;
- if(count_XX==5000) //消抖
- {u8 i, Temp;
- if(!P20)num++;
- if(!P21)num--;
- Temp = num;
- for(i = 0;i<3;i++)
- {
- DigiTubeShow[i] = Temp%10;
- Temp /=10;
- }
- }
- }
- else //按鍵抬起
- count_XX=0; //count_XX清0
- //按鍵掃描A
-
- //數碼管掃描V
- if(TMR_XX_OT)TMR_XX_OT--;
- if(!TMR_XX_OT)
- {static u8 x;
- TMR_XX_OT=100;
- P0 = 0x00;
- P1 = 0xFF;
- P0 = smgduan[DigiTubeShow[x]];
- P1 = ~(1<<x);
- x = (++x) % 3;
- }
- //數碼管掃描A
- }
- }
復制代碼
|