将74HC164的8个输出管脚分别连接按键,将八个按键连在同一个IO口上
控制芯片STC12C5628AD
sbit CLK = P2^3;
sbit DAT = P2^2;
sbit key = P2^1;
检测按键是这样的,先给74HC164发送数据1111 1110只有一个0,如果key电平为高,下次给74hc164送1111 1101直到key电平为低,以此来检测是哪个按键被按下,现在是这样情况,发送完数据后必须延时400Us才能正确读取数据 很是不理解为什么,IO口我用了10K的上拉电阻。IO是准双向口模式
void send(uchar byte)
{
uchar i = 0;
for(i = 0;i<8;i++)
{
CLK = 0; CLK = 0; CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
if((byte&0X80)==0x80) DAT = 1; // 结果就2种0X80 或者是 0 DAT = byte&0X80;为什么是对的
else DAT = 0;
CLK = 1; CLK = 1; CLK = 1;
byte <<= 1; _nop_(); _nop_(); _nop_(); _nop_();
}
}
void KeyRead()
{
unsigned char i = 0;
_nop_(); _nop_(); _nop_(); _nop_();
if(key == 0) //根据74HC164的初始状态,如果按键被按下,KEY被拉为低电平
{
for(i=0;i<8;i++) //依次发送8次匹配检测数据
{
key = 1;
send(WEI[i]); //依次发送8位数据,其中一位为低位 例如1111 1110
Delay400us();
if(key == 0) //如果检测数据与所按的键一致,则检测信号线KEY保持低电平
{
KEYNUM = i + 1 ;
break; //退出FOR循环
}
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>