咆哮的阿杰 发表于 2016-11-30 23:40 以实测,程序没有问题! |
![]() |
把程序重新好好地找找错误 |
确认按键是否弹起 |
不是单片机的附带资料里都会有这些资料吗~ |
P1 = 0xf0;//给口赋值 if(P1 != 0xf0)说明P1口的值改变了,有键按下,P1口值才会改变 Keys_Scan();//调用键盘扫描函数 |
switch(Tmp) { case 1: KeyNO = 0; break; case 2: KeyNO = 1; break; case 4: KeyNO = 2; break; case 8: KeyNO = 3; break; default: KeyNO = 16; } 我怎么觉得你这段程序有问题呢?高位给0,低位给1。 然后我按下一个键,这个键对应的行和列都是0吧,也就是说,低位只有一个数为0, 那么tmp怎么会出现1,2,4,8呢。 除非楼主的单片机键盘是按下去接到了高电平 |
king@ 发表于 2016-11-30 21:28 尽力学习理解 |
zl2168 发表于 2016-11-30 21:09 学什么看相应的内容,不懂提问,百度, |
本帖最后由 zl2168 于 2016-11-30 21:11 编辑 king@ 发表于 2016-11-30 21:08 你在本网站提了许多问题,我给你推荐的张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,有100个案例,几乎覆盖了你所有的问题,难道还不值得你去看看这本书吗? 一个一个问,多吃力啊!还大多得不到满意解答,何必呢? |
zl2168 发表于 2016-11-30 20:56 明白!多谢! |
本帖最后由 zl2168 于 2016-11-30 21:08 编辑 实例62 4×4矩阵式键盘 与你的几乎一模一样 先Proteus仿真一下,确认有效。 ![]() ![]() 以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。 |
我给你推荐的案例程序语句条条有注解,便于阅读理解,便于自学。 |
本帖最后由 zl2168 于 2016-11-30 21:01 编辑 下面这段程序是什么意思?有谁能详细跟我解释一下吗? P1 = 0xf0;//列线置低电平 if(P1 != 0xf0)//若P1不等于0xf0(前输出数据),表明有键按下(有键按下时会改变P1口状态) Keys_Scan();//调用键扫描子函数 |
确认按键是否弹起 |