[摘要]迄今为止,温度还是人们日常生活谈论的一个热门话题。如何掌控温度为人们生产生活所用,如何利用温度创造人们生产生活所需,倒是一件令人深度思考的事。在化工冶金制造领域,温度是影响产品成功合成的决定性因素;在蔬菜和水果的种植及水产品的养殖方面,温度也是其中一个重要的因素。本设计从人们日趋关注的温室的温度控制方面的问题出发,设计出一种能检测外界环境温度值然后做出相应处理的温度控制系统。此系统以模块化的方式制作,让人一目了然各个模块的所具有的功能,但不论是哪一种模块都要受主模块——AT89C51单片机的控制。本系统的温度采集模块所使用的温度采集器件是DS18B20,显示模块用的是LCD1602这款液晶显示屏,整个模块设计都讲究低成本化、高效率化,以所学所用以最优的模块设计展现此次设计要求。
本论文着重介绍了AT89C51单片机的结构和特性,与此同时,还详细讲述DS18B20的内部结构及工作原理。LCD1602也是本文的重中之重,本文也对它做了具体的叙述讲解。此外,还对系统进行设计、编程和调试,绘制系统的电路原理图并通过仿真软件仿真出来以观察结果。
[关键词] AT89C51 单片机 DS18B20 LCD1602
#include
#include
#include
#include
#define C02_write 0xa0 /* c02写地址 */
#define C02_read 0xa1 /* c02读地址 */
#define uchar unsigned char
#define uint unsigned int
sbit MAX6675_CS = P1 ^ 2; /* MAX6675冷端温度补偿,将K型热电偶信号转为数字信号 */
sbit MAX6675_SCK = P1 ^ 1;
sbit MAX6675_SO = P1 ^ 0;
sbit normal = P2 ^ 3; /* LED灯表示温度正常,过高,过低 */
sbit upper = P2 ^ 4;
sbit lower = P2 ^ 5;
sbit direction = P2 ^ 6;
sbit stop = P2 ^ 7;
sbit SCL = P1 ^ 3; /* EEPROM,256byte */
sbit SDA = P1 ^ 4;
sbit beep = P1 ^ 7; /* 蜂鸣器 */
sbit hot = P1^6;
bit ack, flag = 0, flag1 = 0;
uint tz;
int sth = 0, stl = 0, t_zhi = 0;
uchar data temp1[] = { '+', '1', '5', '0', '0', 0 }, temp2[] = { '-', '1', '0', '0', '0', 0 };
uchar data temp[7];
char code keytab[] = { 0xEE, 0xDE, 0xBE, 0x7E, 0xED, 0xDD, 0xBD, 0x7D, 0xEB, 0xDB, 0xBB, 0x7B, 0xE7, 0xD7, 0xB7, 0x77 };
unsigned char code str1[] = { "STH STL" }; /* system temperature high,low */
unsigned char code str2[] = { "PARAMTER STEUP" };
unsigned char code str3[] = { " " };
unsigned int testD2;
unsigned char data disdata[5];