|
不要用delay()!不要用delay()!不要用delay()!
給個(gè)栗子- #include <reg52.h>
- typedef unsigned char u8; //0 to 255
- typedef unsigned int u16; //0 to 65535
- sbit KEY_XX = P3^5;
- u8 mode = 3;
- u8 i = 0;
- void disp()
- {
- switch (mode)
- {
- case 0:
- P1 = ~(0x01 << i);
- break;
- case 1:
- P1 = ~(0x80 >> i);
- break;
- case 2:
- P1 <<= 1;
- if(P1 & 0x80)
- {
- P1 &= 0xFE;
- } else {
- P1 |= 0x01;
- }
- break;
- case 3:
- P1 >>= 1;
- if(P1 & 0x01)
- {
- P1 &= 0x7F;
- } else {
- P1 |= 0x80;
- }
- break;
- default:
- break;
- }
- i = ++i %8;
- }
- void key_Proc()//單鍵短按
- {
- static u16 Delay_XD=0; //消抖計(jì)數(shù)
- if(!KEY_XX)
- {
- if(Delay_XD<0xFFFF)Delay_XD++;
- //else Delay_XD = 0; //連按功能
- if(Delay_XD==0xFF) //消抖
- {
- mode = ++mode % 4;
- i = 0;
- P1 = 0xFF;
- }
- }
- else //按鍵抬起
- Delay_XD=0; //Delay_XD清0
- }
- void main()
- { u16 ScanCNT = 0;
- while(1)
- {
- if(ScanCNT++ > 2000)
- {
- ScanCNT = 0;
- disp();
- }
- key_Proc();
- }
- }
復(fù)制代碼
|
|