单片机控制dht11液晶显示课程设计报告

合集下载

单片机lcd课程设计

单片机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传感器通信显示

实验内容概要:物联网通信技术- 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传感器的课程设计报告

单片机控制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测温度湿度实验报告

利用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上显示程序

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传感器的课程设计报告

单片机控制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温湿度传感器采用单总线通信协议,通过将数据传输到微控制器来实现与其他设备的连接。

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);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);}}七.实验心得回顾起此次单片机课程设计,我仍感慨颇多,从理论到实践,在接近一个月期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

相关文档
最新文档