本系统是以8031单片机为核心,配以存储器、A/D转换器、按键和数码管显示器构成一完整多功能单片机应用小系统。该系统最大优点是系统所用硬件少、功能多而且价格低廉,还可通过电子开关再扩充接入其它物理量,适合爱好者自行仿制和开发。
一、主要功能
1.输入功能:对外部RAM的内容显示和修改。2.数字钟:用来显示时间,同时具有定时提醒和倒计时提醒功能。3.频率测定:对10Hz~640kHz范围的外部频率进行测定。4. 信号发生器:本系统可产生100Hz~1MHz范围的信号方波。5.音乐:对乐谱人工翻译,将翻译结果送计算机某RAM区,可演奏各种音乐。系统的计时提醒就利用了这一功能。6.温度测量:通过14433A/D转换器对外界温度进行测量。
二、硬件结构及主要工作原理
本系统的硬件结构图见图1和图2,系统扩展了一片2764,用来存放监控程序,一片6264,供用户存放数据(也可不插),键盘、显示器的接口电路采用通用接口芯片8155,系统还设置了八个键、七个LED数码显示器作为人机对话窗口。显示器采用共阳极LED七段数码管,段选码由8l55PA口提供,位选码由PB口提供,LED采用动态扫描方式。键盘的行输出也由8l55PA口提供,列输入由P1.7完成,键盘采用逐列扫描查询工作方式。P1.0~P1.2用来控制4051的模拟通道的选择。对模拟量的采集是经8选1电子模拟开关4051送14433A/D转换器来完成的。14433A/D转换器第9、14管脚经一非门与8031的P3.2相连,当对模拟量转换结束后,由此向8031提出中断请求。


14433是3\(\frac{1}{2}\)的CMOS双积分A/D转换器,因其价廉抗干扰性好,转换速度较低(1~10次/秒),在一些非快速过程转换系统中得到广泛应用。模拟电路部分有基准电压、模拟电压输入部分,数字电路部分由逻辑控制、BCD码及输出锁存器、多路开关时钟以及极性判别、溢出检测等电路组成。14433采用了动态扫描BCD码输出方式,即千、百、十、个各位BCD码轮流在Q0~Q3端输出,同时在DS1~DS3端出现同步字选通信号。
三、软件设计
本系统程序设计总体流程图见图3,共设4个按键,7个数码管显示器。

显示器:最左端显示器为功能显示位(见下文),它显示的是功能编码。显示缓冲区为单片机内RAM50H~56H,50H内存放的是功能编码值,其它6个显示缓冲区依据功能的不同,存放的可以是地址值和数据、温度值、所测信号频率值以及时间,还可以是送入单片机系统的数据。
按键:本系统只定义了四个键,其中两个关于数字的键(增、减1键)、两个命令键(定位健、回车键)。本系统把键分析处理放到各个功能处理程序部分去了。具体的处理方法是:专门设立一功能显示位,依据它的显示值来处理按键的操作。只有小数点在功能显示器上时,数字键才起作用,这时按数字键会改变系统的功能(系统内部各功能互不影响,只是显示的内容会因功能编码的改变而不同),依据功能编码会自动显示测量值(包括时间)或者等待输入数据。只有在等待输入数据时,才需要使用这四个键(见键的处理部分)。
为了提高CPU的效率,采用了中断技术处理时钟计时以及温度测量。
下面就几个主要功能部分及处理方法简要介绍如下:
1.初始化程序
入口地址为0000H,它为应用程序的正常工作作好了准备。规定了中断源的响应、定时计数器的中断间隔、8155的初始化、键扫描的初始状态,规定了8155的256个字节的RAM用来计时提醒以及8031内部RAM初始化。
2.功能测试与功能处理程序
功能测试与功能处理程序流程图见图4。功能测试就是对显示缓冲区50H的内容进行判断,根据内容的变化来选择不同的功能。

3.显示处理
显示处理子程序流程图见图5,8031片内RAM的50H~56H单元为显示缓冲区,依次存放七个要显示的数,以分离的BCD码形式存放。其中50H中的内容为功能代码,58H单元的内容为小数点所在位。段选码为要显示的字符的编码,位选码为选择哪位亮。

因显示器控制线只有7根,它与8l55PB口的连接见图2,所以R2的内容在右移时,要判断且要跳过一位。
4.对外RAM单元的内容显示与修改
当最左端数码管显示0时,即选择了此功能。外部RAM数据存储器的内容显示与修改流程图见图6。

5.电压-温度转换子程序
对温度的测量是通过测量温敏二极管两端的电压,依据电压与温度的对应关系用软件的方法来实现的。二极管两端的电压与温度并不是严格的线性关系,要提高测量的准确性可以选择线性好的温敏二极管,选择高档次A/D转换器,但在要求不高的情况下,一种经济实用的方法就是利用现有条件用软件的方法调整电压与温度的线性关系。即把电压与温度分成可近乎线性的几段考虑,在段内看成线性。线性段的参数组成一个表,表内参数包括:电压值、此电压所对应的温度、温度的零度分界标志及线性变化量四部分,通过查表的方法求得温度的近似值。关于程序设计部分的细节,前几讲中有过介绍,这里就不作更多的说明了。
6.键扫描、键分析与键处理
P1.7作为输入线,它通过上拉电阻被钳位在高电平状态,见硬件结构图2,键盘中有无按键按下是由8155的A口送入全扫描字、P1.7读入状态来判断的。其方法是:给8155的A口均量低电平,然后读入P1.7的状态。如有键按下,P1.7就会为低电平,具体是哪个键按下,需8155的A口逐位置低电平,检查P1.7的状态,具体程序设计就不赘述了。
本系统共设八个键,定义了四个键:
(1).小数点移动键:单片机RAM 58H内存放小数点所在位置值,每按此键一次,58H内容就要顺序变化一次,这样来达到使小数点位置变化。
(2).数码增1键:首先确定小数点的位置,使相应显示缓冲单元的内容增1,连续按动,显示缓冲单元的内容就会从0,1,2……9,A,B……E,F之间循环连续变化。
(3).数码减1键:和增1键相反。
(4).回车键:将显示缓冲区的内容根据功能的不同分别送不同的处理缓冲区。
7.中断处理(包括两部分)
(1).定时器0中断处理子程序
定时器0每隔100毫秒向CPU申请中断处理,处理内容包括数字钟处理、顺计时提醒、倒计时提醒、信号产生、测频等多项处理。其中:规定定时器1为计数工作方式,对来自P3.5管脚的外界脉冲进行计数,得到100毫秒内的脉冲个数,乘10便得到1秒内的脉冲个数,即可测定来自P3.5的信号的频率。
(2).外部中断0请求处理子程序
温敏二极管两端的电压经多路模拟开关送14433A/D转换器,当转换完成时就向CPU发出中断申请,中断处理内容为将模拟电压转换成数字量且送给定处理缓冲区,等待电压-温度转换子程序调用。
四、功能说明及操作步骤
打开电源,机器自动进入功能搜索状态,是左端数码管显示的是功能编码值,其它六个数码管所显示的数据依据功能的不同也不同,下面作具体介绍:
1.外存储器内容的显示和修改(功能编码为0)
打开电源,机器自动进入外存储器的显示与修改状态,这时中间四个显示器显示的是存储器的地址值,右面两个显示的是与存储器有关的数据。如地址第一次出现,则显示的是存储器的内容,这时可用定位键和数字键修改右面两个显示器的内容,把修改后数据送入存储器需接回车键。
2.数字钟(功能编码为1)
这时右面六个显示位自左至右两个为一组,分别显示时分秒。开机后便非始从0时0分0秒计时,如需要对时,需进入功能6。
3.频率计(功能编码为2)
显示所测信号的频率值,外界信号送入单片机的P3.5(第15管脚),经T1计数器计数并显示。
4.信号发生器(功能编码为3)
这时用户可根据实际需要,将信号频率值通过按键和显示器输入给单片机,按回车键,显示器上给定的信号频率就被送入单片机指定单元,然后由软件将信号频率折合成分频系数送入8155的定时器,8155定时器的入端信号由8031的ALE端提供。1MHz的频率经分频后,在8155芯片的引脚6就会有给定频率的输出方波波形。
5.温度测量显示(功能编码为4)
当选择此功能时,程序将A/D采集的电压信号转换成温度值并显示。
6.倒计时提醒(功能编码为5)
可通过按键输入给定时间值,再按回车键,这样就会在给定时间进行报时提醒。
7.校时(功能编码为6)
用户将标准时间写入六个数码位(按时分秒顺序,每部分占两数码管),最后按回车键,这样单片机内的数字钟就是标准时间了。
关于顺计时提醒,它占用了8l55RAM的256个字节,可通过功能编码0输入需提醒的时间序列。一次报时需两存储单元,如需多次报时,需将具体时间按顺序写入8155存储区,该存储区的首地址为7E00H。
本系统中采用喇叭来音乐报时,用户也可用电铃,这在机关单位也很实用。(刘文堂 周振安)