6.3 数据的显示与刷新
更新显示器涉及到两个操作:发数据和改片选信号。但实践发现,代码中无论是先改片选信号还是先发数据信号,都会出现重影(即相邻两位显示差不多)这也是动态扫描引起的。实践先该片选,则前一位的数据会在下一位显示一段时间;先发数据,则后一位的数据会在前一位显示一段时间。因而出现重影。解决这个问题的办法是先进行一个消影操作,然后再发片选,最后发数据。这样就很好地解决了重影问题。这样做的关键在于,在极短的一段时间内让显示器都不亮,等一切准备工作都做好了以后再发数据,只要显示频率足够快,是看不出显示器有闪烁的(程序用定时中断频率作为显示更新频率,在表 1 中,只当更新率??00 赫兹时,才发现显示器有闪烁)。这段显示程序代码如下:
P1=0 x00; // 消影
P2=选择[选择];// 发片选信号
codetmp=acode[ echoarray[选择]];
如果 (选择 ==2&&mod==0&&dotflag)// 判断是否显示 "."
codetmp|=0 x80;
P1=codetmp; // 发数据
选择=++选择%4; // 片选计数器下移
6.4 键盘响应程序
键盘处理程序流程相对简单,只是简单的判键与处理。这里不再给出流程图。所谓键盘消抖就是一次按建的多次响应问题。当然,一般一次按建只须响应一次,但有的时候需要多次响应,如系统进入修改模式,数字的增减。当出现这种问题时,用户的一次击键是作为一次还是多次处理,必须有一个标准。程序中我用到了一个标志位,相当于中断系统的中断标志。当用户按下键时,标志清零,松开键时,标志恢复;键按下超过一定时间(靠一扫描计数器判定)后,恢复标志,则经过一定的时间延迟(也靠一扫描计数器判定)可以响应一次按键(即一次按键的多次响应)。而事实上,键盘响应程序就是一个事件触发器,键盘的每一个状态(按下,松开, 点击)都可能引发一段响应程序(如:重新设定键按下 => 准备复位;松开=> 系统复位)。这里的时间延迟靠的是指令计数,由于受硬件中断等不确定因素影响,这个延迟一般不准确,但通过实践测试,可以找到一些合适的值。
6.5系统性能测试与功能说明
(1)定时计数器的初始值设置公式推导
系统中所选用的晶振的频率为fosc,则机器周期为:公式1: [2] 设定时器要求的中断频率为k,计数器位数为n,则定时计数器的初值X设置有如下公式: [2] 。于是:原始公: 而实验测得的数据显示,这个公式所得的结果并不可靠:(下表中的所有数据都是在计数器初始值严格按照原始公式给出的条件下测得,以个人计算机机系统时钟为标准)。从表 1 中的数据可知,严格按照原始公式得出的计数初值是存在极大误差的,这个误差总使系统时间变慢,而且,系统时间的误差值随着每秒中断次数的增多而增大,随计时总长的增长而增大,并且总是成比例(在误差允许的范围内)。这就是说,系统的误差跟每秒中断次数和个人计算机标准时长的乘积(即中断总次数)成正比。也就是说,每次中断计时的时间误差是一个常数。
误差来源分析
不考虑晶振等固件的误差,则系统机器周期可以由公式 1 准确给出,因而系统误差不可能来自于硬件,而应该主要来自于软件方面。系统每次调用定时中断程序的过程中,硬件并没有自动进入下一个定时周期,而是在调用中断程序以后由软件置数来实现的。而在程序
表1 系统时间校正测试数据
调用过程中,堆栈建立,参数传递等都是需要耗时的,而这些时间都被无形中加到了定时长度中去。所以,使得每次定时长度都大于理论推导值,在宏观上表现出来就是系统比理论计算出来的结果变慢了(这于表格 1 所得的结论恰好一致)。另外,由于系统每次调用中断处理程序所执行的操作都是相同的,也就是说,系统每次定时的时间误差应该是一个常数(这也恰好跟实验数据相吻合)。由上面的数据和分析可知,原始公式应该修改为:公式2: 则由表格 1 ,关于的计算公式如下:公式3:
由表格 1 数据,实际中要求 k 最小,而又不影响显示效果,才能使误差越小,故实测中取 k=160 。根据表格一计算得≈ 20 (所用晶振频率为 11.0592 MHz )。按表 1 的实验方法,得表 2 :
表2 参数优化后的计时测试数据
这些数据较表 1 已有很大准确性,但与实际应用还有一定差距。末两行是根据前面参数规律稍做改动得到的, 与公式 2 有一定出入, 但与个人计算机系统标准时间已经相当接近。由于表 1 的数据本身是肉眼估出来的,本身就带有很大的误差,实际运用可用精密仪器得到表 1 数据,则系统参数可以更进一步接近实用值。
(2)系统功能与操作说明
主要功能:二十四进制时间显示 ( 时、分), 秒以"."的闪烁表示;电子跑表计数功能;可通过按键修改,显示时,分,秒,复位;可通过个人计算机机串口设置时,分,设置时连续发送四位十辣进制数,依次为时的高,低位,分的高, 低位。完成后秒自动复位。辅助功能:键盘共 4 个键,从左到右依次标名为向上的,向下的,组,重新设定, 用来修改和设置系统时钟。同时还可以通过串口来修改和设置系统时钟。
6.6小结
系统的功能完全符合设计任务的要求,经过大量的测试数据显示, 系统的可靠性已经完全达到了实际电子钟的设计要求。同时系统具有很强的扩展性:添加 A/D 转换器可更改成数值仪表,而添加 D/ 转换器则可以设计成波形发生器,同时扩充串口的功能可以道到很好的计算机控制系统。系统扩展图如下:
上一页 [1] [2] [3] [4] [5] [6] 下一页