#define DigAddr 0x8061
#define SecAddr 0x8060
#define KeyAddr 0x8060
// 数码管、按键扫描服务程序,在定时器中断内调用
void LEDScan(void)
{
unsigned char RdKey;
XBYTE[SecAddr] = 0x00;
XBYTE[DigAddr] = ScanPos+1;
XBYTE[SecAddr] = LEDSecCode[LEDBuffer[ScanPos]];
RdKey = XBYTE[KeyAddr]; // 读回键盘的扫描值
if((ScanPos&0x01) != 0) // 判断当前的位选信号
{
RdKey <<= 4; // 读回的扫描值是高4位
KeyValue = (KeyValue&0x0f)|RdKey; // 更新按键扫描码
}
else
{
RdKey &= 0x0f; // 读回的扫描值是低4位
KeyValue = (KeyValue&0xf0)|RdKey; // 更新按键扫描码
}
ScanPos = (ScanPos+1)&0x01;
}
|