基于51单片机的温度控制系统的设计 下载本文

贵州大学课程设计

LCM的数据总线与单片机的P0口通过一个上拉电阻排相连,LCM的三条控制线RS、RW、EN分别与单片机的I/O口P2.0、P2.1、P2.2相连,第1、2引脚分别与地、电源相连,第3引脚使用一个10kΩ的可调电阻对显示屏的明亮进行调整。

3.6报警与指示模块

在本次设计中,采用LED发光二极管作为系统指示灯,采用蜂鸣器作为报警鸣笛。当温度高于上限警戒值时,点亮红色发光二极管,蜂鸣器发出响声;当温度低于下限警戒值时,点亮黄色发光二极管,蜂鸣器发出响声;温度在正常范围内时,

图9 报警与指示模块

点亮黄色发光二极管。整个报警与指示电路如图9所示,其中绿、红、黄色指示灯分别接单片机P2.0、P2.1、P2.2口,电平拉低时点亮LED,蜂鸣器电路接单片机的P2.7口,电平拉高时蜂鸣器响。

至此便完成了整个硬件电路的设计工作,整个系统的原理图见附录二,系统I/O分配表如下:

I/O口 P0.0~P0.7 P1.0~P1.3 P1.7 P2.0

功能说明 LCM数据口 键盘输入 DS18B20温度采集 LCM数据/命令控制 I/O口 P2.1 P2.2 P2.4~P2.6 P2.7 功能说明 LCM读/写控制 LCM使能 LED信号输出 报警信号输出 6

贵州大学课程设计

4.软件设计

单片机应用系统的设计中,软件设计占有重要的位置。在本次设计中,根据功能要求,可以把系统程序划分为5个模块,即主程序模块、显示模块、温度测量模块、键盘扫描模块、其它子程序模块,如图10所示。

主程序模块 温度测量模块键盘扫描模块显示模块其它子程序 图10 软件设计框图

4.1主程序设计

主程序的内容包括单片机初始化、相关部件初始化和一些其它子程序的调用等。主程序清单如下,程序流程图如图11所示。 /************主程序************/ void main(void) {

P1=0xff; //初始化P1口以便读入 P2|=0x70; P2&=0x7f;

Temp_set1=90; //上限报警温度初值90 Temp_set2=10; //下限报警温度初值10 Delay(500); //延时500ms启动 init_LCD(); //LCD初始化 init_18B20(); //DS18B20初始化 Display_str(0,0,str2); //开机界面 Display_str(0,1,str2); //开机界面 Delay(2000);

显示 图11 主程序流程图

7

初始化温度传感器 初始化显示模块 键盘扫描 读取温度 显示字形转换 开始 初始化单片机 贵州大学课程设计

}

Display_str(0,0,str0); Display_str(0,1,str1); while(1) { }

Key_scan(); //扫描键盘 Read_temp(); //读取温度 Change();

Display(); //显示

Alarm(); //指示灯与报警程序 Delay(1000);

4.2显示模块

显示程序主要完成的功能是模式、上下限警戒值和测量温度值的显示,模块中包含LCD初始化、显示单个字符子函数、显示一个字符串子函数。程序流程图如图12所示,LCD初始化程序如下,其它子函数程序详见附录一。 /************LCD初始化************/ void init_LCD(void) {

P0=0; Delay(15);

LCD_Command(0x38,0); Delay(5);

LCD_Command(0x38,0); Delay(5);

LCD_Command(0x38,0); Delay(5);

LCD_Command(0x38,1); //8位数据传送,2行显示,5*7字形 LCD_Command(0x08,1); //关闭显示

图12 显示程序流程图

写显示字符 结束显示 写显示命令 开始 定位显示位置 8

贵州大学课程设计

}

LCD_Command(0x01,1); //清屏

LCD_Command(0x06,1); //显示光标右移设置

LCD_Command(0x0c,1); //显示屏打开,光标不显示不闪烁

4.3温度测量模块

温度测量程序主要功能是读出数字温度传感器的温度值。要正确地读出温度值必须严格遵守单总线器件的命令序列,否则单总线器件不会响应主机。单总线器件的命令序列如图13所示。

温度测量模块程序流程图如图14所示,DS18B20初始化程序如下,其它子程序详见附录一。

/************DS18B20初始化************/ void init_18B20(void) { }

结束 图13 单总线命令序列

9

uchar x=0;

DQ=1; //DQ复位 Delay_us(4); //延时 DQ=0; //将DQ拉低 Delay_us(250); //精确延时大于480us DQ=1; //拉高总线 Delay_us(40); x=DQ; Delay_us(20); 开始 初始化 温度转换 发ROM指令 读取温度 发功能指令 返回 图14 温度测量程序流程图

DS18B20存在? Y 发跳过ROM指令 N 读DS18B20序列号 初始化DS18B20 开始 贵州大学课程设计

4.4键盘扫描模块

本次设计中使用了4个按键,除了1个复位键还有3个功能键,具体功能前面已介绍。键盘扫描程序如下,其它子程序详见附录一,相关流程图如图15所示。

/************键盘扫描************/ void Key_scan(void) {

uchar temp; P1=0xff; if(P1!=0xff) { Delay(20); //延时消抖 if(P1!=0xff) {

temp=P1; switch(temp) {

case 0xfe:Key_set();break;

//P1.0按下,功能选择

case 0xfd:Key_inc();break;

//P1.1按下,数字加一

case 0xfb:Key_dec();break;

//P1.2按下,数字减一 default:break;

} }

} }

10

开始 初始化DS18B20 有键按下? N Y 延时去抖动 有键按下? N Y 读取键值 执行键功能程序 返回 15 键盘扫描程序流程图