單片機源程序如下:
- #include <reg51.H>
- sfr P4 = 0xC0; //1111,1111 端口4
- sfr AUXR = 0x8E; //0000,0000 輔助寄存器
- #define u8 unsigned int
- #define u16 unsigned char
- #define PD (P1<<4&0x10)|(P4&0x0c)|(P3&0x03)
- void Timer0Init() //10毫秒@12.000MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TMOD |= 0x01; //設置定時器模式
- TL0 = 0xF0; //設置定時初始值
- TH0 = 0xD8; //設置定時初始值
- TF0 = 0; //清除TF0標志
- TR0 = 1; //定時器0開始計時
- EA = 1;
- ET0 = 1;
- }
- /***********************************************
- * 文件名:按鍵函數
- * 描 述:
- * 功 能:
- * 參 數:無
- *************************************************/
- void key_scan() //放在10ms的定時器中掃描
- {
- static u8 key_time=0;
- static bit key_sign=0;
- u8 key;
- key=PD&0x1f;
- if(key!=0x1f)//有鍵按下
- {
- if(++key_time>=2 && !key_sign)//
- {
- key_sign=1;
- switch(key)
- {
- case 0x1e:P2=0xfe; break;
- case 0x1d:P2=0xfd; break;
- case 0x1b:P2=0xfb; break;
- case 0x17:P2=0xf7; break;
- case 0x0f:P2=0xef; break;
- default:break;
- }
- }
- }
- else //松手
- {
- key_time=0;
- key_sign=0;
- }
- }
- void main()
- {
- Timer0Init();
- while(1)
- {
-
- }
- }
- void Timer0Interrupt(void) interrupt 1
- {
- TH0 = 0xD8; //設置定時初始值
- TL0 = 0xF0; //設置定時初始值
- key_scan();
- }
復制代碼 |