1.基于AT89C52单片机和DS18B02温度测量接口的温度控制调节完整电路;
2.采用4位共阳极数码管显示设定温度值与实际温度值(℃);
3.利用蜂鸣器实现达到预设温度的报警
2 总体方案设计 2.1 硬件方案
图1.1系统结构框图
图1.1为简易温度控制器的系统结构框图,由键盘,DS18B20温度采集接口,数码管,蜂鸣器,继电器连接加热设备组成。。 2.1.1.温度检测部分 采用美国DALLAS半导体公司的DS18B20智能型温度传感器,使用方便、接口简单,与CPU通信采用并口通信方式。 - 测量范围:-55℃~125℃(在-10℃~85℃范围内测量误差为±0.5℃;12位分辨率时,最多750ms完成温度值的数字转换,温度分辨率为0.0625)
结构:该器件有3个引脚:输入/输出引脚及电源和地;内部有三个主要器件:64位ROM、温度传感器和报警触发器。 - 电源连接:该器件可由外部5V电源VDD供电,也可以从单总线上取得电源。
图1.2 DS18B20内部结构 图1.3 DS18B20封装图 2.1.2.显示部分 显示模块电路采用4个共阳极八位数码管显示。位选口为单片机 P1.0~P1.3 I/O口,四个数码管共用一组段选口为单片机 P0~P7 I/O口。采用动态显示方法。电路如图1.4所示: 图1.4 数码管电路图
2.1.3.键盘部分 键盘部分采用单一按键形式,设置两个键:加1键、减1键用来调节温度显示。 图1.5 键盘电路图 2.1.4.温度控制部分 继电器 2.2 软件方案2.2.1.主程序 主要功能是完成DS18的初始化工作,并进行读温度,将温度转化为压缩BCD码并在显示器上显示传感器实际温度。
2.2.2.读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写,其程序框图如下图所示: 图2.1系统程序框图
3 硬件设计与实践
3.1 测量电路本系统由主控模块、信号显示模块、温度检测模块、报警模块、设定报警温度和自动调温6个模块。
3.2 硬件连接 图3.2硬件连接
3.2.1温度检测 模数转换器ADC0808引脚图 电压信号模拟温度信号,通过ADC0808的转换,将模拟信号变成数字信号传输给AT89C52单片机.单片机根据程序做出反应,控制各个引脚输出相应高低电平信号使外围模块做出相应的反应,从而达到当温度超出或低于温度上限时蜂鸣器报警,且指示灯点亮,继电器闭合。
4 软件设计与实践 4.1 主程序- void main(void)
- {
- unsigned char c=0;
- unsigned char c0=0;
- unsigned long ldata=2500; //作为显示的数据
- while(1)
- { //循环扫描按键及显示
- c0=c;
- c=ReadTemperature();
- c=(c/7);
- ldata=(ldata-c0+c);
- switch(ReadKey())
- { //读取键值做以下相应处理
- case 1:ldata=ldata+100; //1键显示内容加1
- break;
- case 2:ldata=ldata-100; //2键显示内容减1
- break;
- case 3:ldata=c; //3键显示内容清0
- break;
- }
- display(ldata); //显示相应的数值,这里用函数的形式调用显示
- delay(10);
- if(c>30)
- Warning();
- else if(c<(ldata/100))
- {
- JDQ=0;
- EJG=1;
- FMQ=1;
- }
- else
- {
- JDQ=1;
- EJG=1;
- FMQ=1;
- }
- }
- }
复制代码
4.2 子程序1.键盘部分 - unsigned char ReadKey(void)
- {
- unsigned char lkey=0;
- if((P3&0xe0)!=0xe0){ //检测所有按键是否有按键按下
- FMQ=0; //按键按下则蜂鸣器发声
- delay(10); //有按键按下则延时一段时间,以消除按键拌动
- if(oldkey!=(P3&0xe0)){//检测按键未松开而且不是之前按下的按健就进入读键值,否则不作处理
- oldkey=P3&0xe0; //保存当前状态,为下一次扫描做判断,请看上一行
- if(key1==0)
- lkey=1; //第一个键按下复值1
- else if(key2==0)
- lkey=2; //第二个键按下复值2
- else if(key3==0)
- lkey=3; //第三个键按下复值3
- }
- }
- else{
- oldkey=0xe0; //如果都没有按键按下,将复值初始状态
- FMQ=1; //无按键按下则退出蜂鸣
- }
- return lkey;
- }
- 2. 显示部分
- void display(unsigned int da)
- {
- P0=0XFF; //
- da=da%10000;
- switch(l_posit){
- case 0: //选择千位数码管,关闭其它位
- SMG_q=1;
- SMG_b=0;
- SMG_s=0;
- SMG_g=0;
- P0=table[da/1000]; //输出显示内容
- break;
- case 1: //选择百位数码管,关闭其它位
- SMG_q=0;
- SMG_b=1;
- SMG_s=0;
- SMG_g=0;
- P0=table[da%1000/100];
- break;
- case 2: //选择十位数码管,关闭其它位
- SMG_q=0;
- SMG_b=0;
- SMG_s=1;
- SMG_g=0;
- P0=table[da%100/10];
- break;
- case 3: //选择个位数码管,关闭其它位
- SMG_q=0;
- SMG_b=0;
- SMG_s=0;
- SMG_g=1;
- P0=table[da%10];
- break;
- }
- l_posit++; //每调用一次将轮流显示一位
- if(l_posit>3)
- l_posit=0; }
复制代码
5 调试及性能分析
5.1调试分析 本次设计温度控制器根据温度传感器测得的温度值,由软件查询判断是否达到编程设定的值,如果超过温度上限,即预置温度小于当前温度,蜂鸣器响报警,启动风扇以温度值返回到阈值以下;如果温度达到下线阈值,则同样使温度返回。 5.2性能分析1、对于设计采用89C52单片机作为温度控制的主CPU芯片,系统硬件设备结构简单合理,成本低,实时性好。 2、采用DS18B20作为温度测量接口,它是具有单总线接口的数字温度传感器。该器件具有接线简单,功耗低,体积小等特点。 3、针对采用数码管显示温度值,直观、稳定,易于实现。 4、温度控制器的功能还有待进一步扩充,如高温断电;电路布局、和抗干扰方面。 结 论本文给出了一种单片机实现简易温度控制系统,克服了传统方法的不足,可以达到低温加热,高温报警的效果。该温度控制系统具有测量温度准,调节温度快的优点。主要通过学习了DS18B02温度测量接口、89C52单片机、数码管显示等知识,查阅了相关资料,简易温度控制器的基本要求,低温上电,高温报警,对温度上下限进行合理地设置,实时显示温度。所设计的系统具有以下功能: 1、对于设计采用89C52单片机作为温度控制的主CPU芯片,系统硬件设备结构简单合理,成本低,实时性好。 2、采用DS18B20作为温度测量接口,它是具有单总线接口的数字温度传感器。该器件具有接线简单,功耗低,体积小等特点。 3、针对采用数码管显示温度值,直观、稳定,易于实现。 4、温度控制器的功能还有待进一步扩充,如高温断电;电路布局、和抗干扰方面。 还有很大的提升空间。
调试系统照片
附录3 程序全文 完整的Word格式文档51黑下载地址:
好莱坞的单片机课程设计报告.doc
(2.44 MB, 下载次数: 54)
|