单片机控制dht11液晶显示课程设计报告
单片机lcd课程设计
单片机lcd课程设计一、课程目标知识目标:1. 理解单片机的基本原理,掌握LCD显示技术的基本知识。
2. 学习并掌握单片机与LCD的接口方法,了解LCD显示原理及编程方法。
3. 了解LCD显示系统的设计流程,掌握相关电路设计与调试技巧。
技能目标:1. 能够运用所学知识,设计并实现基于单片机的LCD显示程序。
2. 培养学生的动手实践能力,提高学生分析问题和解决问题的能力。
3. 培养学生团队协作能力,学会与他人共同完成项目任务。
情感态度价值观目标:1. 培养学生对单片机及LCD显示技术的兴趣,激发学生的学习热情。
2. 培养学生勇于尝试、积极探究的学习态度,提高学生的自主学习能力。
3. 增强学生的科技意识,培养创新精神和实践能力,使学生在实际操作中体会科技带来的乐趣。
分析课程性质、学生特点和教学要求:本课程为单片机lcd课程设计,旨在让学生掌握单片机与LCD显示技术的基本原理、接口方法及编程技巧。
针对高中年级学生的特点,课程设计注重理论与实践相结合,强调学生的动手实践能力。
在教学过程中,教师需关注学生的个体差异,引导他们通过小组合作、讨论交流等方式,共同完成课程任务。
二、教学内容1. 单片机基本原理与结构:介绍单片机的组成、工作原理及其内部资源,重点讲解CPU、内存、I/O口等部分的作用。
教材章节:第一章 单片机概述2. LCD显示技术:讲解LCD显示原理、显示类型及其驱动方法,分析不同类型LCD的特点及应用场景。
教材章节:第二章 LCD显示技术3. 单片机与LCD接口技术:详细介绍单片机与LCD的接口电路设计、接口方法,包括并行接口和串行接口。
教材章节:第三章 单片机与LCD接口技术4. LCD显示程序设计:讲解如何编写单片机程序,实现LCD显示控制,包括初始化设置、显示字符、图形等。
教材章节:第四章 LCD显示程序设计5. 实践操作与项目实施:分组进行实践操作,完成单片机与LCD显示系统的设计与调试,培养学生动手实践能力。
实验报告-物联网通信技术-+GPIO外设及DHT11传感器通信显示
实验内容概要:物联网通信技术- GPIO外设及DHT11传感器通信显示1.实现温湿度传感器初始化, 显示温湿度,温度大于30 开风扇,否则关风扇。
2.. 模拟报警:当温度大于30度,蜂鸣器响和一颗红灯闪烁,低于30度蜂鸣器和红灯关当湿度大于50,风扇自动开,低于50风扇自动关3. lcd实现菜单控制led0-3并且显示温湿度实现制冷。
(1)菜单要求:(参考lcd菜单实现-消抖相关代码)menu1 *menu2menu3menu4(2)初始化led0,led1,led2,led3(3)UP按键,DOWN按键(4)温湿度数据显示到lcd(5)温度超过30就开启风扇,否则风扇停止实习内容总结(代码+运行截图):代码#include "stm32f10x.h"#include "LQ12864.h"#include "adc.h"#include "dth11.h"#include <stdio.h>#define UP 1#define DOWN 2#define NONE 0void main_delay(int ms){ int i = 0; int j = 0; while(ms--){ for(i = 0; i < 5; i++){ for(j = 0; j < 512; j++){ } } }}//定义函数:风扇初始化void fun_init(){//定义引脚配置结构体变量 GPIO_InitTypeDef init; //给出GPIO组的工作时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置引脚 init.GPIO_Pin = GPIO_Pin_8; //配置引脚的速度GPIO_Speed_50MHz init.GPIO_Speed = GPIO_Speed_50MHz; //配置引脚的模式GPIO_Mode_Out_PP init.GPIO_Mode = GPIO_Mode_Out_PP; //引脚配置初始化 GPIO_Init(GPIOA, &init); //配置引脚的数据 GPIO_SetBits(GPIOA, GPIO_Pin_8);}int main(void){ //定义变量,存储温湿度数据 char temp = 0;//存储温度 char hum = 0;//存储湿度 //定义显示数据的缓冲区数据:温度显示 char buf_temp[30]={0}; //分配的空间是30字节(char) //数组元素的大小是30个,分别是buf_temp[0]、buf_temp[1]、 //{0}静态初始化,给数组里存储数据 //定义显示数据的缓冲区数据:温度显示 char buf_hum[30]={0}; delay_init(); //调用函数:屏幕初始化 LCD_Init(); //调用函数:温湿度传感器的初始化 DHT11_Init(); //调用函数:风扇初始化 fun_init(); //轮询 while(1) { //循环获得传感器的数据DHT11_Read_Data(&temp,&hum);//参数1类型是u8 指针变量取temp变量地址 &temp //参数2类型是u8 指针变量取hum变量地址 &hum //sprintf,功能是字符串拼接到缓冲区存储 //sprintf,格式sprintf(存储数据的数组名字,数据格式,数据); // 数据->数据格式组织->存储数据的数组 //"temp:12" sprintf(buf_temp, "temp:%d ", temp); //参数1:存储数据的数组名字buf_temp //参数2:数据的格式字符串,%d格式占位符号,要填充整数数据 //参数3:整数数据 //过程,temp内容是12,拼接的字符串是"temp:12" //"hum:50" sprintf(buf_hum, "hum:%d ", hum); //显示数据到lcd 上 LCD_P8x16Str(8, 0, buf_temp); //参数1:x轴坐标,像素单位 //参数2:y轴坐标,行为单位 //参数3:现实的数据的数组名字 //显示数据到lcd上 LCD_P8x16Str(8, 2, buf_hum); //判断温度数据 if(temp > 30){ GPIO_ResetBits(GPIOA, GPIO_Pin_8); }else{ GPIO_SetBits(GPIOA, GPIO_Pin_8); } main_delay(300); }}效果截图:代码:#include "stm32f10x.h"#include "LQ12864.h"#include "adc.h"#include "dth11.h"#include <stdio.h>#define UP 1#define DOWN 2#define NONE 0void main_delay(int ms){ int i = 0; int j = 0; while(ms--){ for(i = 0; i < 5; i++){ for(j = 0; j < 512; j++){ } } }}//定义函数:风扇初始化void fun_init(){ //定义引脚配置结构体变量 GPIO_InitTypeDef init; //给出GPIO组的工作时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置引脚 init.GPIO_Pin = GPIO_Pin_8;//配置引脚的速度GPIO_Speed_50MHz init.GPIO_Speed = GPIO_Speed_50MHz; //配置引脚的模式GPIO_Mode_Out_PP init.GPIO_Mode = GPIO_Mode_Out_PP; //引脚配置初始化GPIO_Init(GPIOA, &init); //配置引脚的数据 GPIO_SetBits(GPIOA, GPIO_Pin_8);}//定义函数:蜂鸣器初始化void buzzer_Init(){ //定义引脚配置结构体变量 GPIO_InitTypeDef init; //给出GPIO组的工作时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置引脚init.GPIO_Pin = GPIO_Pin_2; //配置引脚的速度GPIO_Speed_50MHz init.GPIO_Speed = GPIO_Speed_50MHz; //配置引脚的模式GPIO_Mode_Out_PP init.GPIO_Mode = GPIO_Mode_Out_PP; //引脚配置初始化 GPIO_Init(GPIOA, &init); //配置引脚的数据 GPIO_SetBits(GPIOA, GPIO_Pin_2); }//LED初始化void led_Init(){ //定义引脚配置结构体变量 GPIO_InitTypeDef init; //给GPIO组的工作时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置引脚编号 init.GPIO_Pin = GPIO_Pin_15; //配置引脚的速度GPIO_Speed_50MHz init.GPIO_Speed = GPIO_Speed_50MHz; //配置引脚模式GPIO_Mode_Out_PP init.GPIO_Mode = GPIO_Mode_Out_PP; //引脚配置初始化GPIO_Init(GPIOA, &init); //配置引脚数据 GPIO_SetBits(GPIOA, GPIO_Pin_15);}int main(void){ //定义变量,存储温湿度数据 char temp = 0;//存储温度 char hum = 0;//存储湿度 //定义显示数据的缓冲区数据:温度显示 char buf_temp[30]={0}; //分配的空间是30字节(char) //数组元素的大小是30个,分别是buf_temp[0]、buf_temp[1]、 //{0}静态初始化,给数组里存储数据 //定义显示数据的缓冲区数据:温度显示 char buf_hum[30]={0}; delay_init(); //调用函数:屏幕初始化 LCD_Init(); //调用函数:温湿度传感器的初始化 DHT11_Init(); //调用函数:风扇初始化 fun_init(); //函数调用:蜂鸣器初始化 buzzer_Init(); //调用函数:LED初始化 led_Init(); //调用函数:按键初始化 //轮询 while(1) { //循环获得传感器的数据 DHT11_Read_Data(&temp,&hum); //参数1类型是u8 指针变量取temp变量地址 &temp //参数2类型是u8 指针变量取hum变量地址&hum //sprintf,功能是字符串拼接到缓冲区存储 //sprintf,格式sprintf(存储数据的数组名字,数据格式,数据);// 数据->数据格式组织->存储数据的数组//"temp:12" sprintf(buf_temp, "temp:%d ", temp); //参数1:存储数据的数组名字buf_temp //参数2:数据的格式字符串,%d格式占位符号,要填充整数数据 //参数3:整数数据 //过程,temp 内容是12,拼接的字符串是"temp:12" //"hum:50" sprintf(buf_hum, "hum:%d ", hum); //显示数据到lcd上 LCD_P6x8Str(10, 1, buf_temp); //参数1:x轴坐标,像素单位 //参数2:y 轴坐标,行为单位 //参数3:现实的数据的数组名字 //显示数据到lcd上 LCD_P6x8Str(10, 3, buf_hum); //判断温度数据if(temp > 30){ GPIO_ResetBits(GPIOA, GPIO_Pin_2); GPIO_ResetBits(GPIOA, GPIO_Pin_15); }else{ GPIO_SetBits(GPIOA, GPIO_Pin_2); GPIO_SetBits(GPIOA, GPIO_Pin_15); } if(hum > 77){ GPIO_ResetBits(GPIOA, GPIO_Pin_8); }else{ GPIO_SetBits(GPIOA, GPIO_Pin_8); } main_delay(500); }}效果截图:代码#include "stm32f10x.h"#include "LQ12864.h"#include <stdio.h>#define NONE 0#define UP 1#define DOWN 2void main_delay(int ms){ int i = 0; int j = 0; while(ms--){ for(i = 0; i < 5; i++){ for(j = 0; j < 512; j++){ } } }}void key_init(){ GPIO_InitTypeDef init; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); init.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_4; init.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &init);}int read_key(){if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 0){ main_delay(100); while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == 0){ } return UP; } if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) == 0){ main_delay(100); while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_4) == 0){ } return DOWN; } return NONE;}void LED_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct); //默认关闭所有灯 GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3); }void led_show(int flag){ //关闭所有灯 GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3); if(flag == 1){ GPIO_ResetBits(GPIOB, GPIO_Pin_0); } if(flag == 2){ GPIO_ResetBits(GPIOB, GPIO_Pin_1); } if(flag == 3){ GPIO_ResetBits(GPIOB, GPIO_Pin_2); } if(flag == 4){ GPIO_ResetBits(GPIOB, GPIO_Pin_3); }}void fanInit(){GPIO_InitTypeDef init; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//启动PB时钟init.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式init.GPIO_Pin = GPIO_Pin_4; init.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&init); //默认不转 GPIO_SetBits(GPIOB, GPIO_Pin_4);} int main(void){ char temp,hum; char buf_temp[30] = {0}; char buf_hum[30] = {0};int i = 0; int flag = 1; char *menu[4] = {"menu1", "menu2", "menu3", "menu4"}; int key = 0; delay_init(); LCD_Init(); DHT11_Init(); key_init(); //led初始化 LED_GPIO_Config(); //风扇初始化fanInit(); while(1) { for(i = 0; i < 4; i++){ LCD_P6x8Str(0, i + 1, menu[i]); } LCD_P6x8Str(32, flag, "*"); led_show(flag); key = read_key(); if(key == UP){ LCD_P6x8Str(32, flag, " "); flag = flag == 1 ? 4 : flag - 1; } if(key == DOWN){LCD_P6x8Str(32, flag, " "); flag = flag == 4 ? 1 : flag + 1; } DHT11_Read_Data(&temp, &hum); sprintf(buf_temp, "temp:%d", temp); sprintf(buf_hum, "hum:%d", hum); LCD_P6x8Str(0, 5, buf_temp); LCD_P6x8Str(0, 7, buf_hum); //temp > 30 if(temp >= 30){ //转风扇 GPIO_ResetBits(GPIOB, GPIO_Pin_4); }else{ GPIO_SetBits(GPIOB, GPIO_Pin_4); } main_delay(100); }}效果截图:技术问题总结:技术:DHT11 温湿度传感器传输方式问题解决方案:单总线传输方式只有一个DATA线一次传输数据 40bit(40位) 23.45 12.45 8bit(湿度整数部分)+8bit(湿度小数部分)+8bit(温度整数部分)+8bit(温度小数部分)+8bit(校验位) 单总线传输数据的时候容易丢失会使用校验位。
单片机控制DHT11传感器的课程设计报告
重庆三峡学院课程设计(论文)题目温湿度传感器报警器院系机械工程学院专业机械设计及其自动化年级2010级学生姓名吴春生学生学号201007024169指导教师吴光杰职称教授完成设计(论文)时间2013 年 1 月目录摘要................................................ 错误!未定义书签。
关键词 (1)1 引言.............................................. 错误!未定义书签。
第一章课程构思. (2)1.1主要内容........................................ 错误!未定义书签。
1.2系统的功能介绍.................................. 错误!未定义书签。
1.3系统总体方案设计 (2)1.3.1 DHT11产品概述 (3)1.3.2单片机AT89S52 (4)第二章系统的硬件设计和连接(独立完成部分) (8)2.1时钟电路 (8)2.2复位电路 (8)2.3显示模块 (9)2.4传感器模块 (10)第三章程序设计 (12)程序 (12)第四章 (20)总结 (20)参考文献 (21)致谢 (21)英文翻译 (22)摘要:温湿度是生活生产中的重要的参数。
本设计为基于单片机的温湿度检测与控制系统,采用模块化、层次化设计。
用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机AT89S51进行数据的分析和处理,为显示和报警电路提供信号,实现对温湿度的控制报警。
报警系统根据设定报警的上下限值实现报警功能,显示部分采用LCD1602液晶显示所测温湿度值。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。
关键词:单片机;DHT11温湿度传感器; LCD1602显示1.引言温湿度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用。
利用DHT11测温度湿度实验报告
微电子工艺实验题目气压温度测量系统学生姓名洪强学号学院电子与信息工程学院专业电子科学与技术指导教师曹鸿霞二O一五年十一月二十二日目录目录 ............................................................................................................. 错误!未定义书签。
1 系统描述................................................................................................ 错误!未定义书签。
1.1 课程设计题目 (3)1.2 系统设计方案介绍 (3)1.3 方案论证 (4)2 硬件电路设计 (4)2.1 LCD1602液晶显示模块 (5)2.1.1 LCD1602原理图及引脚说明 (5)2.1.2 LCD1602操作时序 (6)2.2 AT89C52单片机 (7)2.3 DHT11传感器模块 (8)2.3.1 DHT11原理图及引脚说明 (8)2.3.2 DHT11数据帧 (9)2.3.3 DHT11电气特性 (10)2.3.4 DHT11操作时序 (10)2.4 蜂鸣器模块 (12)2.5 DHT11温湿度检测设计图 (12)3 软件程序设计 (13)3.1 程序流程图 (13)3.2程序设计 (14)3.2.1主程序 (14)3.2.2 LCD显示程序 (15)3.2.3蜂鸣器程序 (22)4 实验结果 (23)5 实验总结 (24)参考文献 (22)测量气压温度测量系统洪强南京信息工程大学电子科学与技术,210044摘要本实验基于使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。
简单明了的实现的可提要求。
DHT11数字温湿度传感器把采集到的温湿度数据传给单片机。
STC15单片机DHT11在LCD1602上显示程序
敬告:没有51单片机基础的人请慎重下载高质量实用性51单片机STC15W系列程序(4),STC8A系列可参考STC15单片机DHT11在LCD1602上显示程序注:在本节关于DHT11的程序有两种/*****************************************/版本一:/****************************************//****************************************/main函数程序:#include "Library.h"unsigned char strbuf[4];//void ValToStr(unsigned char *str,unsigned char *source,unsigned char len);unsigned char tmrflag = 0;unsigned char DHTbuf[5];void Delay1000ms() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void main(){unsigned char DHTstr[8];P3M1 &= 0xBF; P3M0 &= 0xBF; P2M1 &= 0xE5; P2M0 &= 0xE5;P0M1 = 0x00; P0M0 = 0x00;LCD1602_init();LCD1602_wBytes(2,0,".",1);LCD1602_wBytes(8,0,"humi",4);LCD1602_wBytes(2,1,".",1);LCD1602_wBytes(8,1,"temp",4);while(1){DHT11_start(DHTbuf);// ValToStr(DHTstr,DHTbuf,sizeof(DHTbuf)-1);DHTstr[0] = DHTbuf[0]/10 + '0';DHTstr[1] = DHTbuf[0]%10 + '0';DHTstr[2] = DHTbuf[1]/10 + '0';DHTstr[3] = DHTbuf[1]%10 + '0';DHTstr[4] = DHTbuf[2]/10 + '0';DHTstr[5] = DHTbuf[2]%10 + '0';DHTstr[6] = DHTbuf[3]/10 + '0';DHTstr[7] = DHTbuf[3]%10 + '0';LCD1602_wBytes(0,0,DHTstr,2);LCD1602_wBytes(3,0,DHTstr+2,2);LCD1602_wBytes(0,1,DHTstr+4,2);LCD1602_wBytes(3,1,DHTstr+6,2);Delay1000ms();Delay1000ms();}}//void ValToStr(unsigned char *str,unsigned char *source,unsigned char len)//{// unsigned char i;// while(len>0)// {// str[i*2] = source[i]/10+'0';// str[1+i*2] = source[i]%10+'0';// i++;// len--;// }//}/*********************************************/DHT11程序:/******************************8bit humidity integer data + 8bit humidity decimal data 8bit temperature integer data + 8bit temperature decimal data8bit check sum,high bit ahead*******************************/#include "Library.h"unsigned char u8flag;unsigned char check_buf[5];unsigned char tmp;void delay_1s() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void Delay10us() //@11.0592MHz {unsigned char i;_nop_();i = 25;while (--i);}void Delay20ms() //@11.0592MHz {unsigned char i, j, k;_nop_();_nop_();i = 1;k = 35;do{do{while (--k);} while (--j);} while (--i);}unsigned char Rec_8bit(){unsigned char i;unsigned char ret_8bit;unsigned char tmp;for(i=0;i<8;i++){while(!DHT11port);Delay10us();Delay10us();Delay10us();tmp = 0;if(DHT11port){tmp=1;}u8flag = 2;while((DHT11port)&&u8flag++);if(u8flag==1)break;ret_8bit<<=1;ret_8bit |= tmp;}return ret_8bit;}void DHT11_start(unsigned char *rec_buf) {// delay_1s();DHT11port = 0;Delay20ms();DHT11port = 1;Delay10us();Delay10us();Delay10us();Delay10us();//DHT11port = 1;if(!DHT11port){u8flag=2;// while(!DHT11port);while((!DHT11port)&&u8flag++);// if(DHT11port)// {// while(DHT11port);u8flag=2;while((DHT11port)&&u8flag++);check_buf[0] = Rec_8bit();check_buf[1] = Rec_8bit();check_buf[2] = Rec_8bit();check_buf[3] = Rec_8bit();check_buf[4] = Rec_8bit();if(!DHT11port){while(!DHT11port);}DHT11port = 1;tmp = check_buf[0]+check_buf[1]+check_buf[2]+check_buf[3] ;if(tmp==check_buf[4]){rec_buf[0] = check_buf[0];rec_buf[1] = check_buf[1];rec_buf[2] = check_buf[2];rec_buf[3] = check_buf[3];}// }}else{rec_buf[0] = 0;rec_buf[1] = 0;rec_buf[2] = 0;rec_buf[3] = 0;}}/*********************************************/ LCD1602程序:#include "Library.h"void LCD1602_rsta(){unsigned char tmp;P0 = 0xFF;//this is a mustrs = 0;rw = 1;do{en = 1;//Delay1us();tmp = P0;//Delay1us();en = 0;}while(tmp&0x80);}void LCD1602_wdat(unsigned char dat) {LCD1602_rsta();rs=1;rw=0;P0 = dat;en = 1;//Delay1us();en = 0;}void LCD1602_wcmd(unsigned char cmd) {LCD1602_rsta();rs=0;rw=0;P0 = cmd;en = 1;//Delay1us();en = 0;}void Setcursor(unsigned char x,unsigned char y){if(y==0)x = x + 0x00;else if(y==1)x = x + 0x40;LCD1602_wcmd(x|0x80);}void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len){Setcursor(x,y);while(buf_len>0){LCD1602_wdat(*buf++);buf_len--;}}void OnCursor(){LCD1602_wcmd(0x0F);}void OffCursor()LCD1602_wcmd(0x0C);}void LCD1602_init(){// Delay15ms();// LCD1602_wcmd(0x38);// Delay5ms();LCD1602_wcmd(0x38);// LCD1602_wcmd(0x08);LCD1602_wcmd(0x06);LCD1602_wcmd(0x0C);LCD1602_wcmd(0x01);}/*****************************************/ Library.h#ifndef _Library_H#define _Library_H#include <STC15.h>#include <intrins.h>#define MAIN_Fosc 11059200Lsbit DHT11port = P3^6;void DHT11_start(unsigned char *rec_buf);sbit rs = P2^4;sbit rw = P2^3;sbit en = P2^1;void LCD1602_init();void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len);#endif/*****************************************/ 版本二(结构体):/****************************************/ /****************************************/ main程序:#include "Library.h"#include "string.h"void Delay1000ms() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void main(){unsigned char DHTstr[8];P3M1 &= 0xBF; P3M0 &= 0xBF;P2M1 &= 0xE5; P2M0 &= 0xE5;P0M1 = 0x00; P0M0 = 0x00;LCD1602_init();LCD1602_wBytes(2,0,".",1);LCD1602_wBytes(8,0,"humi",4);LCD1602_wBytes(2,1,".",1);LCD1602_wBytes(8,1,"temp",4);while(1){DHT11_start();// memset(DHTstr, 0, 8);DHTstr[0] = ht.humi_h +'0' ;DHTstr[1] = ht.humi_l+'0' ;DHTstr[2] = ht.humi_dh +'0' ;DHTstr[3] = ht.humi_dl +'0' ;DHTstr[4] = ht.temp_h +'0' ;DHTstr[5] = ht.temp_l +'0' ;DHTstr[7] = ht.temp_dh +'0' ;DHTstr[6] = ht.temp_dl +'0' ;LCD1602_wBytes(0,0,DHTstr,2);LCD1602_wBytes(3,0,DHTstr+2,2);LCD1602_wBytes(0,1,DHTstr+4,2);LCD1602_wBytes(3,1,DHTstr+6,2);Delay1000ms();Delay1000ms();}}/***********************************************/ DHT11程序:/******************************8bit humidity integer data + 8bit humidity decimal data 8bit temperature integer data + 8bit temperature decimal data8bit check sum,high bit ahead*******************************/#include "Library.h"unsigned char u8flag;unsigned char check_buf[5];unsigned char tmp;unsigned char rec_buf[4];htstruct ht;void delay_1s() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void Delay10us() //@11.0592MHz {unsigned char i;_nop_();i = 25;while (--i);}void Delay20ms() //@11.0592MHz {unsigned char i, j, k;_nop_();_nop_();i = 1;j = 216;k = 35;do{do{while (--k);} while (--j);} while (--i);}unsigned char Rec_8bit(){unsigned char i;unsigned char ret_8bit;unsigned char tmp;for(i=0;i<8;i++){while(!DHT11port);Delay10us();Delay10us();Delay10us();tmp = 0;if(DHT11port){tmp=1;}u8flag = 2;while((DHT11port)&&u8flag++);if(u8flag==1)break;ret_8bit<<=1;ret_8bit |= tmp;}return ret_8bit;}void DHT11_start(){// delay_1s();DHT11port = 0;Delay20ms();DHT11port = 1;Delay10us();Delay10us();Delay10us();Delay10us();//DHT11port = 1;if(!DHT11port){u8flag=2;while((!DHT11port)&&u8flag++);u8flag=2;while((DHT11port)&&u8flag++);check_buf[0] = Rec_8bit();check_buf[1] = Rec_8bit();check_buf[2] = Rec_8bit();check_buf[3] = Rec_8bit();check_buf[4] = Rec_8bit();if(!DHT11port){while(!DHT11port);}DHT11port = 1;tmp = check_buf[0]+check_buf[1]+check_buf[2]+check_buf[3] ;if(tmp==check_buf[4]){rec_buf[0] = check_buf[0];rec_buf[1] = check_buf[1];rec_buf[2] = check_buf[2];rec_buf[3] = check_buf[3];}ht.humi_h = rec_buf[0]/10 ;ht.humi_l = rec_buf[0]%10;ht.humi_dh = rec_buf[1]/10;ht.humi_dl = rec_buf[1]%10;ht.temp_h = rec_buf[2]/10;ht.temp_l = rec_buf[2]%10;ht.temp_dh = rec_buf[3]/10;ht.temp_dl = rec_buf[3]%10; }else{ht.humi_h = 0;ht.humi_l = 0;ht.humi_dh = 0;ht.humi_dl = 0;ht.temp_h = 0;ht.temp_l = 0;ht.temp_dh = 0;ht.temp_dl = 0;}}/************************************************/ LCD1602程序:#include "Library.h"void LCD1602_rsta(){unsigned char tmp;P0 = 0xFF;//this is a mustrs = 0;rw = 1;do{en = 1;//Delay1us();tmp = P0;//Delay1us();en = 0;}while(tmp&0x80);}void LCD1602_wdat(unsigned char dat){LCD1602_rsta();rs=1;rw=0;P0 = dat;en = 1;//Delay1us();en = 0;}void LCD1602_wcmd(unsigned char cmd){LCD1602_rsta();rs=0;rw=0;P0 = cmd;en = 1;//Delay1us();en = 0;}void Setcursor(unsigned char x,unsigned char y){if(y==0)x = x + 0x00;else if(y==1)x = x + 0x40;LCD1602_wcmd(x|0x80);}void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len){Setcursor(x,y);while(buf_len>0){LCD1602_wdat(*buf++); buf_len--;}}void OnCursor(){LCD1602_wcmd(0x0F);}void OffCursor(){LCD1602_wcmd(0x0C);}void LCD1602_init(){// Delay15ms();// LCD1602_wcmd(0x38);// Delay5ms();LCD1602_wcmd(0x38);// LCD1602_wcmd(0x08);LCD1602_wcmd(0x06);LCD1602_wcmd(0x0C);LCD1602_wcmd(0x01);}/******************************************/ Library.h#ifndef _Library_H#define _Library_H#include <STC15.h>#include <intrins.h>#define MAIN_Fosc 11059200Lsbit DHT11port = P3^6;typedef struct htstruct{unsigned char humi_h;unsigned char humi_l;unsigned char humi_dh;unsigned char humi_dl;unsigned char temp_h;unsigned char temp_l;unsigned char temp_dh;unsigned char temp_dl;}htstruct;extern htstruct ht;void DHT11_start();sbit rs = P2^4;sbit rw = P2^3;sbit en = P2^1;void LCD1602_init();void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len);#endif。
单片机控制DHT11传感器的课程设计报告
大连海事大学自动化课程设计基于单片机的温湿度检测控制系统2009 届自动化学号 **********学生姓名指导教师目录第1章总体设计概述 (1)1.1课题的背景和意义 (1)1.2系统实现的主要功能 (1)1.3系统的工作原理简介 (1)1.4总体设计简介 (2)1.4.1总体设计框图 (2)1.4.2 总体设计及工作进程 (2)第2章系统硬件设计 (3)2.1主控模块设计 (3)2.2DHT11传感器模块设计 (3)2.2.1 DHT11传感器简介 (3)2.2.2 DHT11传感器模块电路设计 (6)2.31602液晶显示模块设计 (6)2.3.1 1602液晶显示屏简介 (6)2.3.2 1602液晶显示模块 (7)2.4阈值设置模块 (8)2.5报警模块 (8)第3章系统软件设计 (9)3.11602液晶显示模块程序设计 (9)3.2传感器模块程序设计 (10)第4章系统分析与调试 (12)4.1程序下载软件说明 (12)4.2所遇问题及解决办法 (12)4.2.1硬件问题及解决方法 (12)4.2.2软件所遇问题及解决方法 (13)第5章结论与展望 (14)附录 (15)附录A硬件原理图 (15)附录B最终实物图及简介 (15)附录C程序清单 (16)第1章总体设计概述1.1 课题的背景和意义温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。
并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。
而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就非常有必要了。
8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实力也很多。
使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握,性价比高。
dht11电路设计
dht11电路设计一、介绍DHT11是一种数字温湿度传感器,可以测量环境中的温度和湿度。
设计一个DHT11电路是为了使其能够与其他电子设备进行通信,并将测量结果传输到其他系统中。
本文将详细介绍DHT11电路设计的相关内容,并提供一些有用的建议。
二、DHT11工作原理DHT11温湿度传感器采用单总线通信协议,通过将数据传输到微控制器来实现与其他设备的连接。
DHT11的主要工作原理如下:1.初始化信号:主机向DHT11发送一个初始化信号,以启动传感器。
2.DHT11响应:DHT11接收到初始化信号后,将发送一个响应信号给主机。
3.数据传输:DHT11将温度和湿度数据传输给主机,每个数据位由50个周期的高电平表示0和26~28个周期的高电平表示1。
4.结束信号:数据传输完成后,DHT11发送一个结束信号给主机。
三、DHT11电路设计要点在设计DHT11电路时,需要考虑以下几个要点:1. 供电DHT11需要供电才能正常工作,在设计电路时需要确保为DHT11提供稳定的电源。
通常使用3.3V或5V电压供电,可以通过稳压电路或电源模块来实现。
2. 电平转换DHT11的数据引脚输出的电平范围是3.3V或5V,与大部分微控制器的工作电平范围不匹配。
因此,需要使用电平转换电路来将DHT11的数据引脚电平转换为微控制器能够接受的电平。
3. 信号传输DHT11使用单总线通信协议,因此需要使用合适的引脚将DHT11连接到微控制器。
可以选择一个GPIO引脚作为数据引脚,并在代码中将其配置为输入和输出。
4. PCB布局在设计DHT11电路的PCB布局时,应将DHT11放置在距离其他电子元件足够远的位置,以避免干扰。
此外,还应注意将地线与电源线分开布线,以降低噪声。
四、DHT11电路设计示例下面是一个简单的DHT11电路设计示例:1.电源供应:使用5V电源模块为DHT11提供稳定的电源。
2.电平转换:使用TXB0108级联8位电平转换器,将DHT11的数据引脚电平转换为3.3V或5V,以适配微控制器的工作电平。
液晶显示(单片机课程设计)
#include "c8051F020.h"#include <intrins.h>/*液晶点阵显示试验-128*64,控制器KS0108试验准备:将拨码开关S1和S2置于ON位置.运行此程序,LCD将交替显示"换代创新后的51-高速SOC美国CYGNAL 8051F""新华龙电子-单片机推广应用急先锋!","汉字".*/#define LCD_DATA P2#define LCD_RS P30#define LCD_RW P31#define LCD_E P32#define LCD_CS1 P33#define LCD_CS2 P34#define LCD_RST P35void Delay1ms(unsigned char);/*-- 宽度x高度=128x64 --*/char code screen[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x70,0xF0,0xE1,0x43,0x03,0xC3,0xFA, 0xF8,0x18,0x88,0xE8,0xFC,0x3F,0x0F,0x09,0x08,0xE8,0xF8,0x78,0x08,0x00,0x00,0x00, 0xE0,0xFC,0x7F,0xCF,0xE1,0xF9,0x3F,0x0F,0x83,0xF1,0xFE,0xBF,0x87,0x81,0x81,0x81, 0xC1,0xF9,0xFF,0x1F,0x07,0x00,0x00,0xC0,0xC0,0xC6,0xFE,0xFE,0xFE,0xC6,0xE7,0xFF, 0xFF,0xCE,0xC6,0xE6,0xFC,0x7F,0x4F,0xC1,0xC1,0xC1,0x41,0x41,0x41,0x01,0x00,0x20, 0x60,0x70,0x38,0xFC,0xFE,0x3F,0x2F,0x61,0x60,0xF0,0xF8,0xFF,0x1F,0x0B,0x0C,0x0C, 0x86,0xC7,0xC3,0x03,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xF0,0xFC,0xBF,0xF7,0xF1,0x30,0x30,0x3B,0x3F,0x37,0x36,0x30,0x30,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x78,0x3C,0x0C,0x80,0xC0,0xE0,0x70, 0x38,0xDE,0xFF,0xFF,0x1F,0x03,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF, 0x7F,0x63,0x60,0x30,0x3F,0x1F,0xE6,0xFC,0xFF,0xCF,0xC1,0xC1,0xC1,0xC1,0xF1,0xFF,0x3F,0x07,0x00,0x00,0x80,0xC0,0xCC,0x7C,0x7C,0xEC,0xFC,0xFF,0x7F,0xFF,0xFC,0x8C, 0xEC,0xF8,0x3F,0x0F,0x83,0xF0,0xFC,0x3F,0x07,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x24,0x27,0x27,0x23,0xA0,0xF0,0xFC,0x3C,0x27,0x23,0x23,0x23,0x23,0x23,0x23, 0x23,0x23,0x01,0x00,0x00,0x00,0x80,0x80,0xC0,0xE0,0x70,0x38,0x1E,0x8F,0x87,0xF1,0xFE,0x7F,0x77,0x38,0x1C,0x0E,0x87,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x01,0x00,0x04,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x03,0x03,0x03,0x02,0x02,0x03,0x03,0x01,0x00,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x06,0x06,0x07,0x03,0x00,0x00,0x06,0x07,0x03,0x01,0x00,0x00,0x04,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x07,0x03,0x03,0x01,0x00,0x02,0x03,0x03,0x03,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x40,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80, 0x00,0x00,0x00,0xC0,0xC0,0xC0,0x40,0x00,0x00,0x00,0x80,0x80,0xC0,0x40,0x40,0xC0, 0xC0,0x80,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFC,0x3F,0x07,0x01,0x00,0x00,0x80,0x8C,0x8F,0x0F,0x07,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x3C,0x1E,0x0F,0x03,0x01,0x00,0xC0,0xF8,0xFE,0x3F,0x07,0x21,0x20,0xE0,0xE0,0xE7, 0x27,0x07,0x00,0xC0,0xF8,0xFF,0x3F,0xFF,0xFF,0xFF,0xC0,0xF8,0xFF,0x3F,0x07,0x00,0x00,0xC0,0xF0,0xF8,0xBE,0x8F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF, 0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x1F,0x10,0x10,0x18,0x1C,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x10,0x1E,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x1F,0x10,0x18,0x1C,0x1F,0x1F,0x0F,0x01,0x00,0x10,0x1E,0x1F,0x0F,0x01,0x00,0x03,0x1F,0x1F,0x1F,0x0F,0x01,0x10,0x18,0x1E,0x0F,0x07,0x01,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x00,0x00,0x10,0x1E,0x1F,0x1F,0x11,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*-- 宽度x高度=128x64 --*/char code screen1[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x5F,0x3F,0x7F,0x7F,0xFF,0x3F,0x7F,0x7F,0xBF,0x9F,0xBF,0xFF,0xFF,0xFF,0xFF,0x7F,0x9F,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xDF,0xBF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0x3F,0x9F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xDB,0x5A,0xD9,0x03,0x59,0xDA,0xFF,0x00,0xFB, 0xFB,0x03,0xF9,0xFB,0xFF,0x7B,0x7D,0x7E,0x40,0x7F,0x7B,0x1B,0x70,0x6D,0x6E,0x6E,0x6F,0x6F,0x63,0xFF,0xFD,0xFD,0xFD,0x7D,0x9D,0xE0,0xFD,0x7D,0x01,0xDD,0xED,0xF5, 0xFC,0x7D,0xFF,0xFF,0xFF,0x00,0xB6,0xB6,0xB6,0x00,0xB6,0xB6,0xB6,0xB6,0x80,0xFE,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0x01,0xF5,0xF6,0xF7,0xF7,0xF3,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xED,0xEE,0xED,0xEB,0xEC,0xEF,0xEA,0xED,0xEE,0xEF, 0xEF,0xE8,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE8,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEB,0xED,0xEE,0xEF,0xEF,0xEE,0xEE,0xEF,0xEC,0xEB,0xEB,0xEB, 0xEB,0xE8,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEC,0xEB,0xEB,0xEB,0xEB,0xEB,0xEB, 0xE8,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xED,0xEB,0xEC,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF, 0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xD6,0xD5,0xD7,0x07,0xD7,0xD5,0xD6,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x6F,0x6F,0x6F,0x6F,0x60,0x6F,0xEF,0xEF,0xE7,0xEF,0xFF,0xEF,0xEF,0x2F,0x00,0xAF,0x6F,0xFF,0x01,0xFD,0xFD,0x00,0xFD,0xFF,0xFF,0xFF,0xF7,0xF7,0x77,0x00,0xB7,0xDF,0x07,0xB0,0xB7,0x06,0xB1,0xB7,0xB7,0xB7,0xFF,0xFF,0xFF,0x03,0xFB,0xFB,0xFB, 0xFA,0xF9,0xFB,0xFB,0xFB,0xFB,0xF9,0xFB,0xFF,0xFF,0xFF,0x03,0xFB,0xBB,0x7B,0xEA, 0xD9,0x3B,0xFB,0xFB,0x7B,0x99,0xFB,0xFF,0xFF,0xFF,0x01,0xED,0xED,0xED,0xED,0x01, 0xED,0xED,0xED,0x00,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFB,0xFA,0xFA,0xFA,0xFA,0xC0,0xFA,0xFA,0xFA,0xFA,0xFB,0xFB,0xFF,0xFF,0xDF,0xEF,0xF7, 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFE,0xFF,0xC0,0xDF,0xEF,0xF7,0xF8,0xFF,0xFF,0xE0,0xDF,0xDF,0xC3,0xFF,0xFE,0xEE,0xDF,0xE0,0xFF,0xFF,0xC0,0xED,0xED,0xE0,0xED,0xED,0xED,0xED,0xFF,0xDF,0xE7,0xF8,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xE7,0xF8,0xEF,0xEF,0xEE,0xE9,0xEF,0xEE,0xE7,0xE9,0xEE,0xE7,0xEF,0xFF,0xDF,0xE7,0xF8,0xFE,0xFE,0xFE,0xFE,0xC0,0xFE,0xEE,0xDE,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xEF,0x57,0x5B,0x59,0x5B,0x5B,0x4B,0x53,0x5F,0x0F,0xDF,0xFF,0xFF,0xFF,0xBF,0xDF,0xE3,0xEF,0xEF,0xEF,0x01,0xEF,0xEF,0xE7,0xEF,0x7F,0xFF,0xFF,0xBF,0x8F,0x31,0xB7,0xB7,0x77,0x6F,0xB7,0xA9,0x5B,0xAB,0xB3,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xE5,0xFD,0xC5,0xBD,0xB9,0xA5,0xBD,0xBD,0x8D,0xFC,0xF7,0xCF,0xFF,0xBE,0xBE,0xDE ,0xEE,0xF6,0xF8,0xFE,0xFE,0xC0,0xBE,0xBE,0xBE,0xBE,0x8E,0xFF,0xFD,0xFD,0xC0,0xED, 0xF5,0xED,0xEA,0xEA,0xEA,0x80,0xEA,0xEA,0xEB,0xEF,0xFF,0xFF,0xFF,0xFF,0xCC,0xCF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCC,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCC,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};/*-- 宽度x高度=128x64 --*/char code screen2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0xFE,0x90,0xA0,0xD0,0x4E,0x48,0xE8,0x58,0x40,0xC0,0x00,0x00,0x80,0x40,0x20,0xF8,0x06,0x40,0x40,0x40,0xFE,0x20,0x20,0x24,0x38,0x20,0x00,0x40,0x20,0xD0,0x48,0x46,0x44,0xC8,0x10,0x00,0xF0,0x00,0x00,0xFE,0x00,0x00,0x40,0x48,0x58,0x6A,0xCC,0x68,0x58,0x00,0xFC,0x48,0x48,0xC4,0x66,0x44,0x00,0x00,0x00,0xF8,0x28,0x28,0x28,0x28,0x28,0x24,0x24,0x24,0xA6,0x24,0x00,0x00,0x00,0xF0,0x18,0x16,0x10,0xF0,0x40,0x20,0x98,0x16,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x22,0x41,0x3F,0x40,0x44,0x27,0x14,0x0C,0x07,0x1C,0x24,0x47,0x44,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x78,0x00,0x00,0x00,0x3F,0x40,0x44,0x44,0x43,0x70,0x00,0x07,0x20,0x40,0x3F,0x00,0x00,0x20,0x12,0x2A,0x42,0x3F,0x0A,0x52,0x20,0x1F,0x00,0x00,0x7F,0x00,0x00,0x00,0x40,0x30,0x0F,0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x7F,0x01,0x00,0x00,0x00,0x7F,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x23,0x40,0x20,0x1F,0x00,0x00,0x00,0x19,0x21,0x20,0x20,0x20,0x1F,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x82,0x82,0xBA,0xAA,0xAA,0xAB,0xAA, 0xAA,0xBA,0x82,0x82,0x02,0x00,0x20,0x21,0xE6,0x00,0x04,0x74,0x54,0x54,0xFF,0xD4, 0x54,0x74,0x06,0x04,0x00,0x00,0x70,0x88,0x88,0x08,0x08,0x38,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0xE0,0x10,0x08,0x08,0x08,0x08,0x38,0x00,0x80,0x84,0x94,0x94,0x95,0x96,0xFC,0x94,0x96,0x95,0x94,0xC4,0x80,0x00,0x00,0x00,0xFE,0x02,0x0A,0x4A,0x4A,0xFA,0x4A,0xCA,0x4A,0x0A,0x02,0xFF,0x02,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x0E,0x0A,0x0A,0x0A,0x0E,0x00,0x20,0x3F,0x00,0x00,0x10,0x08,0x07,0x08,0x10,0x24,0x22,0x21,0x2F,0x20,0x21,0x22,0x24,0x20,0x00,0x00,0x1C,0x10,0x10,0x11,0x11,0x0E,0x00,0x07,0x08,0x10,0x10,0x10,0x08,0x07,0x00,0x07,0x08,0x10,0x10,0x10,0x08,0x04,0x00,0x20,0x22,0x12,0x12,0x0A,0x06,0x03,0x06,0x0A,0x12,0x12,0x22,0x20,0x00,0x00,0x00,0x3F,0x10,0x14,0x14,0x14,0x17,0x14,0x14,0x15,0x14,0x14,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x1C,0x00,0x20,0x60,0xA0,0x00,0x00,0xA0,0x60,0x20,0x00,0xC0,0x20,0x20,0x20,0xE0,0x20,0x00,0x20,0xE0,0x40,0x20,0x20,0x20,0xC0,0x00,0x00,0x40,0x20,0xA0,0xA0,0xC0,0x00,0x00,0x00,0x04,0x04,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xC4,0x44,0x44,0xC4,0x38,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,0x00,0x7C,0x44,0x24,0x24,0x24,0xC4,0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x04,0xFC,0x44,0x44,0xF4,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x04,0x02,0x00,0x20,0x20,0x23,0x1C,0x06,0x01,0x00,0x00,0x00,0x1A,0x25,0x25,0x25,0x24,0x18,0x00,0x08,0x0F,0x08,0x00,0x00,0x08,0x0F,0x08,0x00,0x06,0x09,0x08,0x08,0x0F,0x08,0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x03,0x04,0x08,0x08,0x04,0x03,0x00,0x00,0x06,0x08,0x08,0x08,0x08,0x07,0x00,0x00,0x08,0x08,0x0F,0x08,0x08,0x00,0x00,0x08,0x0F,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };#define SELECTCS 0void LCD_WaitReady1(void) //判断LCD控制芯片KS0108是否忙{LCD_DATA=0xff;_nop_();LCD_CS2=SELECTCS;LCD_RW=1;LCD_RS=0;LCD_E=1;while (LCD_DA TA&0x80);LCD_CS2=!SELECTCS;}void LCD_WaitReady2(void) //判断LCD控制芯片KS0108是否忙{LCD_DATA=0xff;_nop_();LCD_CS1=SELECTCS;LCD_RW=1;LCD_RS=0;LCD_E=1;while (LCD_DA TA&0x80);LCD_CS1=!SELECTCS;}void LCD_WriteCommand1(char ch) //向LCD控制芯片KS0108发送控制命令{LCD_WaitReady1();LCD_CS2=SELECTCS;LCD_RW=0;LCD_RS=0;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS2=!SELECTCS;}void LCD_WriteCommand2(char ch) //向LCD控制芯片KS0108发送控制命令{LCD_WaitReady2();LCD_CS1=SELECTCS;LCD_RW=0;LCD_RS=0;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS1=!SELECTCS;}void LCD_WriteData1(char ch) //向LCD控制芯片KS0108发送数据命令{LCD_WaitReady1();LCD_CS2=SELECTCS;LCD_RW=0;LCD_RS=1;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS2=!SELECTCS;}void LCD_WriteData2(char ch) //向LCD控制芯片KS0108发送数据命令{LCD_WaitReady2();LCD_CS1=SELECTCS;LCD_RW=0;LCD_RS=1;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS1=!SELECTCS;}/*-- 文字: 汉--*/char code Han[]={0x00,0x10,0x61,0x06,0xC0,0x30,0x02,0x3E,0xC2,0x02,0x82,0x62,0x1F,0x02,0x00,0x00, 0x00,0x02,0x02,0x3F,0x20,0x20,0x10,0x08,0x05,0x02,0x05,0x08,0x10,0x30,0x10,0x00, };/*-- 文字: 字--*/char code Zi[]={0x00,0x00,0x10,0x0C,0x14,0x14,0x14,0x15,0xD6,0x54,0x34,0x14,0x14,0x8C,0x00,0x00, 0x00,0x01,0x01,0x01,0x01,0x01,0x11,0x21,0x1F,0x01,0x01,0x01,0x01,0x01,0x01,0x00, };void LCD_WriteHZ(char x,char y,char *Dot) //显示16*16点阵汉字{char i;for (i=0;i<32;i++){if ((x+i%16)<64){LCD_WriteCommand1(0xB8+y+i/16);LCD_WriteCommand1(0x40+x+i%16);LCD_WriteData1(Dot[i]);}else{LCD_WriteCommand2(0xB8+y+i/16);LCD_WriteCommand2(0x40+x-64+i%16);LCD_WriteData2(Dot[i]);}}}void InitLCD(void) //初始化LCD{char i,j;LCD_RST=0;Delay1ms(1);LCD_RST=1;LCD_WriteCommand1(0xc0);LCD_WriteCommand2(0xc0);LCD_WriteCommand1(0x3f); //开显示LCD_WriteCommand2(0x3f);for (j=0;j<8;j++) //清屏{LCD_WriteCommand1(0xB8+j); //清左半屏LCD_WriteCommand1(0x40);for (i=0;i<64;i++)LCD_WriteData1(0x00);LCD_WriteCommand2(0xB8+j); //清右半屏LCD_WriteCommand2(0x40);for (i=0;i<64;i++)LCD_WriteData2(0x00);}}void DispBmp(char *buf) //显示一幅位图{int i,j;for (j=0;j<8;j++) //显示位图{LCD_WriteCommand1(0xB8+j);LCD_WriteCommand1(0x40);for (i=0;i<64;i++)LCD_WriteData1(buf[(j*2)*64+i]);LCD_WriteCommand2(0xB8+j);LCD_WriteCommand2(0x40);for (i=0;i<64;i++)LCD_WriteData2(buf[(j*2+1)*64+i]);}}void Delay1s(unsigned char T);void TestLCD(void){char i;InitLCD();DispBmp(screen);for (i=0;i<64;i++){Delay1ms(50);LCD_WriteCommand1(0xc0+i%64); //设置起始行,实现向上滚动LCD_WriteCommand2(0xc0+i%64);}Delay1s(3);for (;;){DispBmp(screen1);Delay1s(5);DispBmp(screen2);Delay1s(6);InitLCD();LCD_WriteHZ(2,1,Han); //显示16*16点阵汉字'汉'Delay1ms(100);LCD_WriteHZ(60,3,Zi); //显示16*16点阵汉字'字'Delay1s(5);}}。
课设论文——DHT11温湿度模块的开发及应用
课程设计(论文)说明书题目:DHT11温湿度模块的开发及应用院(系):信息与通信学院专业:电子信息工程学生姓名:学号:指导教师:职称:副教授2013年 5 月12 日摘要本课设采用8051系列单片机以及DHT11温湿度传感器相结合的方式来测量周围环境温度,其特点具有采集温度、湿度的时间快,所采集到的温湿度数值精度相对传统温湿度计要高,且易于读数,抗干扰能力强等特点。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
8051单片机是常用于控制的芯片,使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习掌握。
使用8051型单片机设计温湿度控制系统,可以即时快速精确的反应温室内的温度的变化。
完成诸如升温到特定的温度时进行报警,引起注意。
关键词: 8051 DHT11AbstractThis Curriculum Design set with 8051 series single chip microcomputer and a combination of DHT11 temperature and humidity sensor to measure ambient temperature, its characteristic has quickly to collection temperature, humidity.collected by the temperature and humidity values relative to the traditional temperature and humidity meter high accuracy, easy reading, strong anti-jamming capability, etc.DHT11 digital temperature and humidity sensor is a contains a composite of the temperature and humidity sensor has been calibrated digital signal output. It dedicated digital module acquisition technology and the temperature and humidity sensor technology, ensure that the product has a high reliability and excellent long-term stability. Sensor consists of a resistance type moisture element and a NTC temperature measuring element, and connected to a high-performance 8-bit microcontroller.8051 microcontroller is often used to control chip, using 8051 single chip microcomputer to achieve temperature and humidity automatic control of the distance, and 8051 single-chip computer is easy to learn.Using 8051 single-chip microcomputer temperature and humidity control system, can quickly and accurately response immediately change of temperature in the greenhouse. Finish such as heating up to a specific temperature for alarm, attract attention.Keywords: 8051 DHT11目录前言 (5)第一章系统总体设计 (5)1.1系统实现的主要功能 (5)1.2系统工作原理 (5)1.3总体构成 (6)1.3.1总体设计框图 (6)第二章系统的硬件设计 (7)2.1主控模块设计 (7)2.1.1 主控模块原理图 (7)2.2 DHT11传感器模块设计 (7)2.2.1DHT11传感器简介 (7)2.3数码管显示模块设计 (11)2.3.1数码管简介 (11)2.3.2数码管模块 (11)2.4蜂鸣器报警模块 (12)第三章系统的软件设计 (13)3.1总体程序框架流程图 (13)第四章调试过程和注意问题 (14)4.1程序下载软件说明 (14)4.2设计中遇到的问题及解决 (15)结论 (16)谢辞 (17)参考文献 (18)附录 (19)前言本次课程设计主要针对软件的开发以及软件与硬件相结合的形式来提高自我的动手操作能力以及对程序理解与操作能力。
单片机-液晶显示课程设计
河南理工大学《微机原理与单片机课程设计》报告题目:基于单片机LCD液晶动态显示姓名:***学号:**********专业班级:电气12**指导老师:张宏伟所在学院:电气工程与自动化学院201*年4月14日摘要如今,科技进步给我们的生活带来了很大的变化。
液晶显示设备越来越多,各种各样的液晶显示产品走进我们生活中。
液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。
液晶显示控制器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。
本设计主要是以AT89C51单片机为控制设备,AMPIRE128*64液晶显示器为显示设备,实现的一个可以显示静态汉字、动态字符、图片的液晶显示设计。
引入密码锁功能,通过键盘和密码锁的配合,实现控制显示内容与显示效果。
通过设置字模提取软件的相关参数值,再根据AMPIRE128*64LCD的指令表及程序设计等提取所要用的汉字、字符、图片程序送往液晶显示器显示,并可做一些灵活的动态显示变换,提升显示效果。
并能通过设置密码和键盘控制显示内容和提示语。
其中,时钟电路和复位电路是单片机中最为基础的两个电路。
当键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。
本设计在Keil软件下,采用的是C语言进行软件设计,C语言使用助记符、符号、和数字等来表示指令的程序语言,具有容易理解和记忆且通用性强,设计方便等优点。
此次设计利用Proteus软件进行仿真验证了实验的正确性。
本次课程设计较好的实现在液晶显示器AMPIRE128*64 LCD 显示器上显示汉字、图片等,并且实现密码和键盘控制,具有现实使用价值。
AVR单片机dht11PPT课件
else dht11_data[2] <<=1;//判断位值 u8flag=2; while(DHT11_DATA_READ&&u8flag++); if(u8flag==1)break;//等待高电平结束 }
-
15
课题设计
数据采集模块
//******************************************************** ***********
unsigned char dht11_start(void)//dht11开始标志 { unsigned char count=0; DHT11_DATA_OUT; DHT11_DATA_CLI;//将数据线拉低18ms以上 delay_ms(25);//延迟18ms以上即可 DHT11_DATA_IN; DHT11_DATA_SET;//释放数据线 while(DHT11_DATA_READ) {
//*************************************************
**************-****
13
课题设计
函系 数统 模初 块始
化
//******************************************************************* void init_devices(void) {
-
10
课题设计
DHT11传感器整个读写位机发来的握手响应信号,读‘0’,和读‘1’四
单片机课程设计液晶显示
湖南工学院《单片机技术》课程设计说明书课题名称:液晶显示万年历、时间、星期及温度系部:电气与信息工程系专业:电子信息工程班级:0602设计人:陈凯学号:401060347指导老师:戴日光目录第1章系统电路设计1.1 系统总体设计思路-------------------------------------------------------------------1 1.2 设计方案选择-------------------------------------------------------------------------1 1.3 功能介绍-------------------------------------------------------------------------------1 1.4 工作原理-------------------------------------------------------------------------------2第2章单元电路设计2.1 单片机电路设计----------------------------------------------------------------------3 2.2 时钟电路设计-------------------------------------------------------------------------5 2.3 复位电路设计-------------------------------------------------------------------------6 2.4 温度传感器电路设计----------------------------------------------------------------7 2.5 矩阵式键盘设计----------------------------------------------------------------------8 2.6 显示电路设计-------------------------------------------------------------------------8第3章程序流程图3.1 中断时钟流程图---------------------------------------------------------------------11 3.2 温度子程序流程图------------------------------------------------------------------11 3.3 万年历流程图------------------------------------------------------------------------12第4章操作与调试4.1 KEIL uVision3简介-------------------------------------------------------------------144.1.1 8051开发工具--------------------------------------------------------------------144.1.2 uVision3集成开发环境---------------------------------------------------------144.2 Proteus简介--------------------------------------------------------------------------154.2.1进入Proteus ISIS--------------------------------------------------------------154.2.2工作界面---------------------------------------------------------------------------154.3 软件调试--------------------------------------------------------------------------------16结束语-------------------------------------------------------------------------------------------18附录1 仿真电路图---------------------------------------------------------------------------19附录2 元器件清单---------------------------------------------------------------------------20 附录3 程序清单------------------------------------------------------------------------------21 参考文献----------------------------------------------------------------------------------------40第1章系统电路设计1.1系统总体设计思路此设计即液晶上显示年、月、日、时、分、秒及星期原理框图如图(1.1),电路一般包括以下几个部分:键盘、单片机、温度传感器及显示电路。
单片机课程设计任务书(LCD)
《单片机及控制系统》课程设计报告(供参考)题目:院(系):专业班级:学生姓名:学号:指导教师:20 年月日至20 年月日华中科技大学武昌分校制单片机及控制系统课程设计任务书目录摘要(仅对论文类)………………………………………………………………………页码1. ××××××××………………………………………………………………………页码1.1××××××××………………………………………………………………………页码1.2××××××××………………………………………………………………………页码2. ××××××××………………………………………………………………………页码………………………………………3. ××××××××………………………………………………………………………页码………………………………………………………………………………(要求:目录题头用三号黑体字居中书写,隔行书写目录内容。
目录中各级题序及题标用小四号黑体字)摘要(仅对论文类)(要求:摘要题头用三号黑体字居中书写;题头隔行小四号宋体字书写摘要正文内容,1.25倍行距,300字左右;摘要后换行小四号宋体字书写关键词,关键词之间空格隔开)设计说明书(调查报告/论文)正文(要求:一级标题,黑体,三号,居中;二级标题,黑体,小三号;三级标题,黑体,四号;正文,宋体,小四号,1.25倍行距)课程设计成绩评定表。
STC15单片机DHT11在LCD1602上显示程序
敬告:没有51单片机基础的人请慎重下载高质量实用性51单片机STC15W系列程序(4),STC8A系列可参考STC15单片机DHT11在LCD1602上显示程序注:在本节关于DHT11的程序有两种/*****************************************/版本一:/****************************************//****************************************/main函数程序:#include "Library.h"unsigned char strbuf[4];//void ValToStr(unsigned char *str,unsigned char *source,unsigned char len);unsigned char tmrflag = 0;unsigned char DHTbuf[5];void Delay1000ms() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void main(){unsigned char DHTstr[8];P3M1 &= 0xBF; P3M0 &= 0xBF; P2M1 &= 0xE5; P2M0 &= 0xE5;P0M1 = 0x00; P0M0 = 0x00;LCD1602_init();LCD1602_wBytes(2,0,".",1);LCD1602_wBytes(8,0,"humi",4);LCD1602_wBytes(2,1,".",1);LCD1602_wBytes(8,1,"temp",4);while(1){DHT11_start(DHTbuf);// ValToStr(DHTstr,DHTbuf,sizeof(DHTbuf)-1);DHTstr[0] = DHTbuf[0]/10 + '0';DHTstr[1] = DHTbuf[0]%10 + '0';DHTstr[2] = DHTbuf[1]/10 + '0';DHTstr[3] = DHTbuf[1]%10 + '0';DHTstr[4] = DHTbuf[2]/10 + '0';DHTstr[5] = DHTbuf[2]%10 + '0';DHTstr[6] = DHTbuf[3]/10 + '0';DHTstr[7] = DHTbuf[3]%10 + '0';LCD1602_wBytes(0,0,DHTstr,2);LCD1602_wBytes(3,0,DHTstr+2,2);LCD1602_wBytes(0,1,DHTstr+4,2);LCD1602_wBytes(3,1,DHTstr+6,2);Delay1000ms();Delay1000ms();}}//void ValToStr(unsigned char *str,unsigned char *source,unsigned char len)//{// unsigned char i;// while(len>0)// {// str[i*2] = source[i]/10+'0';// str[1+i*2] = source[i]%10+'0';// i++;// len--;// }//}/*********************************************/DHT11程序:/******************************8bit humidity integer data + 8bit humidity decimal data 8bit temperature integer data + 8bit temperature decimal data8bit check sum,high bit ahead*******************************/#include "Library.h"unsigned char u8flag;unsigned char check_buf[5];unsigned char tmp;void delay_1s() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void Delay10us() //@11.0592MHz {unsigned char i;_nop_();i = 25;while (--i);}void Delay20ms() //@11.0592MHz {unsigned char i, j, k;_nop_();_nop_();i = 1;k = 35;do{do{while (--k);} while (--j);} while (--i);}unsigned char Rec_8bit(){unsigned char i;unsigned char ret_8bit;unsigned char tmp;for(i=0;i<8;i++){while(!DHT11port);Delay10us();Delay10us();Delay10us();tmp = 0;if(DHT11port){tmp=1;}u8flag = 2;while((DHT11port)&&u8flag++);if(u8flag==1)break;ret_8bit<<=1;ret_8bit |= tmp;}return ret_8bit;}void DHT11_start(unsigned char *rec_buf) {// delay_1s();DHT11port = 0;Delay20ms();DHT11port = 1;Delay10us();Delay10us();Delay10us();Delay10us();//DHT11port = 1;if(!DHT11port){u8flag=2;// while(!DHT11port);while((!DHT11port)&&u8flag++);// if(DHT11port)// {// while(DHT11port);u8flag=2;while((DHT11port)&&u8flag++);check_buf[0] = Rec_8bit();check_buf[1] = Rec_8bit();check_buf[2] = Rec_8bit();check_buf[3] = Rec_8bit();check_buf[4] = Rec_8bit();if(!DHT11port){while(!DHT11port);}DHT11port = 1;tmp = check_buf[0]+check_buf[1]+check_buf[2]+check_buf[3] ;if(tmp==check_buf[4]){rec_buf[0] = check_buf[0];rec_buf[1] = check_buf[1];rec_buf[2] = check_buf[2];rec_buf[3] = check_buf[3];}// }}else{rec_buf[0] = 0;rec_buf[1] = 0;rec_buf[2] = 0;rec_buf[3] = 0;}}/*********************************************/ LCD1602程序:#include "Library.h"void LCD1602_rsta(){unsigned char tmp;P0 = 0xFF;//this is a mustrs = 0;rw = 1;do{en = 1;//Delay1us();tmp = P0;//Delay1us();en = 0;}while(tmp&0x80);}void LCD1602_wdat(unsigned char dat) {LCD1602_rsta();rs=1;rw=0;P0 = dat;en = 1;//Delay1us();en = 0;}void LCD1602_wcmd(unsigned char cmd) {LCD1602_rsta();rs=0;rw=0;P0 = cmd;en = 1;//Delay1us();en = 0;}void Setcursor(unsigned char x,unsigned char y){if(y==0)x = x + 0x00;else if(y==1)x = x + 0x40;LCD1602_wcmd(x|0x80);}void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len){Setcursor(x,y);while(buf_len>0){LCD1602_wdat(*buf++);buf_len--;}}void OnCursor(){LCD1602_wcmd(0x0F);}void OffCursor()LCD1602_wcmd(0x0C);}void LCD1602_init(){// Delay15ms();// LCD1602_wcmd(0x38);// Delay5ms();LCD1602_wcmd(0x38);// LCD1602_wcmd(0x08);LCD1602_wcmd(0x06);LCD1602_wcmd(0x0C);LCD1602_wcmd(0x01);}/*****************************************/ Library.h#ifndef _Library_H#define _Library_H#include <STC15.h>#include <intrins.h>#define MAIN_Fosc 11059200Lsbit DHT11port = P3^6;void DHT11_start(unsigned char *rec_buf);sbit rs = P2^4;sbit rw = P2^3;sbit en = P2^1;void LCD1602_init();void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len);#endif/*****************************************/ 版本二(结构体):/****************************************/ /****************************************/ main程序:#include "Library.h"#include "string.h"void Delay1000ms() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void main(){unsigned char DHTstr[8];P3M1 &= 0xBF; P3M0 &= 0xBF;P2M1 &= 0xE5; P2M0 &= 0xE5;P0M1 = 0x00; P0M0 = 0x00;LCD1602_init();LCD1602_wBytes(2,0,".",1);LCD1602_wBytes(8,0,"humi",4);LCD1602_wBytes(2,1,".",1);LCD1602_wBytes(8,1,"temp",4);while(1){DHT11_start();// memset(DHTstr, 0, 8);DHTstr[0] = ht.humi_h +'0' ;DHTstr[1] = ht.humi_l+'0' ;DHTstr[2] = ht.humi_dh +'0' ;DHTstr[3] = ht.humi_dl +'0' ;DHTstr[4] = ht.temp_h +'0' ;DHTstr[5] = ht.temp_l +'0' ;DHTstr[7] = ht.temp_dh +'0' ;DHTstr[6] = ht.temp_dl +'0' ;LCD1602_wBytes(0,0,DHTstr,2);LCD1602_wBytes(3,0,DHTstr+2,2);LCD1602_wBytes(0,1,DHTstr+4,2);LCD1602_wBytes(3,1,DHTstr+6,2);Delay1000ms();Delay1000ms();}}/***********************************************/ DHT11程序:/******************************8bit humidity integer data + 8bit humidity decimal data 8bit temperature integer data + 8bit temperature decimal data8bit check sum,high bit ahead*******************************/#include "Library.h"unsigned char u8flag;unsigned char check_buf[5];unsigned char tmp;unsigned char rec_buf[4];htstruct ht;void delay_1s() //@11.0592MHz{unsigned char i, j, k;_nop_();_nop_();i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);}void Delay10us() //@11.0592MHz {unsigned char i;_nop_();i = 25;while (--i);}void Delay20ms() //@11.0592MHz {unsigned char i, j, k;_nop_();_nop_();i = 1;j = 216;k = 35;do{do{while (--k);} while (--j);} while (--i);}unsigned char Rec_8bit(){unsigned char i;unsigned char ret_8bit;unsigned char tmp;for(i=0;i<8;i++){while(!DHT11port);Delay10us();Delay10us();Delay10us();tmp = 0;if(DHT11port){tmp=1;}u8flag = 2;while((DHT11port)&&u8flag++);if(u8flag==1)break;ret_8bit<<=1;ret_8bit |= tmp;}return ret_8bit;}void DHT11_start(){// delay_1s();DHT11port = 0;Delay20ms();DHT11port = 1;Delay10us();Delay10us();Delay10us();Delay10us();//DHT11port = 1;if(!DHT11port){u8flag=2;while((!DHT11port)&&u8flag++);u8flag=2;while((DHT11port)&&u8flag++);check_buf[0] = Rec_8bit();check_buf[1] = Rec_8bit();check_buf[2] = Rec_8bit();check_buf[3] = Rec_8bit();check_buf[4] = Rec_8bit();if(!DHT11port){while(!DHT11port);}DHT11port = 1;tmp = check_buf[0]+check_buf[1]+check_buf[2]+check_buf[3] ;if(tmp==check_buf[4]){rec_buf[0] = check_buf[0];rec_buf[1] = check_buf[1];rec_buf[2] = check_buf[2];rec_buf[3] = check_buf[3];}ht.humi_h = rec_buf[0]/10 ;ht.humi_l = rec_buf[0]%10;ht.humi_dh = rec_buf[1]/10;ht.humi_dl = rec_buf[1]%10;ht.temp_h = rec_buf[2]/10;ht.temp_l = rec_buf[2]%10;ht.temp_dh = rec_buf[3]/10;ht.temp_dl = rec_buf[3]%10; }else{ht.humi_h = 0;ht.humi_l = 0;ht.humi_dh = 0;ht.humi_dl = 0;ht.temp_h = 0;ht.temp_l = 0;ht.temp_dh = 0;ht.temp_dl = 0;}}/************************************************/ LCD1602程序:#include "Library.h"void LCD1602_rsta(){unsigned char tmp;P0 = 0xFF;//this is a mustrs = 0;rw = 1;do{en = 1;//Delay1us();tmp = P0;//Delay1us();en = 0;}while(tmp&0x80);}void LCD1602_wdat(unsigned char dat){LCD1602_rsta();rs=1;rw=0;P0 = dat;en = 1;//Delay1us();en = 0;}void LCD1602_wcmd(unsigned char cmd){LCD1602_rsta();rs=0;rw=0;P0 = cmd;en = 1;//Delay1us();en = 0;}void Setcursor(unsigned char x,unsigned char y){if(y==0)x = x + 0x00;else if(y==1)x = x + 0x40;LCD1602_wcmd(x|0x80);}void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len){Setcursor(x,y);while(buf_len>0){LCD1602_wdat(*buf++); buf_len--;}}void OnCursor(){LCD1602_wcmd(0x0F);}void OffCursor(){LCD1602_wcmd(0x0C);}void LCD1602_init(){// Delay15ms();// LCD1602_wcmd(0x38);// Delay5ms();LCD1602_wcmd(0x38);// LCD1602_wcmd(0x08);LCD1602_wcmd(0x06);LCD1602_wcmd(0x0C);LCD1602_wcmd(0x01);}/******************************************/ Library.h#ifndef _Library_H#define _Library_H#include <STC15.h>#include <intrins.h>#define MAIN_Fosc 11059200Lsbit DHT11port = P3^6;typedef struct htstruct{unsigned char humi_h;unsigned char humi_l;unsigned char humi_dh;unsigned char humi_dl;unsigned char temp_h;unsigned char temp_l;unsigned char temp_dh;unsigned char temp_dl;}htstruct;extern htstruct ht;void DHT11_start();sbit rs = P2^4;sbit rw = P2^3;sbit en = P2^1;void LCD1602_init();void LCD1602_wBytes(unsigned char x,unsigned char y,unsigned char *buf,unsigned char buf_len);#endif。
单片机液晶显示控制实验课程设计
目录目录 (1)摘要.......................................... 错误!未定义书签。
第一章绪论................................... 错误!未定义书签。
1.1 硬件环境分析 ............................................................................错误!未定义书签。
1.2 实验箱简介 ...............................................................................错误!未定义书签。
第二章课程设计目的及课题分析. (4)2.1 课程设计目的 (2)2.2课题分析 .....................................................................................错误!未定义书签。
第三章实现原理. (7)3.1 点阵LCD的显示原理 (7)3.2 取模 (7)3.3功能扩展部分 (9)第四章PROTEUS硬件仿真 (10)4.1 硬件模拟软件介绍 (10)4.2程序流程图 (12)附录 (13)心得体会 (23)参考文献 (24)摘要单片机具有控制功能强、集成度高、体积小、低电压低能耗等特点,并且具有优异的性能价格比自20世纪70年代问世以来,受到人们的广泛关注。
几十年间单片机的发展十分迅猛,在控制领域独占鳌头,在我国单片机已广泛应用于工业自动化控制自动控制智能仪表。
家用电气电力电子机电一体化设备等各个方面,而51单片机是各单片机中最为理想和最为典型具有代表性的一种。
本次课程设计通过对它的学习应用以单片机为核心辅以必要的电路,设计一个简易的液晶显示控制装置。
它是由直流电源供电通过LCD显示出来。
实验中系统设计所需硬件都已集成于LAB6000实验箱上。
dht11课程设计
dht11课程设计一、课程目标知识目标:1. 学生能理解DHT11温湿度传感器的原理与结构。
2. 学生能掌握DHT11传感器与单片机的连接与编程基础。
3. 学生能运用所学的知识解读DHT11采集的数据,并将其转换为实际的温湿度值。
技能目标:1. 学生能通过动手实践,正确组装DHT11传感器与单片机的电路。
2. 学生能编写简单的程序,实现DHT11数据的读取与显示。
3. 学生能通过小组合作,解决在数据采集过程中遇到的问题。
情感态度价值观目标:1. 学生培养对物联网技术及传感器应用的兴趣,增强对科技创新的热情。
2. 学生在小组合作中,学会相互尊重、倾听他人意见,培养团队协作精神。
3. 学生通过学习传感器技术,认识到其在生活中的实际应用,增强学以致用的意识。
课程性质分析:本课程为信息技术课,通过教授DHT11传感器相关知识,使学生了解物联网技术在现实生活中的应用。
学生特点分析:学生为初中生,对新鲜事物充满好奇,动手能力强,喜欢探索和解决问题。
教学要求:结合学生特点,注重实践操作,引导学生主动探索,培养解决问题的能力。
在教学过程中,关注学生的情感态度变化,引导他们形成正确的价值观。
将课程目标分解为具体可衡量的学习成果,便于教学设计和评估。
二、教学内容1. 引言:介绍物联网基本概念,引出传感器在物联网中的应用。
- 教材章节:第一章 物联网概述2. DHT11传感器原理与结构:- 教材章节:第三章 传感器及其应用- 内容:温湿度传感器工作原理、DHT11内部结构、传感器输出信号特点。
3. DHT11与单片机的连接与编程:- 教材章节:第四章 单片机及其接口技术- 内容:DHT11与单片机的接线方式、编程语言基础、数据读取与解析。
4. 实践操作:- 教材章节:第五章 实践项目- 内容:DHT11传感器与单片机电路搭建、编程读取温湿度数据、数据展示。
5. 拓展应用:- 教材章节:第六章 物联网应用案例- 内容:探讨DHT11在其他物联网项目中的应用,如智能家居、农业监测等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告————温湿度液晶显示院系:物理学与电子科学学院班级专业:2012级微电子学生姓名:***学号:****************指导老师:***摘要 (3)一.实验目的 (3)二.实验内容 (3)三.实验器材 (3)四.实验资料 (3)1.DHT11产品概述 (3)2.DHT11引脚说明 (4)3.DHT11电源引脚 (4)4.串行接口 (4)5.单片机AT89C58 (5)五.系统的硬件设计和连接 (5)5.1时钟电路 (6)5.2显示模块 (6)5.3传感器模块 (7)5.4电路原理图 (7)六.程序设计 (7)七.实验心得 (14)液晶显示实验摘要:温湿度是生活生产中的重要的参数。
本设计为基于单片机的温湿度检测与控制系统,采用模块化、层次化设计。
用新型的智能温湿度传感器DHT11主要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机A T89C58进行数据的分析和处理,为显示和报警电路提供信号,实现对温湿度的控制报警。
报警系统根据设定报警的上下限值实现报警功能,显示部分采用LCD1602液晶显示所测温湿度值。
系统电路简单、集成度高、工作稳定、调试方便、检测精度高,具有一定的实用价值。
一.实验目的1.通过本实验了解液晶显示的基本原理、掌握如何用单片机来控制液晶显示模块的内容。
2.学会使用DS18B20温度传感器模块进行温度测量。
二.实验内容1.首先利用LCD显示自己的学号后3位+姓名拼音,比如“No:888 Name:WangNima”2.过3秒钟后,LCD显示当前温度,比如“Temp: 20 ℃”3.过3秒钟后,LCD显示姓名学号4.依次循环三.实验器材1.AT89C58单片机实验板2.DHT11温度湿度传感器模块3.LCD1602模块四.实验资料1.DHT11产品概述DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为 4 针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
2.DHT11引脚说明引脚名称类型引脚说明VCC 电源正电源输入,3V-5.5V DCDout 输出单总线,数据输入/输出引脚NC 空空脚,扩展未用GND 地电源地3.DHT11电源引脚DHT11的供电电压为 3-5.5V。
传感器上电后,要等待1s 以越过不稳定状态在此期间无需发送任何指令。
电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。
4.串行接口DA TA 用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit 湿度整数数据+8bit 湿度小数数据+8bi 温度整数数据+8bit 温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。
通讯过程如图1所示总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。
数字温湿度传感器DHT11 总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线0us,随后总线由上拉电阻拉高进入空闲状态。
5.单片机AT89C58A TC89C58是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash 存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C58产品指令和引脚完全兼容。
片上Flash允许ROM在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。
五.系统的硬件设计和连接此次设计的电路部分是由我来设计,电路主要分为时钟电路、复位电路、显示模块等等,再将其连接到一起就组成了温湿度报警器传感器电路图,除此之外我还参与了电路的焊接。
5.1时钟电路A TC89C51内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。
时钟可以由内部方式产生或外部方式产生。
如下:5.2显示模块5.3传感器模块5.4电路原理图六.程序设计#include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned int unint;unsigned char str1[8]={""};unsigned char str2[8]={""};unsigned char code dis1[8] = {" Temp : "};unsigned char code dis2[8] = {" Humi : "};unsigned char code dis3[]={"Number:021 "}; unsigned char code dis4[]={"2012221105240021"}; unsigned char code dis5[]={"xuehao: "}; unsigned char code dis6[]={"Name :XuZhuang "}; sbit TRH = P2^0;//温湿度传感器DHT11数据接入sbit LCD_RS = P3^5;sbit LCD_RW = P3^7;sbit LCD_EN = P3^6;uchar TH_data,TL_data,RH_data,RL_data,CK_data; uchar TH_temp,TL_temp,RH_temp,RL_temp,CK_temp; uchar com_data,untemp,temp;uchar respond;void delayNOP(){_nop_();_nop_();_nop_();_nop_();}// 毫秒级延时子程序void delay_ms(unsigned char ms){unsigned char i;while(ms--){for(i = 0; i< 150; i++){_nop_();_nop_();_nop_();_nop_();}}}//5us级延时程序void delay_us(){uchar i;i--;i--;i--;i--;i--;i--;}// 测试LCD忙碌状态//lcd_busy()为1时,忙,等待。
lcd_busy()为0时,闲,可写指令与数据。
bit lcd_busy(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);}// 写入指令数据到LCDvoid lcd_wcmd(unsigned char cmd){while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}//写显示数据到LCD//RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。
void lcd_wdata(unsigned char dat){while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}//LCD初始化设定void lcd_init(){delay_ms(15);lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据delay_ms(5);lcd_wcmd(0x38);delay_ms(5);lcd_wcmd(0x38);delay_ms(5);lcd_wcmd(0x0c); //显示开,关光标delay_ms(5);lcd_wcmd(0x06); //移动光标delay_ms(5);//lcd_wcmd(0x01); //清除LCD的显示内容,如果屏幕过暗,可将这俩句删除//delay_ms(5);}//设定LCD显示位置void lcd_dis_pos(unsigned char pos){lcd_wcmd(pos | 0x80); //数据指针=80+地址变量}//收发信号检测,数据读取char receive(){uchar i;com_data=0;for(i=0;i<=7;i++){respond=2;while((!TRH)&&respond++);delay_us();delay_us();delay_us();if(TRH){temp=1;respond=2;while((TRH)&&respond++);}elsetemp=0;com_data<<=1;com_data|=temp;}return(com_data);}//湿度读取子程序//温度高8位== TL_data//温度低8位== TH_data//湿度高8位== RH_data//湿度低8位== RH_data//校验8位== CK_data//调用的程序有delay();, Delay_5us();,RECEIVE();void read_TRH(){//主机拉低18msTRH=0;delay_ms(18);TRH=1;//DATA总线由上拉电阻拉高主机延时20usdelay_us();delay_us();delay_us();delay_us();//delay_us();//delay_us();delay_us();delay_us();delay_us();//主机设为输入判断从机响应信号TRH=1;//判断DHT11是否有低电平响应信号如不响应则跳出,响应则向下运行if(!TRH){respond=2; //判断DHT11发出80us 的低电平响应信号是否结束while((!TRH)&& respond++);respond=2; //判断从机是否发出80us 的高电平,如发出则进入数据接收状态while(TRH && respond++); //数据接收状态RH_temp = receive();RL_temp = receive();TH_temp = receive();TL_temp = receive();CK_temp = receive();TRH=1; //数据校验untemp=(RH_temp+RL_temp+TH_temp+TL_temp);if(untemp==CK_temp){RH_data = RH_temp;RL_data = RL_temp;TH_data = TH_temp;TL_data = TL_temp;CK_data = CK_temp;}}//湿度整数部分str1[0] = (char)(0X30+RH_data/10);str1[1] = (char)(0X30+RH_data%10);str1[2] = 0x2e; //小数点//湿度小数部分str1[3] = (char)(0X30+RL_data/10);str1[4] = 0x20;str1[5] = 0X25; //"%"str1[6] = 0x20; //"R"str1[7] = 0x20; //"H"//温度整数部分str2[0] = (char)(0X30+TH_data/10);str2[1] = (char)(0X30+TH_data%10);str2[2] = 0x2e; //小数点//温度小数部分str2[3] = (char)(0X30+TL_data/10);str2[4] = 0X27; //"'"str2[5] = 0X43; //"C"str2[6] = 0x20;str2[7] = 0x20;}void delay(unint x){unint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}//主函数//TH,TL,RH,RL分别代表温湿度的整数和小数部分void main(){unsigned char i,t=0x00,n=0x40,m;lcd_init();delay_us();while(1){read_TRH(); //写字符for(i=0;i<=7;i++){lcd_dis_pos(t+i); //显示字符lcd_wdata(dis1[i]);lcd_dis_pos(n+i); //显示字符lcd_wdata(dis2[i]);} //写湿度数据m=0x08;for(i=0;i<=7;i++){lcd_dis_pos(m);lcd_wdata(str1[i]);m++;} //写温度数据m=0x48;for(i=0;i<=7;i++){lcd_dis_pos(m);lcd_wdata(str2[i]);m++;}delay_ms(100) ;//延时delay(3000);m=0x00;for(i=0;i<=15;i++){lcd_dis_pos(m);lcd_wdata(dis3[i]);m++;}m=0x40;for(i=0;i<=15;i++){lcd_dis_pos(m);lcd_wdata(dis6[i]);m++;}delay_ms(100) ;delay(3000);m=0x00;for(i=0;i<=15;i++){lcd_dis_pos(m);lcd_wdata(dis5[i]);m++;}m=0x40;for(i=0;i<=15;i++){lcd_dis_pos(m);lcd_wdata(dis4[i]);m++;}delay_ms(100) ;delay(3000);}}七.实验心得回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,在接近一个月期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。