SHT11溫度檢測(cè).1302實(shí)時(shí)時(shí)鐘、1602液晶顯示_第1頁
SHT11溫度檢測(cè).1302實(shí)時(shí)時(shí)鐘、1602液晶顯示_第2頁
SHT11溫度檢測(cè).1302實(shí)時(shí)時(shí)鐘、1602液晶顯示_第3頁
SHT11溫度檢測(cè).1302實(shí)時(shí)時(shí)鐘、1602液晶顯示_第4頁
SHT11溫度檢測(cè).1302實(shí)時(shí)時(shí)鐘、1602液晶顯示_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、main.c 文件#include #include #include 1302.h#include sht11.h#include 1602.hsbit temp_h=p10;sbit temp_l=p11;sbit humi_h=p12;sbit humi_l=p13;sbit beep=p14;sbit key1=p32;sbit key2=p33;sbit key3=p34;sbit key4=p35;uchar code table=temp:humi:;uchar code table1= teph: huih:;uchar code table2= tepl: huil:;uch

2、ar code table3=ok warn;uchar temp,humi; /檢測(cè)到的溫度和濕度數(shù)據(jù)uchar temp_flagh=29;uchar humi_flagh=75; /溫度濕度上限 uchar temp_flagl=25;uchar humi_flagl=65; /溫度濕度下限 uchar num=0;/定時(shí)刷新變量uchar num1=0,num2=0,num3=0;/key1 key2 按鍵計(jì)數(shù)uchar flag=0; /顯示時(shí)間標(biāo)志uchar set_time=0; /設(shè)置時(shí)間標(biāo)志void fengming(uchar x)/蜂蜜器uchar i,j;for(i=0

3、;i200;i+)beep=beep; for(j=0;jx;j+);void display_init()/顯示temp:和humi:字符串uchar i;init();for(i=0;i5;i+)/顯示 time: 字樣write_dat(table_time0i);write_com(0x80+0x40);/顯示溫濕度write_dat(t);write_dat(:);write_com(0x80+0x40+9);write_dat(h);write_dat(:);void display()uchar i;temp=sht11_convert_tempeture14bit(sht11_

4、measure(0x03,55);/采集溫度write_com(0x80+0x40+2); write_dat(temp/10+0);write_dat(temp%10+0);if(temp=temp_flagl) /判斷溫度是否在正常范圍temp_h=1;temp_l=1;write_com(0x80+0x40+5);for(i=0;itemp_flagh)temp_h=0; /*已修改*/fengming(80);fengming(80);write_com(0x80+0x40+5);for(i=4;i8;i+)write_dat(table3i);else temp_l=0; /*已修改

5、*/fengming(80);fengming(80);write_com(0x80+0x40+5);for(i=4;i8;i+)write_dat(table3i);humi=sht11_convert_humidity12bit(sht11_measure(0x05,210),temp);/采集濕度write_com(0x80+0x40+11); write_dat(humi/10+0);write_dat(humi%10+0);if(humi=humi_flagl) /判斷濕度是否在正常范圍humi_h=1;humi_l=1;write_com(0x80+0x40+13); /*已修改*

6、/write_dat( ); /*已修改*/for(i=0;ihumi_flagh)humi_h=0; /*已修改*/fengming(80);fengming(80);write_com(0x80+0x40+13);for(i=4;i8;i+)write_dat(table3i);else humi_l=0; /*已修改*/fengming(80);fengming(80);write_com(0x80+0x40+13);for(i=4;i8;i+)write_dat(table3i);void display1() /顯示key1按下之后的數(shù)據(jù)uchar i;write_com(0x01)

7、;for(i=0;i6;i+)write_dat(table1i);write_dat(temp_flagh/10+0x30);write_dat(temp_flagh%10+0x30);for(i=6;i12;i+)write_dat(table1i);write_dat(humi_flagh/10+0x30);write_dat(humi_flagh%10+0x30);write_com(0x80+0x40);for(i=0;i6;i+)write_dat(table2i);write_dat(temp_flagl/10+0x30);write_dat(temp_flagl%10+0x30

8、);for(i=6;i12;i+)write_dat(table2i);write_dat(humi_flagl/10+0x30);write_dat(humi_flagl%10+0x30);void time() /時(shí)間處理uchar i;read_rtc(); /讀取時(shí)間chuli_rtc(); /時(shí)間數(shù)據(jù)處理write_com(0x85); /顯示溫度for(i=0;i23)set_data4=0;write_dat(set_data4/10+0x30); write_dat(set_data4%10+0x30);if(num3=2) /設(shè)置分 set_data5=set_data5+1

9、;if(set_data559)set_data5=0;write_com(0x80+8);write_dat(set_data5/10+0x30); write_dat(set_data5%10+0x30);if(num3=3) /設(shè)置秒 set_data6=set_data6+1;if(set_data659)set_data6=0;write_com(0x80+11);write_dat(set_data6/10+0x30); write_dat(set_data6%10+0x30);if(num3=4)/設(shè)置年 set_data0=set_data0+1;if(set_data099)

10、set_data0=0;write_com(0x80+0x40+5);write_dat(set_data0/10+0x30); write_dat(set_data0%10+0x30);if(num3=5)/設(shè)置月 set_data2=set_data2+1;if(set_data212)set_data2=1;write_com(0x80+0x40+8);write_dat(set_data2/10+0x30); write_dat(set_data2%10+0x30);if(num3=6)/設(shè)置日 按照月份分為29,30,31天 set_data3=set_data3+1;switch

11、(set_data2)case 1:case 3:case 5:case 7:case 8:case 10: case 12: if(set_data331) set_data3=1;break;case 4:case 6:case 9:case 11: if(set_data330) set_data3=1;break;case 2: if(set_data329) set_data3=1;break;write_com(0x80+0x40+11);write_dat(set_data3/10+0x30); write_dat(set_data3%10+0x30);if(key4=0&num

12、1=2)while(key4=0);write_com(0x06);write_com(0x0c);set_time=1;/時(shí)間被設(shè)置標(biāo)志位置1if(num3=1)/設(shè)置時(shí)write_com(0x80+5); set_data4=set_data4-1;if(set_data40)set_data4=23;write_dat(set_data4/10+0x30); write_dat(set_data4%10+0x30);if(num3=2) /設(shè)置分 set_data5=set_data5-1;if(set_data50)set_data5=59;write_com(0x80+8);writ

13、e_dat(set_data5/10+0x30); write_dat(set_data5%10+0x30);if(num3=3) /設(shè)置秒 set_data6=set_data6-1;if(set_data60)set_data6=59;write_com(0x80+11);write_dat(set_data6/10+0x30); write_dat(set_data6%10+0x30);if(num3=4)/設(shè)置年 set_data0=set_data0-1;if(set_data00)set_data0=99;write_com(0x80+0x40+5);write_dat(set_d

14、ata0/10+0x30); write_dat(set_data0%10+0x30);if(num3=5)/設(shè)置月 set_data2=set_data2-1;if(set_data21)set_data2=12;write_com(0x80+0x40+8);write_dat(set_data2/10+0x30); write_dat(set_data2%10+0x30);if(num3=6)/設(shè)置日 按照月份分為29,30,31天 set_data3=set_data3-1;switch (set_data2)case 1:case 3:case 5:case 7:case 8:case

15、 10: case 12: if(set_data30) set_data3=31;break;case 4:case 6:case 9:case 11: if(set_data30) set_data3=30;break;case 2: if(set_data30) set_data3=29;break;write_com(0x80+0x40+11);write_dat(set_data3/10+0x30); write_dat(set_data3%10+0x30); void int0() interrupt 0 /外部中斷檢測(cè)key1鍵uchar i;if(key1=0)while(ke

16、y1=0);num1+;if(num1=1) tr0=0; display1(); flag=1;if(num1=2)write_com(0x01);flag=0;write_com(0x80); /第一行for(i=0;i5;i+) /設(shè)置顯示時(shí)間time字樣write_dat(table_time0i);time();write_com(0x80+0x40); /第二行for(i=0;i5;i+)/設(shè)置顯示日期data字樣write_dat(table_time1i);write_dat(disp10+0);write_dat(disp11+0);write_dat(-);write_da

17、t(disp13+0);write_dat(disp14+0);write_dat(-);write_dat(disp16+0);write_dat(disp17+0);if(num1=3) num1=0,num2=0,num3=0; flag=0; tr0=1; write_com(0x01); display_init(); if(set_time=1) /若時(shí)間或者日期被改變則將改變之后的時(shí)間日期重新寫入1302 uchar i,j;for(i=0;i7;i+) /由于1302中的數(shù)值是16進(jìn)制所以需要將數(shù)組中的時(shí)間日期轉(zhuǎn)化為16進(jìn)制j=set_datai/10; /取數(shù)組十位set_d

18、atai=set_datai%10; /取數(shù)組個(gè)位set_datai=set_datai+j*16;/將個(gè)位、十位放在一起拼成16進(jìn)制;write_ds1302(0x8e,0x00); /關(guān)閉寫保護(hù)for(i=0;i7;i+)write_ds1302(write_datai,set_datai); /將新的時(shí)間日期寫到1302對(duì)應(yīng)的地址中后 即可實(shí)現(xiàn)日期的修改write_ds1302(0x8e,0x80); /打開寫保? void init_tr0() interrupt 1 /定時(shí)器0 刷新顯示th0=(65536-50000)/256;tl0=(65536-50000)%256;num+;

19、if(num=8) /num值越大刷新越慢 越小刷新越快 過小會(huì)導(dǎo)致顯示不出數(shù)據(jù) num=0;display();1302.h 文件#define uint unsigned int#define uchar unsigned charsbit sck = p24; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */sbit io = p25; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */sbit rst = p23; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */uchar code table_time0=time ;uchar code table_time1=date ;uchar disp8; /時(shí)間uchar disp18; /日期uc

20、har disp21;uchar time_data7=13,7,4,8,0,31,0;uchar write_data7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;/ds1302年周月日時(shí)分秒寄存器地址uchar read_data7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;/年星期月日時(shí)分秒char set_data7;void write_ds1302_byte(uchar datt)/1302寫字節(jié)uchar i;for(i=0;i=1;sck=1;void write_ds1302(uchar add,uchar dat)/往

21、指定地址寫數(shù)據(jù)rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);write_ds1302_byte(dat);rst=0;_nop_();sck=1;io=1;uchar read_ds1302(uchar ad) /讀指定地址的數(shù)據(jù)uchar i,dat;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(ad);for(i=0;i1;sck=0;if(io)dat=dat|0x80;sck=1;rst=0;_nop_();sck=0;_nop_

22、();io=1;sck=1;return (dat);void chuli_rtc(void) disp7=time_data6%16;/秒 disp6=time_data6/16; set_data6=time_data6/16*10+time_data6%16; disp5=0x0a; disp4=time_data5%16; disp3=time_data5/16; set_data5=time_data5/16*10+time_data5%16; /分 disp2=0x0a; disp1=time_data4%16; disp0=time_data4/16; set_data4=tim

23、e_data4/16*10+time_data4%16; /時(shí) disp17=time_data3%16; disp16=time_data3/16; set_data3=time_data3/16*10+time_data3%16; /日 disp14=time_data2%16; disp13=time_data2/16; set_data2=time_data2/16*10+time_data2%16; /月 disp21=time_data1%16; disp20=time_data1/16; set_data1=time_data1/16*10+time_data1%16;/星期 d

24、isp11=time_data0%16; disp10=time_data0/16; set_data0=time_data0/16*10+time_data0%16;/年void set_rtc(void) /設(shè)置初始時(shí)間uchar i,j;for(i=0;i7;i+)j=time_datai/10; /去數(shù)組十位time_datai=time_datai%10; /取數(shù)組個(gè)位time_datai=time_datai+j*16;/將個(gè)位、十位放在一起;write_ds1302(0x8e,0x00); /關(guān)閉寫保護(hù)for(i=0;i7;i+)write_ds1302(write_datai,

25、time_datai);write_ds1302(0x8e,0x80); /打開寫保護(hù)void read_rtc(void) /讀時(shí)鐘 uchar i; for(i=0;i7;i+) time_datai=read_ds1302(read_datai); sht11.h 文件sbit sht11_sck=p26;sbit sht11_data=p27 ;void delay(uint x)uchar i;while(x-)for(i=0;i0;i-)for(j=112;j0;j-);void sht11_start() /sht11啟動(dòng)時(shí)序sht11_sck=1;sht11_data=1;de

26、lay();sht11_data=0;delay();sht11_sck=0;delay();sht11_sck=1;delay();sht11_data=1;void sht11_end() /當(dāng)接收兩個(gè)8byte數(shù)據(jù)后部接收crc校驗(yàn)碼sht11_data=1;sht11_sck=1;delay();sht11_sck=0;delay();void sht11_sendbyte(uchar dat) /向sht11發(fā)送8bite數(shù)據(jù)uchar i;sht11_sck=0; delay();for(i=0;i8;i+)if(dat&0x80)sht11_data=1;delay();else

27、sht11_data=0;delay();dat=dat1;sht11_sck=1;delay();sht11_sck=0;uchar sht11_receivebyte() /從sht11接收數(shù)據(jù)uchar i;uchar dat;sht11_sck=0;delay();for(i=0;i8;i+)sht11_sck=1;delay();dat=dat1;if(sht11_data)dat=dat|0x01;delay();elsedat=dat&0xfe;delay(); sht11_sck=0;delay();sht11_data=1; /釋放數(shù)據(jù)總線return(dat);void s

28、ht11_answer() /:檢測(cè)sht11的響應(yīng)信號(hào)(在第九個(gè)時(shí)鐘周期)sht11_sck=1;delay();while(sht11_data=1);sht11_sck=0;sht11_data=1;void mcu_answer() /單片機(jī)向sht11發(fā)送應(yīng)答信號(hào)sht11_sck=0;delay();sht11_data=0;delay();sht11_sck=1;delay();sht11_sck=0;delay();sht11_data=1; /釋放數(shù)據(jù)總線 這條指令非常重要 不加的話導(dǎo)致單片機(jī)不能讀取低8位void sht11_write_register(uchar com

29、mand ,uchar dat) /:向sht11的狀態(tài)寄存器設(shè)置/command為reg_write 0x06寫寄存器sht11_start();/dat為 設(shè)置sht11的功能 可以設(shè)置檢測(cè)的數(shù)據(jù)位數(shù)sht11_sendbyte(command);sht11_answer();sht11_sendbyte(dat);sht11_answer();uint sht11_measure(uchar command,uchar time) /設(shè)置sht11檢測(cè)功能,并返回相應(yīng)的檢測(cè)結(jié)果uint dat=0;uchar data_high,data_low;sht11_start();sht11_sendbyt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論