
如选定第一行后,此行的I/O口输出为0,
单片机得到的结果是行、列的值,就可以推导出那个按键按下了。
以此类推,再扫描下一行,直到所有行都扫描结束。
首先是矩阵按键,不是矩形按键。GPIO_KEY=0x0f,这对于并行口,不算是赋值,是输出状态:高四位为低电平0,低四位为高电平1。高四位输出0,就是为了扫描按键的,所以,再输出几次也不会影响扫描按键的,因只要有按键按下了,从低四位读入的就不是全为高电平了,才能判断出是否有按键按下了。
这里不能GPIO_KEY=0x0f看成是变量赋值一样,因为,它外部是有按键的,按键会强制改变GPIO_KEY口的状态的,而读这个口时,就是读入的外部的按键的状态。与变量赋值是截然不同的。
void keyscan(void){
D_1=0X0f
delay(1)
if(D_1!=0X0F)
{
delay(1)
if(D_1!=0X0F)
{
D_1=0x0f
switch(D_1)
{
case(0x07):M=0break
case(0x0b):M=1break
case(0x0d):M=2break
case(0x0e):M=3break
delay(1)
}
D_1=0xf0
switch(D_1)
{
case(0x70):M=Mbreak
case(0xb0):M=M+4break
case(0xd0):M=M+8break
case(0xe0):M=M+12break
}
while((b<50)&&(D_1!=0xf0))
{ //花括号扩错了吧
dis_buf =M
dis_buf = dis_buf&0x0f
}
}
}
}
你用的反转法吧 应该就是那个花括号问题了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)