智能仪表综合课程设计
4 程序设计
系统的软件程序中主函数含有初始化程序,同时分别调用AD0832转换程序、数据转换程序、显示函数,在显示程序中包含LCD1602驱动程序。以此完成整个系统的运行。
4.1 程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图4.1所示。
图4.1 数字式直流电压表主程序框图
4.2 系统子程序设计
(1)初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。
14
智能仪表综合课程设计
(2)显示子程序
显示子程序采用字符型液晶显示,此模块模块是一种专门用于显示字母、数字、符号等
点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。 (3)A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图4.2所示。
图4.2 A/D转换流程图
15
智能仪表综合课程设计
5 仿 真
5.1软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试。
本系统的调试主要以软件为主,其中系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是C语言,用Keil软件将程序写入单片机。
5.2显示结果及误差分析
5.2.1 显示结果
1. 当IN0口输入电压值为0V时,显示结果如图5.1所示,测量误差为0.01V。
图5.1 输入电压为0V时,LCD的显示结果
16
智能仪表综合课程设计
2.当IN0输入电压值为2.10V时,显示结果如图5.2所示。测量误差为0.01V。
图5.2输入电压为2.10V时,LCD的显示结果
3. 当IN0口输入电压值为5.00V时,显示结果如图5.3。测量误差为0V。
图5.3 输入电压为5.00V时,LCD的显示结果
17
智能仪表综合课程设计
5.2.2 误差分析
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表5.1所示:
表5.1 简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V 简易电压表测量值/V 绝对误差/V 0.00 0.50 1.00 1.50 2.10 2.50 3.00 3.56 4.00 5.00 0.00 0.51 1.00 1.51 2.11 2.50 3.00 3.56 4.00 5.00 0.01 0.01 0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.00 由于单片机STC89C52为8位处理器,当输入电压为5.00V时,ADC0832输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.02V的幅度变化。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0832的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
18