我将8279的 IRQ 引脚与89C52的INT1端相连,即用中断取得8279的按键值,然后在液晶lcd上根据不同的按键值显示不同的内容.但是我发现一个怪现象,那就是我发现当我某一键按下后,其他按键也获得了与这一按键同样的键值;也就是当有新的按键按下后,新的按键先执行一下之前按键的操作,然后才执行本按键的操作.这是什么原因引起的呢?以下是我的中断取键值的部分:<br />#define COM8279 XBYTE[0x8401]//8279命令状态口<br />#define DAT8279 XBYTE[0x8400]//8279数据口<br />void key()interrupt 2 using 2<br />{<br /> uchar kk,s;<br /> COM8279=0xd1;//总清楚命令<br /> do <br /> {<br /> s=COM8279;<br /> }while(s&0x80==1);//等待清楚结束<br /> COM8279=0x00;//键盘显示方式<br /> COM8279=0x2a;//时钟分频<br /> kk=COM8279;<br /> while (kk&0x0f==0); //无键按下等待<br /> flag2=1;flag3=1;flag4=1;<br />}<br />void main(void)<br />{ <br /> <br /> initlcm();//初始化lcd<br /> initmcu();//初始化mcu<br /> for(;;)<br /> {<br /> delay(100);<br /> if(flag2==1)<br /> {<br /> flag2=0;<br /> COM8279=0x40; //读fifo ram 命令<br /><br /> m=DAT8279;m=m&0x3f; //取键盘数据低6位<br /> }<br /> dealkey();//键盘处理函数<br />}<br /><br /> |
|