微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机和74c922键盘问题

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,不然总是被拉低

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top