//==============将按键值编码为数值========================= unsigned char coding(unsigned char m) { unsigned char k;
switch(m) { case (0x11): k=1;break; case (0x21): k=2;break; case (0x41): k=3;break; case (0x81): k='A';break; case (0x12): k=4;break; case (0x22): k=5;break; case (0x42): k=6;break; case (0x82): k='B';break; case (0x14): k=7;break; case (0x24): k=8;break; case (0x44): k=9;break; case (0x84): k='C';break; case (0x18): k='*';break; case (0x28): k=0;break; case (0x48): k='#';break; case (0x88): k='D';break;
}
return(k);
}
//=====================
按
键
检
26
测
并
返
回
按
键
值
===============================
unsigned char keynum(void) {
unsigned char row,col,i; P1=0xf0;
if((P1&0xf0)!=0xf0) {
Delay5Ms();
Delay5Ms();
{
row=P1^0xf0; //确定行线 i=0;
P1=a[i]; //精确定位 while(i<4) { }
if((P1&0xf0)!=0xf0) { } else { }
i++; P1=a[i];
col=~(P1&0xff); //确定列线
break; //已定位后提前退出
if((P1&0xf0)!=0xf0)
}
else
27
{ return 0;
}
while((P1&0xf0)!=0xf0);
return (row|col); //行线与列线组合后返回
}
else return 0;
//无键按下时返回0
}
//=======================一声提示音,表示有效========================
void OneAlam(void) { ALAM=0;
Delay5Ms();
ALAM=1; }
//========================二声提示音,表示操作========================
void TwoAlam(void) { ALAM=0;
Delay5Ms();
28
输入成功
ALAM=1; Delay5Ms();
ALAM=0; Delay5Ms();
ALAM=1; }
//================================================
void ThreeAlam(void) {
ALAM=0; Delay5Ms();
三
声
提
示
音
,
表
示
错
误
ALAM=1; Delay5Ms();
ALAM=0; Delay5Ms();
ALAM=1; Delay5Ms();
ALAM=0; Delay5Ms();
ALAM=1; }
//=====================显示输入的N个数字,用H代替以便隐藏============================
29
//=======================显示提示输入========================= void DisplayChar(void) {
unsigned char i; if(pass==1) { } else {
if(N==0) { } else {
//DisplayListChar(0,1,start_line); write_1602com(er); for(i=0;i<16;i++)
//DisplayListChar(0,1,Error); write_1602com(er); for(i=0;i<16;i++) { }
write_1602dat(Error[i]); //显示错误
//DisplayListChar(0,1,LockOpen); write_1602com(er); for(i=0;i<16;i++) { }
write_1602dat(LockOpen[i]); //显示open 开锁成功
//在二行开始显示
30