我将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();//键盘处理函数 }
|