#include "reg52.h" //定義51單片機特殊功能寄存器
unsigned char read_key(void);
void key_proc(unsigned char key);
void delay(void);
//
void cls_buzz()
{
P2 = (P2&0x1F|0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
void cls_led()
{
P2 = (P2&0x1F|0x80);
P0 = 0xFF;
P2 &= 0x1F;
}
//主函數
void main(void)
{
unsigned char temp;
cls_buzz();
cls_led();
while(1)
{
temp = read_key();
if(temp != 0xff)
{
delay(); //按鍵消抖
temp = read_key();
if(temp != 0xff)
{
//進入按鍵處理函數
key_proc(temp);
while(P3 != 0xff); //等待按鍵釋放
}
}
}
}
//按鍵掃描函數
unsigned char read_key(void)
{
unsigned char temp;
unsigned char key_value = 0xff;
temp = P3&0x0f;
switch(temp)
{
case 0x0e:
key_value = 1; //S7
break;
case 0x0d:
key_value = 2; //S6
break;
case 0x0b:
key_value = 3; //S5
break;
case 0x07:
key_value = 4; //S4
break;
}
return key_value;
}
//按鍵處理函數
void key_proc(unsigned char key)
{
switch(key)
{
case 1:
P2 = (P2&0x1f|0x80);
P0++;
P2 &= 0x1f;
break;
case 2:
P2 = (P2&0x1f|0x80);
P0--;
P2 &= 0x1f;
case 3:
P2 = (P2&0x1f|0x80);
P0 += 2;
P2 &= 0x1f;
break;
case 4:
P2 = (P2&0x1f|0x80);
P0 -= 2;
P2 &= 0x1f;
break;
}
}
//延時函數: 10ms@11.0592MHz
void delay(void)
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
|