基于单片机的温湿度检测仪的设计内容摘要:

温 度与湿度两个数据,这就使得在两个 MSComm 中分别显示温度与湿度成为泡影,因为只有一个串口上传,但又要很明显的区分出来,而不能将两者紧挨着显示以免误看,故将 MSComm控件的 MultiLine 属性设置为 Ture 即可,这样方框就调整为刚好在两行分别显示数据的形式便达到了目的。 MSComm 的代码: Private Sub MSComm1_OnComm() Dim rec As String Select Case Case EvReceive rec = = rec = 0 End Select End Sub TextBox 的代码: Private Sub Form_Load() = 9600,N,8,1 16 = 3 = 8 = 2 If = True Then = False = 4 = 2 = 0 = InputModeText If = False Then = True = 0 = 温湿度显示 End Sub VB界面的显示 其中“花屏”问题的原因与解决方法 : 由于 12864 这种能写汉字的液晶显示要在同一个位置刷新汉字就必须注意指针光标的位置,否则就会出现所想写的汉字与所要显示的汉字不匹配的情况,甚至还可能出现显示一段时间后“花屏”。 因为汉字是同时显示两个字节,而 1602 是显示一个字节,这可能就是两者的最大区别,为此我们每刷新一次汉字立即调整指针光标到之前的位置,便将棘手的问题迎刃而解。 方案二 基于 DHT11 温 湿 度传感器的 Visual C++上位机界面的 设计 由于 DHT11 的温度误差为177。 2℃, 仓库温度要求不高 因此我们设计了适用范围 一般 的 DHT11 来检测温度 和湿度 ,避免了精度不高,提高了检测的准确性。 遇到的问题和解决的方法: 由于要将温度值和液晶万年历同时在 12864 的液晶上显示,这就会使两者的显示数据出现混叠的现象,因为液晶万年历每一秒的刷新频率和 DHT11 的检测数据刷新频率不一致所导致的,为此我们只要检测的温度值每一秒钟刷新一次即可。 17 VC 界面显示图 18 参考文献 [1] 侯建军 . 电子技术基础实验、综合设计与课程设计 .北京:高教出版社 2020, 10(第一版) [2] 童诗白,华成英.模拟电子技术基础.北京:清华大学教研组编. [3] 阎石.数字电子技术基础。 北京:清华大学教研组编. [4] 李朝青.单片机原理及接口技术 北京:航空航天大学出版社. 2020, 10.(第三版) [5] 蔡方凯.单片机原理及基于单片机的嵌入式系统设计 中国水利水电出版社 2020. [6] 张永枫.单片机应用实训教程.西安电子科技大学出版, 2020. [7] 谢自美.电子线路设计、实验、测试.华中理工大学出版社, 2020. [8] 郭天祥.十天学会单片机。 电子工业出版社, 2020. [9] 19 附录一 /********************************/ //远程监测的工厂温湿度检测仪 /********************************/ include define uchar unsigned char define uint unsigned int /***端口定义 ***/ sbit LCD_RS=P3^5。 //寄存器选择输入 sbit LCD_RW=P3^6。 //液晶读 /写控制 sbit LCD_EN=P3^4。 //液晶使能控制 sbit LCD_PSB=P3^7。 //串 /并方式控制 sbit s1=P2^0。 //调时开 /关 sbit s2=P2^1。 //调时 + sbit s3=P2^2。 //调时 sbit buzzer=P2^7。 //蜂鸣器 sbit P2_6=P2^6。 // 口为通讯口连接 DHT11 typedef unsigned char U8。 typedef unsigned int U16。 char sec,min,hour,week,day=1,month=1,year。 uchar a,flag,flag2。 uchar s1num。 uchar code dis1[]={2020 年 01 月 01日 }。 uchar code dis2[]={00 时 00 分 00 秒 }。 uchar code dis3[]={温度 ::00 星期日 }。 uchar code dis4[]={湿度 ::00 上 传 ..}。 uchar code dis5[]={0x20,0x20,0xce,0xc2,0xb1,0xa8,0xbe,0xaf}。 //空温报警 uchar code dis6[]={0x20,0x20,0xca,0xaa,0xb1,0xa8,0xbe,0xaf}。 //空湿报警 uchar code dis7[]={0xce,0xc2,0xca,0xaa,0xb1,0xa8,0xbe,0xaf}。 //温湿报警 uchar code dis8[]={0x20,0x20,0xc9,0xcf,0xb4,0xab,0x2e,0x2e}。 //空上传 .. uchar code disx[]={0xc8,0xd5,0xd2,0xbb,0xb6,0xfe,0xc8,0xfd,0xcb,0xc4,0xce,0xe5,0xc1,0xf9}。 //日 ,一 ,二 ,三 ,四 ,五 ,六 (两个字节为一个汉字 ) //定义区 // U8 U8FLAG,k。 U8 U8count,U8temp。 U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata,U8T_data_H1,U8T_data_L1,U8RH_data_H1,U8RH_data_L1。 U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp。 U8 U8data。 U8 outdata[5]。 //定义发送的字节数 U8 indata[5]。 U8 count, count_r=0。 U8 str[5]={ZPF }。 U16 U16temp1,U16temp2。 /***延时 1ms 子函数 ***/ void delay(uint z) { uint x,y。 for(x=z。 x0。 x) 20 for(y=110。 y0。 y)。 } /***延时子函数 ***/ void Delay2(U16 j) { U8 i。 for(。 j0。 j) for(i=0。 i27。 i++)。 } /***延时 10us 子函数 ***/ void Delay_10us(void) { U8 i。 i。 i。 i。 i。 i。 i。 } /***发送字符串子函数 ***/ SendData(U8 *a) { outdata[0] = a[0]。 outdata[1] = a[1]。 outdata[2] = a[2]。 outdata[3] = a[3]。 count = 1。 SBUF=outdata[0]。 } /***写指令子函数 ***/ /*RS=0,RW=0,E=0,D0D7=指令码 */ void write_(uchar ) { LCD_RS=0。 LCD_RW=0。 LCD_EN=0。 P0=。 delay(5)。 LCD_EN=1。 delay(5)。 LCD_EN=0。 } /***写数据子函数 ***/ /*RS=1,RW=0,E=0,D0D7=数据 */ void write_dat(uchar dat) { LCD_RS=1。 LCD_RW=0。 LCD_EN=0。 P0=dat。 delay(5)。 LCD_EN=1。 delay(5)。 LCD_EN=0。 } /***设定显示位置 ***/ void lcd_pos(uchar X,uchar Y) 21 { uchar pos。 if(X==0) X=0x80。 else if(X==1) X=0x90。 else if(X==2) X=0x88。 else if(X==3) X=0x98。 pos=X+Y。 write_(pos)。 } /***LCD 初始化设定 ***/ void init() { LCD_PSB=1。 //并口方式 write_(0x30)。 //基本指令操作 delay(5)。 write_(0x0c)。 //显示开,关光标 delay(5)。 write_(0x01)。 //清除 LCD 的显示内容 delay(5)。 TMOD=0x21。 TH0=0x4c。 TL0=0x00。 ET0=1。 EA=1。 TR0=1。 TH1 = 253。 // 设置初值 TL1 = 253。 TR1 = 1。 // 开始计时 SCON = 0x50。 //工作方式 1,波特率 9600bps,允许接收 ES = 1。 EA = 1。 // 打开所以中断 TI = 0。 RI = 0。 SendData(str)。 //发送到串口 Delay2(1)。 } /***写年月日子函数 ***/ void write_ymd(uchar add,uchar dat) { uchar shi,ge。 shi=dat/10。 ge=dat%10。 write_(0x80+add)。 write_dat(0x30+shi)。 write_dat(0x30+ge)。 } /***写时分秒子函数 ***/ void write_hms(uchar add,uchar dat) { uchar shi,ge。 shi=dat/10。 ge=dat%10。 write_(0x90+add)。 write_dat(0x30+shi)。 write_dat(0x30+ge)。 } 22 /*温度显示子函数 */ void write_tem(uchar add) {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。