版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、作品名稱:時間溫濕度傳感器顯示器設計說明書 制作人:TBL 學號: 1219053109指導老師:歐亞軍 前言冬天已經來臨,每天的溫度也開始有所變化,類似長沙這種大城市,溫度的巨變實在讓人有點不知所措,擁有一個溫度顯示提醒器是有一定必要的,南方的冬天是比較干燥的,隨著人們的生活水平的不斷提高,人們對室內的溫濕度有了一定的要求,如果能做一個簡易的小型的電子產品來提示人們室內的溫度和濕度的曲線變化,這樣就能方便我們日常的生活起居,于是,我開始設計了這個簡易的時間溫濕度傳感顯示儀,他不僅能顯示年月日,還能告知我們室內溫度以及濕度的變化,方便我們更好的生活。制作前的準備元器件的認知以及原理的簡介1.溫
2、濕度傳感器溫濕度傳感器是指能將溫度量和濕度量轉換成容易被測量處理的電信號的設備或裝置。 濕敏元件是最簡單的濕度傳感器。濕敏元件主要有電阻式、電容式兩大類。 基本原理濕敏元件是最簡單的濕度傳感器。濕敏元件主要有電阻式、電容式兩大類。濕敏電阻的特點是在基片上覆蓋一層用感濕材料制成的膜,當空氣中的水蒸氣吸附在感濕膜上時,元件的電阻率和電阻值都發(fā)生變化,利用這一特性即可測量濕度。濕敏電容一般是用高分子薄膜電容制成的,常用的高分子材料有聚苯乙烯、聚酰亞胺、酪酸醋酸纖維等。當環(huán)境濕度發(fā)生改變時,濕敏電容的介電常數(shù)發(fā)生變化,使其電容量也發(fā)生變化,其電容變化量與相對濕度成正比。DHT11數(shù)字溫濕度傳
3、感器相關資料以及程序編寫事例請點擊是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器,它應用專用的數(shù)字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性和卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數(shù)以程序的形式存在OTP內存中,傳感器內部在檢測型號的處理過程中要調用這些校準系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,使其成為給類應用甚至最為苛刻的應用場合的最佳選擇。產品為4針單排引腳封
4、裝,連接方便。DHT11數(shù)字溫濕度傳感器接線圖引腳說明pin名稱注釋1VDD供電 35.5VDC2DATA串行數(shù)據(jù),單總線3NC空腳,請懸空4GND接地,電源負極C51單片機的介紹·8位CPU·4kbytes程序存儲器(ROM) (52為8K)·128bytes的數(shù)據(jù)存儲器(RAM) (52有256bytes的RAM)·32條I/O口線·111條指令,大部分為單字節(jié)指令·21個專用寄存器·2個可編程定時/計數(shù)器·5個中斷源,2個優(yōu)先級(52有6個)·一個全雙工串行通信口·外部數(shù)據(jù)存儲器尋址空間為
5、64kB·外部程序存儲器尋址空間為64kB·邏輯操作位尋址功能·雙列直插40PinDIP封裝·單一+5V電源供電CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;RAM:用以存放可以讀寫的數(shù)據(jù),如運算的中間結果、最終結果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;五個中斷源的中斷控制系統(tǒng);一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單片機與微機之間的串行通信
6、;片內振蕩器和時鐘產生電路,石英晶體和微調電容需要外接。最佳振蕩頻率為6M12M。1602LCD的介紹一、關于LCD1602:詳細理解請點擊在編寫LCD1602程序前,我們必須了解其手冊上一些非常重要的信息,如果這些信息不能理解透徹,編程可能會遇到或多或少的問題,在此先大致歸納幾點。1管腳:1602共16個管腳,但是編程用到的主要管腳不過三個,分別為:RS(數(shù)據(jù)命令選擇端),R/W(讀寫選擇端),E(使能信號);以后編程便主要圍繞這三個管腳展開進行初始化,寫命令,寫數(shù)據(jù)。以下具體闡述這三個管腳:RS為寄存器選擇,高電平選擇數(shù)據(jù)寄存器,低電平選擇指令寄存器。R/W為讀寫選擇,高電平進行讀操作,低
7、電平進行寫操作。E端為使能端,后面和時序聯(lián)系在一起。 除此外,D0D7分別為8位雙向數(shù)據(jù)線。 2操作時序: RSR/W操作說明00寫入指令碼D0D701讀取輸出的D0D7狀態(tài)字10寫入數(shù)據(jù)D0D711從D0D7讀取數(shù)據(jù)注:關于E=H脈沖開始時初始化E為0,然后置E為1,再清0.讀取狀態(tài)字時,注意D7位,D7=1,禁止讀寫操作;D7=0,允許讀寫操作;所以對控制器每次進行讀寫操作前,必須進行讀寫檢測。(即后面的讀忙子程序) 3指令集:LCD_1602 初始化指令小結:0x38
8、0; 設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口0x01 清屏0x0F 開顯示,顯示光標,光標閃爍0x08 只開顯示0x0e 開顯示,顯示光標,光標不閃爍0x0c 開顯示,不顯示光標0x06 地址加1,當寫入數(shù)據(jù)的時候光標右移0x02 地址計數(shù)器AC=0;(此時地址為0x80) 光標歸原點,但是DDRAM中斷內容不變0x18 光標和顯示一起向左移動 4顯示地址:LCD1602內部RAM顯示緩沖區(qū)
9、地址的映射圖,000F、404F分別對應LCD1602的上下兩行的每一個字符,只要往對應的RAM地址寫入要顯示字符的ASCII代碼,就可以顯示出來。 5讀寫時序:時序圖1602手冊中有,這里不引用了。時序圖很重要,編程就是根據(jù)時序圖設置寄存器,讓LCD工作。 二、LCD1602程序編寫流程:LCD1602在了解完以上信息后便可以編寫,這里我們把程序分為以下幾步:1定義LCD1602管腳,包括RS,R/W,E。這里定義是指這些管腳分別接在單片機哪些I/O口上?,F(xiàn)舉例如下:sbit EN=P34;sbit RS=P35;sbit RW=P36; 2顯示初始化,在這一步
10、進行初始化及設置顯示模式等操作,包括以下步驟:設置顯示方式 延時 清理顯示緩存 設置顯示模式通常推薦的初始化過程如下:延時15ms寫指令38H延時5ms寫指令38H延時5ms寫指令38H延時5ms注:以上寫38H指令可以看情況省略12步(以上都不檢測忙信號)(以下都要檢測忙信號)寫指令38H寫指令08H 關閉顯示寫指令01H 顯示清屏寫指令06H 光標移動設置寫指令0cH 顯示開及光標設置 3設置顯示地址(寫顯示字符的位置)。 4寫顯示字符的數(shù)據(jù)。溫濕度顯示系統(tǒng)原理圖軟件設計部分簡介#include <reg52.h>#includ
11、e <intrins.h>#include "1602.h"#include "ds1302.h"unsigned char str16;unsigned char str26;unsigned char code dis1 = "TRH RH: "unsigned char code dis2 = "TRH T: "sbit TRH = P21;/溫濕度傳感器DHT11數(shù)據(jù)接入uchar TH_data,TL_data,RH_data,RL_data,CK_data;uchar TH_temp,TL_
12、temp,RH_temp,RL_temp,CK_temp;uchar com_data,untemp,temp;uchar respond,q=2;/*/*/ 毫秒級延時子程序/*/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-; /*/收發(fā)信號檢測,數(shù)據(jù)讀取/*/char receive() ucha
13、r 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_dat
14、a/校驗 8位 = CK_data/調用的程序有 delay();, Delay_5us();,RECEIVE(); /*/void read_TRH()/主機拉低18ms TRH=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(!TR
15、H) respond=2; /判斷DHT11發(fā)出 80us 的低電平響應信號是否結束 while(!TRH)&& respond+);respond=2; /判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)while(TRH && respond+); /數(shù)據(jù)接收狀態(tài) RH_temp = receive(); RL_temp = receive(); TH_temp = receive(); TL_temp = receive(); CK_temp = receive();TRH=1; /數(shù)據(jù)校驗 untemp=(RH_temp+RL_temp+T
16、H_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;/濕度整數(shù)部分str10 = (0X30+RH_data/10); str11 = (0X30+RH_data%10);str12 = '.' /小數(shù)點/濕度小數(shù)部分str13 = (0X30+RL_data/10); str14 = '%' /"H"str15 = ' ' /&q
17、uot;%"/溫度整數(shù)部分str20 = (0X30+TH_data/10); str21 = (0X30+TH_data%10);str22 = '.' /小數(shù)點/溫度小數(shù)部分str23 = (0X30+TL_data/10); str24 = 0X27; /"'"str25 = 'C'/0X43; /"C"/ void shijian()/ / unsigned char i,n=0x40,m;/ m=0x00;/ for(i=0;i<17;i+)/ / lcd_dis_pos(m); / lc
18、d_wdata(dis3i);/ m+;/ / m=0x40;/ for(i=0;i<17;i+) / / lcd_dis_pos(m); / lcd_wdata(dis4i);/ m+;/ / void wenshidu()unsigned char i,n=0x40,m;read_TRH(); /寫字符for(i=0;i<=7;i+)lcd_dis_pos(i); /顯示字符lcd_wdata(dis1i);lcd_dis_pos(n+i); /顯示字符lcd_wdata(dis2i); /寫濕度數(shù)據(jù)m=0x08;for(i=0;i<6;i+) lcd_dis_pos(m
19、); lcd_wdata(str1i);m+;/寫溫度數(shù)據(jù)m=0x48;for(i=0;i<6;i+) lcd_dis_pos(m); lcd_wdata(str2i);m+;delay_ms(100) ;/延時void keyscan() if(key1=0)delay_ms(5);if(key1=0)q+;lcd_wcmd(0x01); /清除LCD lcd_wcmd(0x08);delay_ms(5);while(!key1);/*/主函數(shù)/TH,TL,RH,RL分別代表溫濕度的整數(shù)和小數(shù)部分/*/void main()lcd_init(); delay_us(); while(1
20、)keyscan();if(q%2=0)shijian();if(q%2=1)wenshidu();ifndef _1602_H_#define _1602_H_typedef unsigned char uchar;typedef unsigned int unint;sbit LCD_RS = P27; sbit LCD_RW = P26;sbit LCD_EN = P25;/*/ 毫秒級延時子程序/*/void delay_m(unsigned char ms) unsigned char i;while(ms-)for(i = 0; i< 150; i+)_nop_();_nop
21、_();_nop_();_nop_();/*/void delayNOP()_nop_();_nop_();_nop_();_nop_();/*/ /*/ 測試LCD忙碌狀態(tài)/lcd_busy()為1時,忙,等待。lcd_busy()為0時,閑,可寫指令與數(shù)據(jù)。/*/bit lcd_busy() bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);/*/*/ 寫入指令數(shù)據(jù)到LCD/*/void lcd_wcmd(unsigned
22、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; /*/*/寫顯示數(shù)據(jù)到LCD /RS=高電平,RW=低電平,E=高脈沖,D0-D7=數(shù)據(jù)。 /*/void lcd_wdata(unsigned char dat) while(lcd_busy();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delay
23、NOP();LCD_EN = 0; /*/*/LCD初始化設定/*/void lcd_init() delay_m(15); lcd_wcmd(0x38); /16*2顯示,5*7點陣,8位數(shù)據(jù)delay_m(5);lcd_wcmd(0x38); delay_m(5);lcd_wcmd(0x38); delay_m(5);lcd_wcmd(0x0c); /顯示開,關光標delay_m(5);lcd_wcmd(0x06); /移動光標delay_m(5);/lcd_wcmd(0x01); /清除LCD的顯示內容,如果屏幕過暗,可將這倆句刪除/delay_ms(5);/*/*/設定LCD顯示位置/
24、*/void lcd_dis_pos(unsigned char pos) lcd_wcmd(pos | 0x80); /數(shù)據(jù)指針=80+地址變量/*/#endif#ifndef _A1602_H#define _A1602_H#define uint unsigned int #define uchar unsigned char#define RS0 P6OUT&=BIT3; #define RS1 P6OUT|=BIT3;#define RW0 P6OUT&=BIT4; #define RW1 P6OUT|=BIT4;#define EN0 P6OUT&=BIT5
25、; #define EN1 P6OUT|=BIT5;void delay(uint z) uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-);uchar panman() /判忙函數(shù) uchar man; P1DIR&=0x00; /設置P2為輸入 RS0; /命令 RW1; /設置為讀 _NOP(); EN1; _NOP(); _NOP(); man=P1IN&0x80; /讀第7位是否為1,1忙;0不忙; EN0; P1DIR|=0xFF; /設置P2為輸出 RW0; return man; void xieling(ucha
26、r ling) /寫命令函數(shù) while(panman(); /判忙函數(shù) RW0; RS0; P1OUT=ling; EN1; delay(1); EN0; void xieshu(uchar shu) /寫數(shù)據(jù)函數(shù) while(panman(); /判忙函數(shù) RW0; RS1; P1OUT=shu; EN1; delay(1); EN0; void init1602() P6DIR = 0XFF;/設置為輸出 P6OUT = 0XFF;/初始化端口 P1DIR = 0XFF;/設置為輸出 P1OUT = 0XFF;/初始化端口 xieling(0x38); delay(1); xieling
27、(0x0c); delay(1); xieling(0x06); delay(1); xieling(0x01); delay(1);#endif#ifndef _1302_H_#define _1302_H_sbit s1=P11; /功能鍵設定sbit s2=P12; / 增大鍵設定sbit s3=P13; / 減小鍵設定sbit key1=P10;sbit RST=P37; /ds1302 設定sbit SCLK=P35;sbit IO=P36;sbit ACC0 = ACC0;sbit ACC7 = ACC7;uchar num8,enter,shi,fen,miao,nian,yue
28、,ri,week,shi1,fen1,flag1=0,flag2=0,flag3,choice;uchar time=" 20XX-XX-XX XXX" /年月日字符數(shù)組uchar time1=" xx:xx:xx " /時分秒字符數(shù)組void delay(unsigned int z) /1ms延時函數(shù) unsigned int x,y; for(x=z;x>0;x-) for(y=10;y>0;y-); uchar read(uchar x) /讀ds1302數(shù)據(jù) uchar i; RST=0; SCLK=0; RST=1; ACC=(x
29、|0x01); for(i=8;i>0;i-) IO=ACC0; SCLK=1; SCLK=0; ACC=ACC>>1; for(i=8;i>0;i-) ACC=ACC>>1; ACC7=IO; SCLK=1; SCLK=0; SCLK=1; RST=0; return ACC; void write (uchar addr,uchar dat) /向ds1302寫數(shù)據(jù) uchar i; RST=0; SCLK=0; RST=1; ACC=addr; for(i=8;i>0;i-) IO=ACC0; SCLK=1; SCLK=0; ACC=ACC>
30、;>1; ACC=dat; for(i=8;i>0;i-) IO=ACC0; SCLK=1; SCLK=0; ACC=ACC>>1; SCLK=1; RST=0; void getnum() /接收ds1302的數(shù)據(jù) uchar j; for(j=0;j<7;j+) numj=read(0x80+0x02*j); time3=(num6&0x70)>>4)+'0'/年 time4=(num6&0x0f)+'0' nian=(num6&0x70)>>4)*10+(num6&0x0
31、f); time6=(num4&0x70)>>4)+'0'/yue time7=(num4&0x0f)+'0' yue=(num4&0x70)>>4)*10+(num4&0x0f); time9=(num3&0x70)>>4)+'0'/ri time10=(num3&0x0f)+'0' ri=(num3&0x70)>>4)*10+(num3&0x0f); time14=(num5&0x0f)+'0'
32、;/week week=(num5&0x0f); switch(time14) /星期字符數(shù)組賦值 case '1': time13='S' time14='u' time15='n' break; case '2': time13='M' time14='o' time15='n' break; case '3': time13='T' time14='u' time15='e' break;
33、case '4': time13='W' time14='e' time15='d' break; case '5': time13='T' time14='h' time15='u' break; case '6': time13='F' time14='r' time15='i' break; case '7': time13='S' time14='a'
34、; time15='t' break; time14=(num2&0x70)>>4)+'0' /shi time15=(num2&0x0f)+'0' shi=(num2&0x70)>>4)*10+(num2&0x0f); time17=(num1&0x70)>>4)+'0' /fen time18=(num1&0x0f)+'0' fen=(num1&0x70)>>4)*10+(num1&0x0f); ti
35、me110=(num0&0x70)>>4)+'0' /miao time111=(num0&0x0f)+'0' miao=(num0&0x70)>>4)*10+(num0&0x0f); void display() /顯示數(shù)據(jù) uchar i; lcd_wcmd(0x0c); /顯示方式設定為:無光標,且不閃爍 if(flag1=0) /flag為0時正常顯示年、月、日、時、分、秒等 lcd_wcmd(0x80); for(i=0;timei!='0'i+) lcd_wdata(timei)
36、; lcd_wcmd(0xc0); for(i=0;time1i!='0'i+) lcd_wdata(time1i); void keyscan1() / 掃描鍵盤 getnum(); if(s1=0) /功能鍵被按下 lcd_wdata(0x0c); delay(10); if(s1=0) enter+; /記錄摁下次數(shù) if(flag1=1&&enter=6) enter=2; if(flag1=0&&enter=9) enter=0;while(s1=0); /按鍵放下時響一下 switch(enter) case 0: lcd_wcmd(
37、0x0c); break; case 1: lcd_wcmd(0xcb); lcd_wcmd(0x0f); delay(2000); /按秒 時 有光標 break; case 2: lcd_wcmd(0xc8); lcd_wcmd(0x0f); delay(2000); /分 break; case 3: lcd_wcmd(0xc5); lcd_wcmd(0x0f); delay(2000); /時 break; case 4: if(flag1=0) lcd_wcmd(0x8D); lcd_wcmd(0x0f); delay(1000); /星期 if(flag1=1) lcd_wcmd(
38、0xc4); lcd_wcmd(0x0f); delay(2000); /NO、OK選項閃爍 break; case 5: if(flag1=0) lcd_wcmd(0x8a); lcd_wcmd(0x0f); delay(2000); /日閃爍 if(flag1=1) lcd_wcmd(0xc1); lcd_wcmd(0x0f); delay(2000); /時鐘標志閃爍 break; case 6: lcd_wcmd(0x87); lcd_wcmd(0x0f); delay(2000); /月 break; case 7: lcd_wcmd(0x84); lcd_wcmd(0x0f); d
39、elay(2000); /年 break; if(enter!=0&&s2=0) delay(10); if(enter!=0&&s2=0) switch(enter) case 1: miao+; if(miao=60) miao=0; write(0x80,(miao/10*0x10+miao%10); /秒 break; case 2: if(flag1=0) fen+; if(fen=60) fen=0; write(0x82,(fen/10)*0x10+fen%10); /分 if(flag1=1) fen1+; if(fen1=60) fen1=0; break; case 3: if(flag1=0) shi+; if(shi=24) shi=0; write(0x84,(shi/10*0x10+shi%10); /時 if(flag1=1) shi1+; if(shi1=24) shi1=0; break; case 4: if(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度山地承包與森林資源評估合同4篇
- 2025年度房地產企業(yè)內部控制制度建立與執(zhí)行合同4篇
- 縱火行為的預防與打擊
- 2025年度模特與時尚品牌合作限量版合同4篇
- 2025年度民房買賣交易保障服務合同4篇
- 2025年度摩托車配件定制加工合同模板2篇
- 2025年度城市軌道交通農民工勞動合同樣本2篇
- 二零二五年度內衣銷售代理區(qū)域保護合同規(guī)范
- 2025年度美容院健康體檢與會員服務合同2篇
- 2025年度新能源車輛運輸合同
- TB 10012-2019 鐵路工程地質勘察規(guī)范
- 新蘇教版三年級下冊科學全冊知識點(背誦用)
- 鄉(xiāng)鎮(zhèn)風控維穩(wěn)應急預案演練
- 腦梗死合并癲癇病人的護理查房
- 蘇教版四年級上冊脫式計算300題及答案
- 犯罪現(xiàn)場保護培訓課件
- 扣款通知單 采購部
- 電除顫操作流程圖
- 湖北教育出版社三年級下冊信息技術教案
- 設計基礎全套教學課件
- IATF16949包裝方案評審表
評論
0/150
提交評論