单片机应用系统设计实例111单片机电子时钟的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开始 启动一次转换 A/D转换结束EOC=1? 取数据(OE=0) 0809通道地址加1 地址数小于8?
开始
四.汇编语言源程序清单(略) 五.C语言源程序清单(略)
开始
初始化
调用A/D转换子程序
调用显示子程序
二.A/D转换子程序
A/D转换子程序用于对ADC0809八路输入模拟电压进行A/D转换,并 将转换的数值存入8个相应的存储单元中,如下图。A/D转换子程序每隔一 定时间调用一次,也即隔一段时间对输入电压采样一次。
三.显示子程序
LED数码管采样软件译码动态扫描方式。在显示子程序中包含多路循环 显示程序和单路显示程序,多路循环显示程序把8个存储单元的数值依次取 出送到四个数码管上显示,每一路显示1秒。单路显示程序只对当前选中的 一路数据进行显示。每路数据显示时需经过转换变成十进制BCD码,放于 四个数码管的显示缓冲区中。单路或循环显示通过标志位00H控制。在显 示控制程序中加入了对单路或循环按键和通道选择按键的判断。
四.按键处理模块 按键处理设置为:如没有按键,则时钟正常走时。当按下K0按键
时,进入调分状态,时钟停止走动;按K1可K2按键可进行加1或减1操作; 继续按K0键可分别进行分和小时的调整;最后按K0键将退出调整状态,时 钟开始计时运行。
五.汇编语言源程序清单(略)
六.C语言源程序清单(略)
11.2 多路数字电压表的设计
11.2.1 多路数字电压表的原理及功能
多路数字式电压表应用系统主要利用A/D转换器,处理过程如下:先用 A/D转换器对各路电压值进行采样,得到相应的数字量,再按数字量与模 拟量成正比关系运算得到对应的模拟电压值,然后把模拟值通过显示器显 示出来。设计时假设待测的输入电压为8路,电压值的范畴为0~5V,要求 能在四位LED数码管上轮流显示或单路选择显示。测量的最小分辨率为 0.019V,测量误差为0.02V。
三.定时器/计数器T0中断服务程序 定时器/计数器T0用于时间计时。选择方式1,重复定时,定时时间
设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计 数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0; 分单元加到60则对时单元加1,同时分单元清0;时单元加到24则对时单元清 0,标志一天时间计满。在对各单元计数的同时,把它们的值放到存储单元 的指定位置。定时器/计数器T0中断服务程序流程图如图
11.2.2 系统硬件电路的设计
11.2.3 系统软件程序的设计
一.主程序 主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如下图。
初始化包含存放通道数据的缓冲区初始化和显示缓冲区初始化。另外,对 于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位 设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过 单路/循环按键控制。
开始
现场保护,重置初值 启动下一个50ms
50ms 计数器加1
否
50ms 计数器=20?
是Βιβλιοθήκη Baidu
秒单元加1,50ms计数器清0,秒写入秒个位
和秒十位
否
秒单元=60?
是
分单元加1,秒单元清0,分写入分个位和分十
位
否
分单元=60?
是
时单元加1,分单元清0,时写入时个位和时十
位
否
时单元=24?
时单元清0 是
中断返回
根据系统的功能要求,控制系统采用AT89C52单片机,A/D转换器采用 ADC0809。ADC0809是8位的A/D转换器。当输入电压为5.00V时,输出的 数据值为255(0FFH),因此最大分辨率为0.0196V(5/255)。 ADC0809的具有8路模拟量输入端口,通过3位地址输入端能从8路中选择 一路进行转换。如每隔一段时间轮流依次改变3位地址输入端的地址,就能 依次对8路输入电压进行测量。LED数码管显示采用软件译码动态显示。通 过按键选择可8路循环显示,也可单路显示,单路显示可通过按键选择显示 的通道数。
11.1.2 系统硬件电路的设计
11.1.3 系统软件程序的设计
电子时钟的软件系统由主程序和子程序组成,主程序程序包含初始化参数 设置、按键处理、数码管显示模块等,在设计时各个模块都采用子程序结构 设计,在主程序中调用。由于定时器/计数器采用中断方式处理,因此还要编 写定时器/中断服务子程序,在定时器/计数器中断服务程序中对时钟进行调 整。
一.主程序 主程序执行流程如图,主程序先对显示单元和定时器/计数器初始化, 然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应 的功能程序。
开始
显示单元清零
T0、T1设为16位计数模式
允许T0中断
调用显示子程序 否
按下键否? 是
进入功能程序
二.数码管显示模块 本系统共用8个数码管,从右到左依次显示秒个位、秒十位、横线、分 个位、分十位、横线、时个位和时十位。数码管显示的信息用8个内存单元 存放,这8个内存单元称为显示缓冲区,其中秒个位和秒十位、分个位和分 十位、时个位和时十位分别由秒数据、分数据和小时数据分拆得到。在本 系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示 信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过 查表程序在字段码表中查出所显示的信息的字段码,从P0口输出,同时在 P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示 显示缓冲区的内容。