uchar Keycan() //按键扫描程序 P3.0--P3.3为行线 P3.4--P3.7为列线
{
uchar rcode,ccode,temp;
P3 = 0xF0; // 发全0行扫描码,列线输入
temp = P3&0xF0;
if(temp != 0xF0) // 若有键按下
{
delay(5);// 延时去抖动
P3 = 0xF0;
temp = P3&0xF0;
if(temp != 0xF0)
{
rcode = 0xFE; // 逐行扫描初值
while((rcode&0x10) != 0)// 扫描次数(4次)
{
P3 = rcode; // 输出行扫描码
if((P3&0xF0) != 0xF0) // 本行有键按下
{
ccode =(P3&0xF0)|0x0F;
do{;}
while((P3&0xF0) != 0xF0);//等待键释放
return ((~rcode) + (~ccode));// 返回键编码
}
else
rcode = (rcode<<1)|0x01; // 行扫描码左移一位
}
}
}
return 0; // 无键按下,返回值为0
}
void KeyDispaly(uchar key)
{
switch(key)
{
case 0xEE: write_lcd(112,25,"预热"); break;
default: break;
}
}
void main()
{
uchar Key;
lcd_init();
disp_init();
while(1)
{
Key = Keycan();
KeyDispaly(Key);
}
}
proteus中
仿真按键按下没反应,送不了显示 请问这是什么情况求教。。。
一周热门 更多>