打印

请各位大虾帮解释一下8279的中断处理程序取键值的问

[复制链接]
2209|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-5-21 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我将8279的 IRQ 引脚与89C52的INT1端相连,即用中断取得8279的按键值,然后在液晶lcd上根据不同的按键值显示不同的内容.但是我发现一个怪现象,那就是我发现当我某一键按下后,其他按键也获得了与这一按键同样的键值;也就是当有新的按键按下后,新的按键先执行一下之前按键的操作,然后才执行本按键的操作.这是什么原因引起的呢?以下是我的中断取键值的部分:
#define COM8279 XBYTE[0x8401]//8279命令状态口
#define DAT8279 XBYTE[0x8400]//8279数据口
void key()interrupt 2 using 2
{
   uchar kk,s;
   COM8279=0xd1;//总清楚命令
   do 
    {
        s=COM8279;
    }while(s&0x80==1);//等待清楚结束
   COM8279=0x00;//键盘显示方式
   COM8279=0x2a;//时钟分频
   kk=COM8279;
   while (kk&0x0f==0);      //无键按下等待
   flag2=1;flag3=1;flag4=1;
}
void main(void)
{    
     
     initlcm();//初始化lcd
     initmcu();//初始化mcu
     for(;;)
     {
         delay(100);
       if(flag2==1)
        {
            flag2=0;
           COM8279=0x40;         //读fifo ram 命令

            m=DAT8279;m=m&0x3f;   //取键盘数据低6位
        }
          dealkey();//键盘处理函数
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝