基于单片机的温度测量电路设计
摘要
该温度测量报警系统以AT89C51单片机为核心控制芯片,实现温度检测报警
功能的方案。该系统通过调节可调电阻调节电压作为模拟输入量,通过A/D转换
成温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不
同的报警上下限。该系统实现了对温度的自动监测,为设备的正常运行提供了条
件,在工业中具有一定的实用价值和广泛的应用前景。另外该方案显示部分采用
数码管来显示温度。本文详细阐述了单片机和LED数码显示器的内部结构,系统
硬件电路和软件程序的设计及调试过程,同时给出了原理图、流程图等。涵盖了
从需求分析,系统设计,编程,原理图,PCB图以及最后的试验板焊制等产品开
发的基本过程。
目录
摘要 ........................................................................... 1
1. 引言........................................................................3
2 AT89C51与ADC0808简介及引脚功能 ............................................. 4
2.1 AT89C51单片机管脚介绍 .................................................. 4
2.2 ADC0808管脚介绍 ......................................................... 5
3 系统设计 ..................................................................... 7
3.1 设计任务与要求 ........................................................... 7
3.1.1 设计任务 ............................................................ 7
3.1.2 设计要求: .......................................................... 7
3.2设计思路 ................................................................. 7
3.3 设计方案 ................................................................. 7
3.4主程序设计 ............................................................... 8
4 系统硬件设计 ................................................................. 9
4.1电路原理图 ............................................................... 9
4.1.1主控器模块 .......................................................... 9
4.1.2 数码管显示模块 ...................................................... 9
4.1.3 A/D转换模块 ....................................................... 10
4.1.4 报警模块 ........................................................... 10
5系统仿真与调试 .............................................................. 12
5.1仿真软件简介 ............................................................ 12
5.2 protues仿真 ............................................................ 12
5.3仿真结果 ................................................................ 12
5.3.1 正常情况 ........................................................... 12
5.3.2 低于温度下限 ....................................................... 13
5.3.3 高于温度上限 ....................................................... 13
5.4系统调试 ................................................................ 13
6 总结 ........................................................................ 14
7附录 ........................................................................ 15
1 程序清单: .................................................................. 15
8参考文献 .................................................................... 20
1. 引言
随着计算机技术的飞速发展和普及,数据采集系统在多个领域有着广泛的应用。
数据采集是工、农业控制系统中至关重要的一环,在医药、化工、食品、等领域
的生产过程中,往往需要随时检测各生产环节的温度、湿度、流量及电压等参数。
同时,还要对某一检测点任意参数能够进行随机查寻,将其在某一时间段内检测
得到的数据经过转换提取出来,以便进行比较,做出决策,调整控制方案,提高
产品的合格率,产生良好的经济效益。
随着工、农业的发展,多路数据采集势必将得到越来越多的应用,为适应这
一趋势,作这方面的研究就显得十分重要。在科学研究中,运用数据采集系统可
获得大量的动态信息,也是获取科学数据和生成知识的重要手段之一。总之,不
论在哪个应用领域中,数据采集与处理将直接影响工作效率和所取得的经济效益。
采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡
回检测,并且能够对数据实行存储、处理、分析计算以及从检测的数据中提取可
用的信息,供显示、记录、打印或描绘的系统。
温度测量成为广大电子领域中必须掌握的过程,并且对测量的精度和采集功能的
要求也越来越高,而温度的测量与显示系统甚为重要。在课程设计中对一路温度
采集系统与显示系统作了基本的研究。电压采集与通信控制采用了模块化的设计,
并用单片机8051来实现,硬件部分是以单片机为核心,还包括模-数转换模块,
显示模块,和串行接口部分,还有一些简单的外围电路。1路被测电压通过通用
ADC0808模-数转换,实现对采集到的电压进行模拟量到数字量的转换,由单片机
对数据进行处理,用数码管显示模块来显示所采集的结果,由相关控制器完成数
据接收和显示,汇编程序编写了更加明了化数据显示界面。本系统主要包括四大
模块:数据采集模块、控制模块、显示模块、A/D转换模块。绘制电路原理图与
工作流程图,并进行调试,最终设计完成了该系统的硬件电路。在软件编程上,
采用了汇编语言进行编程,开发环境使用相关集成开发环境。开发了显示模块程
序、A/D转换程序。
2 AT89C51与ADC0808简介及引脚功能
2.1 AT89C51单片机管脚介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器,是低电
压,高性能CMOS8位微处理器,俗称单片机。如图1
图1 管脚图
AT89C51管脚介绍:
VCC:供电电压。
GND:接地。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接
收输出4TTL门电流。 图2 AT89C51管脚
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,
输出4个TTL门电流,输出4个TTL门电流,当P2口被写“1”时,其管脚被内
部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将
输出电流。这是由于内部上拉的缘故。P2口在FLASH编程和校验时接收高八位地
址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL
门电流。P3口也可作为AT89C51的一些特殊功能口。
RST:复位输入。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收 8TTL门电流。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的
地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机
器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将
不出现。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.2 ADC0808管脚介绍
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8
路模拟输入信号中的一个进行A/D转换。引脚图如图
2:
图2 ADC0808引脚图
DAC0808各引脚功能:
ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。各引脚功能
如下:
1~5和26~28(IN0~IN7):8路模拟量输入端。
8、14、15和17~21:8位数字量输出端。
6(START):A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)
使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端
输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。
11(VREF(+))和16(VREF(-)):参考电压输入端
12(Vcc):主电源输入端。 22(ALE):地址锁存允许信号,输入,高电平有效。
13(GND):地。
23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的
一路
3 系统设计
3.1 设计任务与要求
3.1.1 设计任务
基于AT89C51单片机设计温度检测报警,并且可以根据应用环境不同设定不
同的报警上下限。报警系统采用光报警和蜂鸣器报警。
3.1.2 设计要求:
(1)用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发
出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的
温度范围在0-99℃。并将实时的温度显示在数码管上。
(2)要求使用的元器件数目尽量少。
(3)设计硬件电路原理图,合理选择元器件;编写使用说明书,说明使用方法。
设计在实验板上实现该功能的程序并进行调试。
3.2设计思路
设计框图如图3
图3
3.3 设计方案
总体设计方案:
采用51系列单片机作为整机的控制单元,通过调节可调电阻将0-5V模拟
电压信号通过AD0808模数转换成数字量0--255,通过内部程序公式转换成温度
0--99然后通过数码管显示其温度值。根据设定的温度报警上下值可以进行光报警
和蜂鸣器报警
3.4主程序设计
主程序流程图如图4所示。
4 系统硬件设计
4.1电路原理图
主要包括主控模块,A/D转换模块,显示模块,报警模块如图
5
图5系统电路原理图
4.1.1主控器模块
本系统控制器芯片采用AT89C51单片机:
P0:与ADC0808 8位输出端口相连
P1:与数码管七段输入相连
P3.0接高温光报警,P3.1接低温光报警,P3.7接蜂鸣器
4.1.2 数码管显示模块
图6为液晶显示电路模块,图中为一个两位七段数码管,其接法为共阴极接法
图6数码管显示电路
4.1.3 A/D转换模块
采用ADC0808模数转换将0--5伏电压模拟量转换成数字量0--255。如图7
图7 ADC0808模数转换
4.1.4 报警模块
如图8
图8报警模块
5系统仿真与调试
5.1仿真软件简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是: (1)实现了单片机仿真和SPICE电路仿真相结合。
(2)(2)支持主流单片机系统的仿真。
(3)(3)提供软件调试功能。如Keil C51 uVision2、MPLAB等软件。
(4)具有强大的原理图绘制功能。
总之,该软件是一款集单片机和S
PICE分析于一身的仿真软件,功能极其强大。
5.2 protues仿真
(1) 用Keil 3 软件加载C语言源程序并生成hex文件。
(2) 双击AT89C51,在Program File
一栏中加入hex文件并将Clock
Frequency改为12MHz。
(3)点击运行按钮,开始仿真。
5.3仿真结果
5.3.1 正常情况
数码管显示的数字在0--99范围内,结果如图9
图9正常情况
5.3.2 低于温度下限
数码管显示温数字低于30,P3.1为低电平,故在这路上的LED灯亮,蜂鸣器发出声音,结果如图10。.
图10 低于下限
5.3.3 高于温度上限
数码管显示数字高于60,P3.0为低电平,故在这路上的LED灯亮,蜂鸣器发出声音,结果如图11。.
图11 高于上限
5.4系统调试
在调试过程中主要是对程序的修改,特别是延时子程序。开始延较短时,
数码管同时显示但不稳定的显示这些温度。如果延时较长则温度数字不会同时显示出来。通过修改程序,将延时调到适中,系统正常工作。
6 总结
回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,在接近一月的日子里,可以说得是苦多于甜,但是可以学到很多的的东西,不仅是学习上的,而且是关于做人做事方面的感悟。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。我在设计的过程中遇到了许多问题,同时也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对汇编语言掌握得不透彻。
此次课程设计由于刚开始对书本知识掌握不够,编程遇到了很多难题,不过在翁老师的指导下我明白了很多,也学到了很多,在此衷心感谢翁老师!
7附录
1 程序清单:
#include
#define uchar unsigned char
#define uint unsigned int
unsigned int temp;
unsigned char getdata;
unsigned char d;
UnsignedcharDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管的段选0~9显示
unsigned char DSY_IDX[]= {0xF7,0xFB,0xFD};//共阴数码管的低三位的位选
unsigned char Temperature[]={0,0}; //定义把采集到的温度数据个位十位百位放到该数组。该数组初值为0;
sbit ST= P2^5;//AD0809转换启动信号与地址所存允许引脚注意:在使用时ALE和STRT信号引脚连在一起
sbit OE= P2^7;//ADC0808输出允许信号
sbit EOC=P2^6;//ADC0808转换结束信号引脚
sbit CLK =P2^4;//ADC0808的时钟引脚
sbit H_LED=P3^0;//超过60度时的灯光指示
sbit L_LED=P3^1;//低于30度时的灯光指示
sbit SPK = P3^7;//超过60度和低于30度时的蜂鸣器报警
bit Flag0;
bit Flag1;
unsigned int cnta;
unsigned int cntb;
bit alarmflag;
void DelayMS(uint x)//N毫秒延时函数
{
uchar i;
while(x--)
for(i = 0;i
}
void Show_Temperature()//数码管显示函数
{
uchar i;
for(i=0;i
{
P1 = DSY_CODE[ Temperature[i] ];
P0显示
P2&=DSY_IDX[i];//相与是为了保证P2口的其它位的状态值保持不变,保持原来的值
DelayMS(5); //延时5毫秒给硬件反应时间
P2 |= 0x0F;//让数码管动态扫描显示
}
}
void Init() //定时器0和定时器1的初始化 定时器0给ADC0808提供时钟让其工作
{
IE = 0x8a;
TMOD = 18;
TH0 = 245;
TL0 = 0;
TH1 = (65536 -1000) /256; //给定时器1设置初值为1毫秒
TL1 = (65536 -1000) %256;
TR0 = 1; //开启定时器0给ADC0808提供时钟
}
void main()//主函数
{
Init();//定时器初始化
H_LED = L_LED = 1; //灯光提示灭
while(1)
{
//把采集回来的温度数字送入到
ST = 0;
ST = 1;
ST = 0;//寄存器SAR复位,及为ADC0809的起始信号
while(1)
{
if(EOC == 1)//ADC0808转换结束后改引脚为高低平
{
OE = 1;//输出允许信号为1时表示把ADC0808采集的数据输出 getdata=P0;//把采集到的数据送到P1口处理
OE = 0;//又打开ADC0808让继续开始转换
temp=getdata*25;//因为有AD采集回来的数为0~255;显示温度为0~99;及255/100=25.5及25个步进值代表1摄氏度及为一个等差数列公差为25
temp=temp/64; //temP就相当于温度 ,及等差数列中的N;而getdata就是等差数列的和
Temperature[1] = temp/10;//采集到数据的十位
Temperature[0] = temp%10;//采集到数据的个位
Show_Temperature();//送到显示函数显示
if(temp 60)//如果采集到的温度大于60度报警 { TR1 = 1; H_LED = 0; L_LED = 1; Flag0=0; Flag1=1;
} else //如果在30~60度之间则不报警 { TR1 = 0; H_LED = L_LED = 1; Flag0=0; Flag1=0; SPK=1; }
break;//跳出继续进行ADC0808的采集
}
}
}
}
void T0_INT() interrupt 1//定时器0的中断函数
{
CLK = ~CLK;
}
void T1_INT() interrupt 3//定时器1的中断函数
{
TH1 = (65536 -1000) /256; //给定时器1设置初值为1毫秒
TL1 = (65536 -1000) %256;
if(( Flag0==1) && ( Flag1==0))
{
cnta++;
if(cnta==800)
{
cnta=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else if(( Flag0==0) && ( Flag1==1))
{
cntb++;
if(cntb==200)
{
cntb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else
{
alarmflag=0;
cnta=0;
cntb=0;
}
}
8参考文献
《单片微型计算机原理、应用及接口技术》张迎新主编,国防工业出版社 《单片机原理与接口技术》余锡存 主编 西安电子科技大学出版社 《微型计算机技术及应用》戴梅萼 编著 清华大学出版社
《微型计算机原理及应用》李伯成 主编 西安电子科技大学出版社 《微机原理与应用》 张宗根 主编 陕西师范大学出版社
基于单片机的温度测量电路设计
摘要
该温度测量报警系统以AT89C51单片机为核心控制芯片,实现温度检测报警
功能的方案。该系统通过调节可调电阻调节电压作为模拟输入量,通过A/D转换
成温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不
同的报警上下限。该系统实现了对温度的自动监测,为设备的正常运行提供了条
件,在工业中具有一定的实用价值和广泛的应用前景。另外该方案显示部分采用
数码管来显示温度。本文详细阐述了单片机和LED数码显示器的内部结构,系统
硬件电路和软件程序的设计及调试过程,同时给出了原理图、流程图等。涵盖了
从需求分析,系统设计,编程,原理图,PCB图以及最后的试验板焊制等产品开
发的基本过程。
目录
摘要 ........................................................................... 1
1. 引言........................................................................3
2 AT89C51与ADC0808简介及引脚功能 ............................................. 4
2.1 AT89C51单片机管脚介绍 .................................................. 4
2.2 ADC0808管脚介绍 ......................................................... 5
3 系统设计 ..................................................................... 7
3.1 设计任务与要求 ........................................................... 7
3.1.1 设计任务 ............................................................ 7
3.1.2 设计要求: .......................................................... 7
3.2设计思路 ................................................................. 7
3.3 设计方案 ................................................................. 7
3.4主程序设计 ............................................................... 8
4 系统硬件设计 ................................................................. 9
4.1电路原理图 ............................................................... 9
4.1.1主控器模块 .......................................................... 9
4.1.2 数码管显示模块 ...................................................... 9
4.1.3 A/D转换模块 ....................................................... 10
4.1.4 报警模块 ........................................................... 10
5系统仿真与调试 .............................................................. 12
5.1仿真软件简介 ............................................................ 12
5.2 protues仿真 ............................................................ 12
5.3仿真结果 ................................................................ 12
5.3.1 正常情况 ........................................................... 12
5.3.2 低于温度下限 ....................................................... 13
5.3.3 高于温度上限 ....................................................... 13
5.4系统调试 ................................................................ 13
6 总结 ........................................................................ 14
7附录 ........................................................................ 15
1 程序清单: .................................................................. 15
8参考文献 .................................................................... 20
1. 引言
随着计算机技术的飞速发展和普及,数据采集系统在多个领域有着广泛的应用。
数据采集是工、农业控制系统中至关重要的一环,在医药、化工、食品、等领域
的生产过程中,往往需要随时检测各生产环节的温度、湿度、流量及电压等参数。
同时,还要对某一检测点任意参数能够进行随机查寻,将其在某一时间段内检测
得到的数据经过转换提取出来,以便进行比较,做出决策,调整控制方案,提高
产品的合格率,产生良好的经济效益。
随着工、农业的发展,多路数据采集势必将得到越来越多的应用,为适应这
一趋势,作这方面的研究就显得十分重要。在科学研究中,运用数据采集系统可
获得大量的动态信息,也是获取科学数据和生成知识的重要手段之一。总之,不
论在哪个应用领域中,数据采集与处理将直接影响工作效率和所取得的经济效益。
采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡
回检测,并且能够对数据实行存储、处理、分析计算以及从检测的数据中提取可
用的信息,供显示、记录、打印或描绘的系统。
温度测量成为广大电子领域中必须掌握的过程,并且对测量的精度和采集功能的
要求也越来越高,而温度的测量与显示系统甚为重要。在课程设计中对一路温度
采集系统与显示系统作了基本的研究。电压采集与通信控制采用了模块化的设计,
并用单片机8051来实现,硬件部分是以单片机为核心,还包括模-数转换模块,
显示模块,和串行接口部分,还有一些简单的外围电路。1路被测电压通过通用
ADC0808模-数转换,实现对采集到的电压进行模拟量到数字量的转换,由单片机
对数据进行处理,用数码管显示模块来显示所采集的结果,由相关控制器完成数
据接收和显示,汇编程序编写了更加明了化数据显示界面。本系统主要包括四大
模块:数据采集模块、控制模块、显示模块、A/D转换模块。绘制电路原理图与
工作流程图,并进行调试,最终设计完成了该系统的硬件电路。在软件编程上,
采用了汇编语言进行编程,开发环境使用相关集成开发环境。开发了显示模块程
序、A/D转换程序。
2 AT89C51与ADC0808简介及引脚功能
2.1 AT89C51单片机管脚介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器,是低电
压,高性能CMOS8位微处理器,俗称单片机。如图1
图1 管脚图
AT89C51管脚介绍:
VCC:供电电压。
GND:接地。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接
收输出4TTL门电流。 图2 AT89C51管脚
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,
输出4个TTL门电流,输出4个TTL门电流,当P2口被写“1”时,其管脚被内
部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将
输出电流。这是由于内部上拉的缘故。P2口在FLASH编程和校验时接收高八位地
址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL
门电流。P3口也可作为AT89C51的一些特殊功能口。
RST:复位输入。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收 8TTL门电流。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的
地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机
器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将
不出现。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.2 ADC0808管脚介绍
ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8
路模拟输入信号中的一个进行A/D转换。引脚图如图
2:
图2 ADC0808引脚图
DAC0808各引脚功能:
ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。各引脚功能
如下:
1~5和26~28(IN0~IN7):8路模拟量输入端。
8、14、15和17~21:8位数字量输出端。
6(START):A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)
使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端
输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。
11(VREF(+))和16(VREF(-)):参考电压输入端
12(Vcc):主电源输入端。 22(ALE):地址锁存允许信号,输入,高电平有效。
13(GND):地。
23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的
一路
3 系统设计
3.1 设计任务与要求
3.1.1 设计任务
基于AT89C51单片机设计温度检测报警,并且可以根据应用环境不同设定不
同的报警上下限。报警系统采用光报警和蜂鸣器报警。
3.1.2 设计要求:
(1)用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发
出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的
温度范围在0-99℃。并将实时的温度显示在数码管上。
(2)要求使用的元器件数目尽量少。
(3)设计硬件电路原理图,合理选择元器件;编写使用说明书,说明使用方法。
设计在实验板上实现该功能的程序并进行调试。
3.2设计思路
设计框图如图3
图3
3.3 设计方案
总体设计方案:
采用51系列单片机作为整机的控制单元,通过调节可调电阻将0-5V模拟
电压信号通过AD0808模数转换成数字量0--255,通过内部程序公式转换成温度
0--99然后通过数码管显示其温度值。根据设定的温度报警上下值可以进行光报警
和蜂鸣器报警
3.4主程序设计
主程序流程图如图4所示。
4 系统硬件设计
4.1电路原理图
主要包括主控模块,A/D转换模块,显示模块,报警模块如图
5
图5系统电路原理图
4.1.1主控器模块
本系统控制器芯片采用AT89C51单片机:
P0:与ADC0808 8位输出端口相连
P1:与数码管七段输入相连
P3.0接高温光报警,P3.1接低温光报警,P3.7接蜂鸣器
4.1.2 数码管显示模块
图6为液晶显示电路模块,图中为一个两位七段数码管,其接法为共阴极接法
图6数码管显示电路
4.1.3 A/D转换模块
采用ADC0808模数转换将0--5伏电压模拟量转换成数字量0--255。如图7
图7 ADC0808模数转换
4.1.4 报警模块
如图8
图8报警模块
5系统仿真与调试
5.1仿真软件简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是: (1)实现了单片机仿真和SPICE电路仿真相结合。
(2)(2)支持主流单片机系统的仿真。
(3)(3)提供软件调试功能。如Keil C51 uVision2、MPLAB等软件。
(4)具有强大的原理图绘制功能。
总之,该软件是一款集单片机和S
PICE分析于一身的仿真软件,功能极其强大。
5.2 protues仿真
(1) 用Keil 3 软件加载C语言源程序并生成hex文件。
(2) 双击AT89C51,在Program File
一栏中加入hex文件并将Clock
Frequency改为12MHz。
(3)点击运行按钮,开始仿真。
5.3仿真结果
5.3.1 正常情况
数码管显示的数字在0--99范围内,结果如图9
图9正常情况
5.3.2 低于温度下限
数码管显示温数字低于30,P3.1为低电平,故在这路上的LED灯亮,蜂鸣器发出声音,结果如图10。.
图10 低于下限
5.3.3 高于温度上限
数码管显示数字高于60,P3.0为低电平,故在这路上的LED灯亮,蜂鸣器发出声音,结果如图11。.
图11 高于上限
5.4系统调试
在调试过程中主要是对程序的修改,特别是延时子程序。开始延较短时,
数码管同时显示但不稳定的显示这些温度。如果延时较长则温度数字不会同时显示出来。通过修改程序,将延时调到适中,系统正常工作。
6 总结
回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,在接近一月的日子里,可以说得是苦多于甜,但是可以学到很多的的东西,不仅是学习上的,而且是关于做人做事方面的感悟。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。我在设计的过程中遇到了许多问题,同时也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对汇编语言掌握得不透彻。
此次课程设计由于刚开始对书本知识掌握不够,编程遇到了很多难题,不过在翁老师的指导下我明白了很多,也学到了很多,在此衷心感谢翁老师!
7附录
1 程序清单:
#include
#define uchar unsigned char
#define uint unsigned int
unsigned int temp;
unsigned char getdata;
unsigned char d;
UnsignedcharDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管的段选0~9显示
unsigned char DSY_IDX[]= {0xF7,0xFB,0xFD};//共阴数码管的低三位的位选
unsigned char Temperature[]={0,0}; //定义把采集到的温度数据个位十位百位放到该数组。该数组初值为0;
sbit ST= P2^5;//AD0809转换启动信号与地址所存允许引脚注意:在使用时ALE和STRT信号引脚连在一起
sbit OE= P2^7;//ADC0808输出允许信号
sbit EOC=P2^6;//ADC0808转换结束信号引脚
sbit CLK =P2^4;//ADC0808的时钟引脚
sbit H_LED=P3^0;//超过60度时的灯光指示
sbit L_LED=P3^1;//低于30度时的灯光指示
sbit SPK = P3^7;//超过60度和低于30度时的蜂鸣器报警
bit Flag0;
bit Flag1;
unsigned int cnta;
unsigned int cntb;
bit alarmflag;
void DelayMS(uint x)//N毫秒延时函数
{
uchar i;
while(x--)
for(i = 0;i
}
void Show_Temperature()//数码管显示函数
{
uchar i;
for(i=0;i
{
P1 = DSY_CODE[ Temperature[i] ];
P0显示
P2&=DSY_IDX[i];//相与是为了保证P2口的其它位的状态值保持不变,保持原来的值
DelayMS(5); //延时5毫秒给硬件反应时间
P2 |= 0x0F;//让数码管动态扫描显示
}
}
void Init() //定时器0和定时器1的初始化 定时器0给ADC0808提供时钟让其工作
{
IE = 0x8a;
TMOD = 18;
TH0 = 245;
TL0 = 0;
TH1 = (65536 -1000) /256; //给定时器1设置初值为1毫秒
TL1 = (65536 -1000) %256;
TR0 = 1; //开启定时器0给ADC0808提供时钟
}
void main()//主函数
{
Init();//定时器初始化
H_LED = L_LED = 1; //灯光提示灭
while(1)
{
//把采集回来的温度数字送入到
ST = 0;
ST = 1;
ST = 0;//寄存器SAR复位,及为ADC0809的起始信号
while(1)
{
if(EOC == 1)//ADC0808转换结束后改引脚为高低平
{
OE = 1;//输出允许信号为1时表示把ADC0808采集的数据输出 getdata=P0;//把采集到的数据送到P1口处理
OE = 0;//又打开ADC0808让继续开始转换
temp=getdata*25;//因为有AD采集回来的数为0~255;显示温度为0~99;及255/100=25.5及25个步进值代表1摄氏度及为一个等差数列公差为25
temp=temp/64; //temP就相当于温度 ,及等差数列中的N;而getdata就是等差数列的和
Temperature[1] = temp/10;//采集到数据的十位
Temperature[0] = temp%10;//采集到数据的个位
Show_Temperature();//送到显示函数显示
if(temp 60)//如果采集到的温度大于60度报警 { TR1 = 1; H_LED = 0; L_LED = 1; Flag0=0; Flag1=1;
} else //如果在30~60度之间则不报警 { TR1 = 0; H_LED = L_LED = 1; Flag0=0; Flag1=0; SPK=1; }
break;//跳出继续进行ADC0808的采集
}
}
}
}
void T0_INT() interrupt 1//定时器0的中断函数
{
CLK = ~CLK;
}
void T1_INT() interrupt 3//定时器1的中断函数
{
TH1 = (65536 -1000) /256; //给定时器1设置初值为1毫秒
TL1 = (65536 -1000) %256;
if(( Flag0==1) && ( Flag1==0))
{
cnta++;
if(cnta==800)
{
cnta=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else if(( Flag0==0) && ( Flag1==1))
{
cntb++;
if(cntb==200)
{
cntb=0;
alarmflag=~alarmflag;
}
if(alarmflag==1)
{
SPK=~SPK;
}
}
else
{
alarmflag=0;
cnta=0;
cntb=0;
}
}
8参考文献
《单片微型计算机原理、应用及接口技术》张迎新主编,国防工业出版社 《单片机原理与接口技术》余锡存 主编 西安电子科技大学出版社 《微型计算机技术及应用》戴梅萼 编著 清华大学出版社
《微型计算机原理及应用》李伯成 主编 西安电子科技大学出版社 《微机原理与应用》 张宗根 主编 陕西师范大学出版社