说到动态显示,我们可以说是轻车熟路了,之前的LED已经练过不少了,此次只是把LED换成了数码管,原理一样,还是一样的电路,接下来看看如何做到动态显示。
首先是对程序代码做些更改,只要要加上扫描的部分就可以了。关于中间的时间,还是用延时函数来做。
在循环函数中,我先是把刷新代码写在了最前部分,激活数码管1,输出数据,然后延时,接着激活数码管2,然后输出数据,再次延时,延时结束判断按键是否按下。没有按下继续扫描数码管,显示的是之前的存储在缓存中的数值,延时函数,采用的还是之前的配方,时间也是一样的,估计有些同学已经忘记了是延时多久了。我再给介绍下如何查看延时时间。
首先看下仿真中选择的单片机的晶振频率。
我用的是11.0592MHz,然后再去查看keil中仿真的频率是多少。修改为一致的参数。
单击这个按键,弹出设置对话框。
把此处的数字更改为11.0592即可,只填数值。记号小数点不要填错位置。其他不用动,单击OK即可。
单击此按键进入仿真模式。
首先单击左上角的复位按键,对时间复位,然后再代码调试窗口对这左侧的灰色部分,在delay对应的前方单击,就可以添加一个断点,当程序运行到此处,会停止运行,方便我们查看时间。为了计算的方便,可以把delay后边括号中的数值更改的合适一些,例如改成整数,这里我修改为100,方便计算。切记一旦进入仿真模式,你可以修改代码,但是修改后的代码是不会立即运行到此次仿真中的,需要退出仿真,进行编译后,再次进入仿真,才会运行修改后的代码。所以进入仿真后,就不要更改了,需要改的,可以退出放着后再修改,每次修改完记得编译。
在延时函数结尾处的灰色部分也添加断点。接着单击左上角复位键后的开始键。
当运行到延时函数时,就停下来了,此时延时函数前的运行时间是0.00043511秒。还是很快的。再次点击开始按键。
代码停止到了延时的函数结尾处,此时延时函数已经运行完毕。当前总时间是0.21941732秒,减去之前的运行时间,得到的延时时间是21941732-43511=21898221,就是0.21898221秒,四舍五入,就是0.219秒,219毫秒。因为延时了100次,所以一次就是2.19毫秒。
之前的代码是delay(26),就是延时26次,相当于26*2.19=56.94毫秒,约为57毫秒,道理上已经低于人眼的范围,从仿真软件上,也可以看出闪烁,为什么用这个数值呢,主要是当我选则较低的延时时间时,就会出现仿真数码管不显示,没办法,因为手头没有实际的数码管去验证,所以就增大了延时时间,如果实际去验证的话,延时时间应该设置在5毫秒以内,因为是两个数码管,一个5毫秒,两个就是10毫秒。5/2.19=2.28次,所以延时设置为delay(2)。注意这一点,不然用26去试,闪得厉害。所以仿真软件只适用于测试,真正的还是需要去动手实践。
我们还接着看仿真效果吧。
当按下按键,首先是显示的0,1、2此时再不停地切换。
再次按下按键,数码管显示了10,因为buffer2中的0依然在,buffer1中存储的是1,所以就显示了10。
多次单击后,可以看到,奇数显示在左,偶数显示在右,随着单击,交替更新。有兴趣可以自己测试下。这就是动态显示,也不是那么难。