51单片机和74c922键盘问题
时间:10-02
整理:3721RD
点击:
用74c922做的键盘控制,51单片机和12864显示,按键后总是没反应进不到按键后的程序中去,74c922的输出有信号,能用万用表量到。KeyDA是74c92任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。感觉进不去键盘子程序,P2口的高四位为键盘的值,低四位不用,程序运行时低四位一直为高,如果P2口初始化为0X00,高四位在按键时就一直是低。
程序如下:
void main ()
{
start:
//delay_lcd(2000);
init_lcd ();
init();
shen=0;
time=0;
KDA=keyDA;
KDA=0;
counter=0;
clrram ();
wc(0x80);
wh("速度");
wd(0x3a);
wc(0x90);
wh ("深度");
while(1)
{ uchar k;
delay_lcd(100);
k=key1();
if(k==14)
{wc(0x98);
wd(0x30+k);
s=1;
shezhi();
}
if(k<=9)
{wc(0x88);
wd(0x30+k);
}
sushen();
// delay_lcd(1000);
if(k==12)
{
goto start;
}
}
}
uchar key1(void)
{ uchar keyk,k;
if(KDA==1)
{ // P2=0x00;
delay_key(20);
if (KDA==1)
{
delay_key(20);
keyk=P2&0xf0;
P2=0xf0;
}
switch(keyk)
{
case 0x00:k=7; break;
case 0x10:k=4; break;
case 0x30:k=1; break;
case 0x20:k=0; break;
case 0x40:k=8; break;
case 0x50:k=5; break;
case 0x70:k=2; break;
case 0x80:k=9; break;
case 0x90:k=6; break;
case 0xb0:k=3; break;
case 0x60:k=10;break;//光标
case 0xa0:k=11;break;//确定
case 0xc0:k=12;break;//复位
case 0xd0:k=13;break;//通信
case 0xf0:k=14;break;//设置
case 0xe0:k=15;break;//测量
}
if (KDA==1);
{
next++;}
return k;
}
//else
//{
//return;}
}
KDA=keyDA;放错地方了得缘故吧 放到while(1)里面看看
这个……看看再说吧,,,..
凯巴伯集团www.kaibabo.com
凯巴伯网络www.kaibabo.net东莞网站建设,东莞网页设计www.kaibabo.cn凯巴伯服饰产业发展有限公司 ,服装印花材料www.kaibabo.cn
哦,谢谢,放到里面了,按键有反应了,只是总是0x00,好像P2脚会被拉下去
不知道为什么p2口不能初始化为0x00,不然总是被拉低