1、第十一章 单片机应用系统设计实例 第十一章 单片机应用系统设计实例 11.1 单片机电子时钟的设计通常通过用单片机设计电子时钟有两种方法:一是通过单片机内部的定时器 /计数器。这种方法硬件线路简单,采用软件编程实现时钟计数,一般称为软时钟。系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合;二是采用时钟芯片,它的功能强大,功能部件集成在芯片内部,自动产生时钟等相关功能。硬件成本相对较高,软件编程简单。通常用在对时钟精度要求较高的场合。 11.1.1 软时钟的基本原理软时钟是利用单片机内部的定时器 /计数器来实现,它的处理过程如下:首先设定单片机内部的一个定时器 /计数器工作于定时方
2、式,对机器周期计数形成基准时间(如 10ms),然后用另一个定时器 /计数器或软件计数的方法对基准时间计数形成秒(对 10ms计数 100次),秒计 60次形成分,分计 60次形成小时,小时计 24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来即可。第十一章 单片机应用系统设计实例 11.1.2 系统硬件电路的设计第十一章 单片机应用系统设计实例 11.1.3 系统软件程序的设计电子时钟的软件系统由主程序和子程序组成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等,在设计时各个模块都采用子程序结构设计,在主程序中调用。由于定时器 /计数器采用中断方式处理,因此还要编写定时
3、器 /中断服务子程序,在定时器 /计数器中断服务程序中对时钟进行调整。一主程序主程序执行流程如图,主程序先对显示单元和定时器 /计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。第十一章 单片机应用系统设计实例 开始显示单元清零T0、 T1设为 16位计数模式允许 T0中断调用显示子程序进入功能程序按下键否?否是第十一章 单片机应用系统设计实例 二数码管显示模块本系统共用 8个数码管,从右到左依次显示秒个位、秒十位、横线、分个位、分十位、横线、时个位和时十位。数码管显示的信息用 8个内存单元存放,这 8个内存单元称为显示缓冲区,其中秒个位和秒十位、分个位
4、和分十位、时个位和时十位分别由秒数据、分数据和小时数据分拆得到。在本系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从 P0口输出,同时在 P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。三定时器 /计数器 T0中断服务程序定时器 /计数器 T0用于时间计时。选择方式 1,重复定时,定时时间设为 50ms,定时时间到则中断,在中断服务程序中用一个计数器对 50ms计数,计 20次则对秒单元加 1,秒单元加到 60则对分单元加 1,同时
5、秒单元清 0;分单元加到 60则对时单元加 1,同时分单元清 0;时单元加到 24则对时单元清 0,标志一天时间计满。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器 /计数器 T0中断服务程序流程图如图 第十一章 单片机应用系统设计实例 开始现场保护,重置初值启动下一个 50ms50ms 计数器加 1秒单元加 1, 50ms计数器清 0,秒写入秒个位和秒十位50ms 计数器 =20?否是分单元加 1,秒单元清 0,分写入分个位和分十位秒单元 =60?时单元加 1,分单元清 0,时写入时个位和时十位分单元 =60?时单元清 0时单元 =24?中断返回否否否是是是第十一章 单片机应
6、用系统设计实例 四按键处理模块按键处理设置为:如没有按键,则时钟正常走时。当按下 K0按键时,进入调分状态,时钟停止走动;按 K1可 K2按键可进行加 1或减 1操作;继续按 K0键可分别进行分和小时的调整;最后按 K0键将退出调整状态,时钟开始计时运行。五汇编语言源程序清单(略)六 C语言源程序清单(略)第十一章 单片机应用系统设计实例 11.2 多路数字电压表的设计11.2.1 多路数字电压表的原理及功能多路数字式电压表应用系统主要利用 A/D转换器,处理过程如下:先用 A/D转换器对各路电压值进行采样,得到相应的数字量,再按数字量与模拟量成正比关系运算得到对应的模拟电压值,然后把模拟值通
7、过显示器显示出来。设计时假设待测的输入电压为 8路,电压值的范畴为 05V,要求能在四位 LED数码管上轮流显示或单路选择显示。测量的最小分辨率为 0.019V,测量误差为 0.02V。根据系统的功能要求,控制系统采用 AT89C52单片机, A/D转换器采用 ADC0809。 ADC0809是 8位的 A/D转换器。当输入电压为5.00V时,输出的数据值为 255( 0FFH),因此最大分辨率为0.0196V( 5/255)。 ADC0809的具有 8路模拟量输入端口,通过 3位地址输入端能从 8路中选择一路进行转换。如每隔一段时间轮流依次改变 3位地址输入端的地址,就能依次对 8路输入电压
8、进行测量。 LED数码管显示采用软件译码动态显示。通过按键选择可 8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。第十一章 单片机应用系统设计实例 11.2.2 系统硬件电路的设计第十一章 单片机应用系统设计实例 11.2.3 系统软件程序的设计一主程序主程序包含初始化部分、调用 A/D转换子程序和调用显示程序,如下图。初始化包含存放通道数据的缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时 00H位设置为 0,默认为循环显示,当它为 1时改变为单路显示控制, 00H位通过单路 /循环按键控制。开始初始化调用 A/D转换子程序调用显示子程序