首页 理论教育 基于集成模数转换器的数字温度监测系统控制程序设计及调试

基于集成模数转换器的数字温度监测系统控制程序设计及调试

时间:2023-06-28 理论教育 版权反馈
【摘要】:微课数字温度监测系统程序的仿真设计及调试③在确保功能实现的前提下,程序尽量简练。设计智能数字温度监测系统的C语言源程序。因仿真系统没有提供热敏电阻的值阻与温度的对应关系,本项目数码管显示的内容是与热敏电阻采集的温度temp对应的电压值。同时,将temp的值送4位数数码管显示时,需将各位数字分别提取出来,可采用下述算法实现。

基于集成模数转换器的数字温度监测系统控制程序设计及调试

1.任务目标

根据智能数字温度监测电路设计图,编写C语言源程序,并用Keil软件编辑、调试。

2.任务实施

(1)编写智能数字温度监测系统的C语言源程序。

(2)用Keil软件编辑、调试程序。

(3)设计要求。

①程序编写规范。

②程序文件命名、管理规范。

微课 数字温度监测系统程序的仿真设计及调试

③在确保功能实现的前提下,程序尽量简练。

3.任务实施

(1)练习应用Keil软件。

第一步:创建新工程。

①启动KeilμVision4,单击“工程”→“新建μVision工程”菜单命令,如图7-38所示。

图7-38 创建新工程向导1

②在“Create New Project”对话框中,设置保存路径及文件名。要求每个工程一个单独的文件夹,如E:\File51,文件名为“temperature.uvproj”,如图7-39所示。

图7-39 创建新工程向导2

③在“Atmel”下拉列表框中选择目标器件“AT89C51”后单击“OK”按钮,在弹出对话框中单击“是”按钮,完成对器件的选择设置,如图7-40所示。

图7-40 创建新工程向导3

第二步:创建新源文件。

①单击“文件”→“新建”菜单命令,打开“Text1”窗口,编辑C语言源程序,以“*.c”保存到工程文件夹中,如temp.c,如图7-41所示。

图7-41 创建新的源文件向导1

②展开目标文件夹,按图示右键单击“源组1”,选择右键菜单中的“添加文件到源组1”命令,将文件添加到工程中,如图7-42所示。

第三步:设置输出.hex文件。

右击目标1,选择右键菜单中的“为目标‘目标1’设置选项”命令(或按Alt+F7组合键),打开“为目标‘目标1’设置选项”对话框,单击“输出”选项卡,选中“产生HEX文件”单选择钮,单击“确定”按钮,如图7-43所示。

图7-42 创建新的源文件向导2

图7-43 设置输出.hex文件

第四步:编译连接工程。

单击“工程”→“编译”菜单命令(或按F7键、单击调试按钮),编译成功界面如图7-44所示。

图7-44 编译界面

第五步:调试运行。

①单击“调试”→“启动/停止仿真调试”菜单命令(或按Ctrl+F5组合键),进入调试模式。

②按F5键,执行全速运行。

③检查工程文件夹中是否生成扩展名为“.hex”的文件,若有则停止调试;若没有则检查设置选项,是否勾选了“Creat HEX File”复选框,重新启动调试。

(2)设计智能数字温度监测系统的C语言源程序。

C语言是结构化程序,建议用程序流程图引导编程思路,并分模块设计。

①预处理模块。

a.预处理模块需有头文件和变量声明及定义等内容。如果单片机用AT89C51,则头文件用#include<reg51.h>;如果单片机用AT89C52,则头文件用#include<reg52.h>。(www.xing528.com)

b.数组建议定义2个。本项目对应温度的电压值满量程为5V,4位数码管的最高位为整数,后3位为小数,最高位数码管需显示小数点

·定义不显示小数点的0~9的共阴极字型码:

·定义显示小数点的0~9的共阴极字型码:

c.4位测量值建议用数组存储,可定义一个有4个元素的数组,初值都赋0,如

d.程序中用到的所有变量,建议在预处理模块定义,数据类型根据具体应用确定。

e.延时函数中的循环控制变量和数码管显示数据,可定义为整型;从ADC0808读出的数字量,可定义为字符型。例如:

f.单片机的控制位,根据实际连线情况用位定义指令sbit定义。例如:

定时器/计数器初始化函数和中断函数。建议采用单片机的定时/计数器中断溢出方式为ADC0808提供500 kHz的CLOCK脉冲信号。500 kHz的脉冲信号,周期为2μs,可用定时/计数器定时1μs的中断方式实现。为了保证定时更精确,可使定时/计数器工作在方式2。因单片机的晶振频率fOSC=12 MHz时,机器周期为1μs,计数初值可取255。因此,定时/计数器的初始化函数和中断函数可按下述方法设计:

③延时函数。本项目的数码管采用动态显示方式。动态显示是让多个数码管的段选端同时接收同一个字型码,而控制各数码管的位选端(公共端)高速轮流为有效信号。如果用共阴极数码管,则位选端的有效信号是低电平;如果用共阳极数码管,则位选端的有效信号为高电平。各数码管的位选端轮流为有效信号的时间间隔不能超过人眼对影像的残留效应(0.1~0.4 s)。数码管位选信号切换的时间间隔可用下述延时函数实现:

④显示函数。因仿真系统没有提供热敏电阻的值阻与温度的对应关系,本项目数码管显示的内容是与热敏电阻采集的温度temp(程序中定义的变量)对应的电压值。电压的最大值为5 V,对应的数字量是11111111,要想显示实时温度对应的电压值,需将从ADC0808中读出的数字量再换算成模拟量,换算的方法为

即temp=0.0196value。

为使数码管显示格式为“5.000”格式的数值,需将temp值扩大10000倍,即将temp×10000=196value。

同时,将temp的值送4位数数码管显示时,需将各位数字分别提取出来,可采用下述算法实现。

提取万位(最高位)数:disp[3]=temp/10000;

提取千位(次高位)数:disp[2]=(temp/1000)%10;

提取百位(次低位)数:disp[1]=(temp/100)%10;

提取十位(最低位)数:disp[0]=(temp/10)%10;

因只有4位数码管,个位数直接舍去。

数码管的最高位需显示小数点,因此引用预处理部分定义的数组SEGTAB2[]。

据此,显示函数可参考下述方法设计:

⑤主函数。根据ADC0808的控制要求,主函数中需由单片机给ADC0808传送启动正脉冲,即控制START端进行0→1→0的切换。

主函数中还需进行ADC0808的地址选择控制和转换结束的查询。本项目主函数可参考下述方法设计:

(3)用Keil软件编辑、调试程序,生成.hex文件。

(4)加载.hex文件。

①打开先前设计的硬件电路原理图文件(.DSN)。

②右键单击单片机模型后,再左键单击,弹出图7-45所示对话框。

③单击图中“Program File”文本栏后的浏览按钮,查找并打开程序调试输出的.hex文件后,单击“OK”按钮确定。

(5)仿真调试。

①单击图7-46所示Proteus应用程序窗口左下角的播放按钮,启动仿真。

②观察数码管显示的电压值和电压表或电压探针监测的电压值是否相等。

③单击停止仿真按钮,改变热敏电阻的阻值,观察数码管的显示值和电压表或电压探针监测的电压值的变化情况。

图7-45 Proteus中加载.hex文件示意图

图7-46 Proteus仿真运行示意图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈