单片机接口设计-温度湿度检测仪网友投稿

2021-01-08 13:30:43本页面

【文章导读】单片机接口设计温湿度检测仪学院:班级:学号:姓名:指导教师:实验目的及设计要求:在第一阶段掌握绘图技能的基础上,根据所选择的课题温湿度检测仪进行设计,包括硬件原理及电路板的设计,以及软件程序的设计,以实现对外界温湿度的准确检测,并实现相应的报警功能。可以进行合理

单片机接口设计-温度湿度检测仪网友投稿


【正文】 《单片机接口设计》 ——温湿度检测仪 学院: 班级: 学号:姓名:指导教师: 1. 2.实验目的及设计要求: 在第一阶段掌握绘图技能的基础上,根据所选择的课题——温湿度检测仪进行设计,包括硬件原理及电路板的设计,以及软件程序的设计,以实现对外界温湿度的准确检测,并实现相应的报警功能。可以进行合理的功能附加,已完成更好的功能设计。充分发挥所学知识,通过此课程设计进一步地了解我们所学的单片机知识,通过实践去检验知识的掌握,并利用它去深化知识层面。 3.硬件系统说明及原理图: 1.原理图及相关介绍 图一温湿度检测仪原理图 先通过查阅资料确定要使用的器件都有哪些。

1、并提前计算好电路中各部分的参数,查明所用器件所遵循的原理以设计电路,之后画出原理图。 如图所示:将DHT11温湿度传感器,1602显示屏,及报警电路与主电路连接,形成我们所需的原理图,为下一步布板做铺垫,(要保证原理图正确无误,若出现错误立即认真地去发现并找出错误。)以实现所需功能。 以下三张图分别为1602显示电路,有两个灯组成的分别担任超温报警和超湿报警的发光报警电路,和DHT11温湿度检测电路。将他们与主电路组合形成原理图电路。 2.PCB图 画好原理图并检查无错误后,将其生成为PCB图,如图二所示为PCB图。 图二PCB图 三.软件流程图及软件清单 1。

2、软件流程图 (1)DHT11流程图 读取温湿度寄存器 启动温湿度转换 上图为DHT11温湿度传感器的工作流程图,它与微处理器之间采用单线数据格式进行同步通讯,通讯时间4ms左右。一次完整的数据传输40bit,高位先出。总线空闲状态为高电平,主机把总线拉低等待DHT11响应,必须大于18ms,保证DHT11接收到主机的开始信号后,等待主机开始信号结束后,发送低电平响应信号。延时20到40us后主机读取DHT11的响应信号,主机发送开始信号后,输出高电平,总线拉高。而总线为低电平,说明DHT11再把总线拉高80us,准备发送数据。

3、每一比特数据都以50us低电平时隙开始,高电平的长短决定数据位是0还是1。如读高电平,则DHT11没有响应,此时检查线路,当最后一比特数据传送完毕后,DHT11拉低总线50us,随后总线进入空闲状态。 (2)LCD1602原理说明 显示屏有两个重要端口,分别为RS和RW。RS进行寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。RW为读写信号线,高电平读,低电平写。RS,RW共同为低时可以写入指令或显示地址,RS为低,RW为高可以读信号,反之可以写入数据,E为使能端,当它有高电平变为低电平时,液晶模块执行命令。 1602与单片机连接实现与温湿度传感器的通信。 2.下面为所编的软件程序 利用Keil软件编程。

4、为了方便在同一文件内分三部分编出各部分功能,以便编好的调试与改进。 第一部分:1602显示屏部分 #include<reg52.h> #defineuintunsignedint #defineucharunsignedchar #defineLCD_DATAP0 sbitLED1=P1^6; sbitLED2=P1^7; sbitbit11=P2^0; sbitLCD_RS=P2^1; sbitLCD_RW=P2^2; sbitLCD_EN=P2^3; voidDelay_us(ucharn)。

5、 voidDelay_ms(uintn); //LCD1602部分 //向LCD写指令或数据 voidLCD_write_char(ucharcd,ucharab); //向LCD1602中写入一字节数据 voidLCD_byte(ucharabc); //初始化LCD voidinit_LCD(); //向LCD写入一字符串 voidLCD_write_str(unsignedcharX,unsignedcharY,unsignedchar*s); //LCD中显示字符的起始位置 voidLCD_set_xy(ucharx。

6、uchary); //在液晶中显示浮点数函数 voidLCD_value(ucharx,uchary,floatf); //DHT11部分 charCOM(); voidGetDHT11(); 第二部分:DHT11温湿度传感器部分 voidmain() { //测试 init_LCD(); LCD_write_str(0,0,"HELLO,MA");//液晶预显示 Delay_ms(2000); init_LCD(); while(1) { GetDHT11();

7、 F16T=30.21f; F16RH=75.00f; if(F16T>MaxT) { LED1=0; } if(F16RH>MaxRH) { LED2=0; } LCD_write_str(0,0,"T="); LCD_value(3,0,F16T); LCD_write_str(8,0,"C"); LCD_write_str(0,1,"RH="); LCD_value(4,1,F16RH); LCD_write_str(9。

8、1,"%"); Delay_ms(500); } } 第三部分:单片机传输部分 #include"LCDDHT11.h" #include<stdio.h> #include<intrins.h> #defineuintunsignedint #defineucharunsignedchar ucharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; ucharU8FLAG; floatF16T。

9、F16RH; voidDelay_ms(uintn)//n毫秒延时函数 { chari,j; for(i=n;i<=0;i--) for(j=0;j<125;j++); } voidDelay_us(ucharn)//nus延时函数 { n=n/2; while(--n); } voidLCD_write_char(ucharcd,ucharab) { Delay_us(20); if(cd==0) { LCD_RS=1; LCD_byte(ab)。

10、 } else { LCD_RS=0; LCD_byte(cd); } } voidLCD_byte(ucharabc) { LCD_RW=0; LCD_EN=0; LCD_DATA=abc; Delay_ms(1); LCD_EN=1; Delay_ms(5); LCD_EN=0; } voidinit_LCD() { LCD_write_char(0x38,0);//开显示 Delay_ms(1); LCD_write_char(0x38。

11、0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x0c,0);//开显示不显示光标 Delay_ms(1); LCD_write_char(0x06,0); //写一个指针加1 Delay_ms(1); LCD_write_char(0x01,0);//清屏 Delay_ms(1); LCD_write_char(0x80。

12、0);//设置数据指针起点 Delay_ms(1); } voidLCD_set_xy(ucharx,uchary) { ucharaddress; if(y==0) { address=0x80+x; } else { address=0xc0+x; } LCD_write_char(address,0); } voidLCD_write_str(unsignedcharx,unsignedchary,unsignedchar*s) { LCD_write_char(0。

13、""); LCD_set_xy(x,y); //写地址 while(*s) { LCD_write_char(0,*s); s++; } } voidLCD_value(ucharx,uchary,floatf) { unsignedcharstr[20]; sprintf(str,"%.2f",f); LCD_write_str(x,y,str); } //DHT11部分 charCOM() { //U8FLAG=2; chari。

14、U8temp,U8comdata; for(i=0;i<8;i++) { while(!bit11); Delay_us(35); U8temp=0; if(bit11) U8temp=1; while(bit11); U8comdata<<=1; U8comdata|=U8temp; } returnU8comdata; } voidGetDHT11() { do { bit11=0; Delay_ms(20); bit11=1; Delay_us(60)。

工作规范相关推荐  
三九文库 www.999doc.com
备案图标苏ICP备2020069977号