emmmmmmm,过年期间没怎么学51,最近几天被肺炎吓到了家里,才想起来拿起书本看一看,这一次的课本错误在按键部分,仍是郭天祥的《新概念51单片C语言教程》。
课本P82中间的例4.1.1给我们介绍了按键的用法,但是例子跑出来的仿真让人哭笑不得。下面上图!!P1是上电状态,P2是按动按键状态。
主要的现象是,在刚刚上电时点亮了两个数码管,而且没有什么具体意义,在按下按键时,可以实现数字加一(按动LCDEN),但是松开按键就会变成刚刚上电的样子。
在书中的代码示例是(左侧),更改后代码为右侧:
郭天祥代码的意思是,先打开数字锁存器(dula=1),然后输入数字(P0=table[]),再打开位置锁存器,把显示数字的位置移动,以便放入个位数字,这个想法是正确的。但是我们看到,郭先把数字放了进去,再去打开数位锁存器,这就造成了个位数挤到十位数,十位数初始没地放的情况,因而其仿真上电后是一团乱麻,只有在按着按键提供num时,程序才会正常工作。
右侧代码的改进之处是:先消影,打开数位锁存器,不会让十位数被挤走;这样就做到了“数有其位”,同时保证上电数字正确。
视频是修改代码后的演示。按动第一个按键实现加一,第二个减一,第三个清零,第四个基于单片机时钟实现每秒加一。
CSDN视频1
附:亲测可用的TX-1C开发板proteus仿真文件和几个跑过可用的hex文件。
欢迎下载:https://download.csdn.net/download/toyjis/12123752