|
我給大家整理了一系列的SHT11單片機(jī)測(cè)量的實(shí)例(包含論文 與完整的源碼等,本人已經(jīng)測(cè)試成功)
SHT11溫濕度傳感器外觀圖:
0.png (105.83 KB, 下載次數(shù): 171)
下載附件
2017-4-22 15:53 上傳
SHT11溫濕度傳感器原理圖:
0.png (61.2 KB, 下載次數(shù): 163)
下載附件
2017-4-22 15:50 上傳
可以用ad來打開工程文件,里面的庫都包含了.
0.png (32.53 KB, 下載次數(shù): 140)
下載附件
2017-4-22 15:50 上傳
0.png (56.27 KB, 下載次數(shù): 136)
下載附件
2017-4-22 15:53 上傳
新建位圖圖像.png (327.81 KB, 下載次數(shù): 165)
下載附件
2017-4-22 10:57 上傳
新建位圖圖像 (2).png (341.07 KB, 下載次數(shù): 144)
下載附件
2017-4-22 10:57 上傳
0.png (62.43 KB, 下載次數(shù): 141)
下載附件
2017-4-22 15:49 上傳
在51hei附件中都可以下載
SHT11單片機(jī)源代碼:
- #include <reg51.h>
- #include <intrins.h>
- #include <math.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dat=P1^0; //串行數(shù)據(jù)
- sbit clk0=P1^1; //串行時(shí)鐘
- sbit lat=P1^2;
- sbit key1=P0^0;
- sbit key2=P0^1;
- sbit key3=P0^2;
- sbit led1=P0^6;
- sbit led2=P0^7;
- sbit gw=P1^3; //個(gè)位
- sbit sw=P1^4; //十位
- sbit bw=P3^3; //百位
- sbit qw=P3^4;
- sbit pl=P3^6; //165鎖存
- sbit clk1=P3^7; //165時(shí)鐘
- sbit Do=P3^5;
- sbit DQ=P3^1;
- code uchar tab[16]={
- 0x3F,
- 0x06,
- 0x5B,
- 0x4F,
- 0x66,
- 0x6D,
- 0x7D,
- 0x07,
- 0x7F,
- 0x6F,
- 0x39, //"C"
- 0x79, //"E"
- 0x76, //"H"
- 0x38, //"L"
- 0x40 //"-"
- };
- uchar k1,k2,k3;
- uint t;
- uchar disbuf[4];
- uint wendu_h=456,wendu_l=288;
- ///eeprom address
- sfr wdtcontr=0xe1;
- sfr ispdata=0xe2;
- sfr ispaddrh=0xe3;
- sfr ispaddrl=0xe4;
- sfr ispcmd=0xe5;
- sfr isptrig=0xe6;
- sfr ispcontr=0xe7;
- ////////////////////////
- iapdisable()
- {
- ispcontr=0;ispcmd=0;isptrig=0;
- }
- erase(uint addr)
- {
- ispcontr=0x83;ispcmd=0x03;
- ispaddrh=addr/256;ispaddrl=addr%256;
- EA=0;isptrig=0x46;isptrig=0xb9;_nop_();EA=1;
- iapdisable();
- }
- uchar readbyte(uint addr)
- {
- uchar ch;
- ispcontr=0x83;ispcmd=0x01;ispaddrh=addr/256;ispaddrl=addr%256;
- isptrig=0x46;isptrig=0xb9;_nop_();ch=ispdata;
- iapdisable();
- return ch;
- }
- void writebyte(uint addr,uchar ch)
- {
- ispcontr=0x83;ispcmd=0x02;
- ispaddrh=addr/256;ispaddrl=addr%256;
- ispdata=ch;
- isptrig=0x46;isptrig=0xb9;_nop_();
- iapdisable();
- }
- savedata()
- {
- uint addr=0x2000;
- erase(addr);
- writebyte(addr,123);
- addr++;writebyte(addr,wendu_h);
- addr++;writebyte(addr,wendu_l);
- }
- void getdata(void)
- {
- uchar label=0;
- uint addr=0x2000;
- label=readbyte(addr);
- if(label==123)
- {
- addr++;wendu_h=readbyte(addr);
- addr++;wendu_l=readbyte(addr);
- }
- else
- savedata();
- }
- ReadDat()
- {
- unsigned char i,t;
- clk1=0;
- pl=0;
- pl=1;
- for(i=0;i<8;i++)
- {
- t<<=1; //165在PL有一個(gè)脈沖后就輸出0位數(shù)據(jù)
- t|=(bit)Do;
- clk1=1; // 鎖存時(shí)鐘=1時(shí)74HC165才允許讀數(shù)據(jù)
- clk1=0;
- }
- P0=t;
- }
- dsout(unsigned char j)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- dat=j&0x80; //高位在前
- clk0=1;
- clk0=0;
- j<<=1;
- }
- lat=1;
- lat=0; //鎖存
- }
- void delay(uint z)
- {
- uint x;
- for(x=z;x>0;x--);
- }
- ds1ms()
- {
- unsigned int d;
- for(d=0;d<250;d++); //大約1ms@12M
- }
- //------送出循環(huán)-------------------------
- //----74HC595顯示程序--------------------
- display(unsigned char sjqw,sjbw,sjsw,sjgw)
- {
- dsout(tab[sjgw]);gw=0;ds1ms();gw=1; //查表得到數(shù)據(jù)段碼送顯示
- dsout(tab[sjsw]);sw=0;ds1ms();sw=1;
- dsout(tab[sjbw]);bw=0;ds1ms();bw=1;
- dsout(tab[sjqw]);qw=0;ds1ms();qw=1;
-
- }
- Init_DS18B20(void)
- {
- unsigned char x=0;
- DQ = 1; //DQ復(fù)位
- delay(12); //稍做延時(shí)
- DQ = 0; //單片機(jī)將DQ拉低
- delay(150); //精確延時(shí) 大于 480us
- DQ = 1; //拉高總線
- delay(60);
- x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
- delay(30);
- }
- //讀一個(gè)字節(jié)
- uchar ReadOneChar(void)
- {
- unsigned char i=0;
- unsigned char dat = 0;
- for (i=8;i>0;i--)
- {
- DQ = 0; // 給脈沖信號(hào)
- dat>>=1;
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- DQ = 1; // 給脈沖信號(hào)
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- if(DQ)
- dat|=0x80;
- delay(12);
- }
- return(dat);
- }
- //寫一個(gè)字節(jié)
- WriteOneChar(unsigned char dat)
- {
- unsigned char i=0;
- for (i=8; i>0; i--)
- {
- DQ = 0;
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- DQ = dat&0x01;
- delay(8);
- DQ = 1;
- dat>>=1;
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- }
- adt(uchar x)
- {
- Init_DS18B20();
- WriteOneChar(0xCC); // 跳過讀序號(hào)列號(hào)的操作
- WriteOneChar(x); // 啟動(dòng)溫度轉(zhuǎn)換
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- //讀取溫度
- unsigned char a=0;
- unsigned char b=0;
- zhuand()
- {
- disbuf[0]=0;
- disbuf[1]=t/100;
- disbuf[2]=(t%100)/10;
- disbuf[3]=t%10;
- }
- void zhuan() //溫度轉(zhuǎn)換將單片機(jī)里二進(jìn)制溫度轉(zhuǎn)換成十進(jìn)制
- {
- uint tt=0;
- t=b;//將溫度高八位傳入t
- t<<=8;
- t=t|a;//將溫度低八位傳入t
- if (b>0x07)
- {
- t=~t;tt=((t+1)*5)/8;t= tt; //放大10倍輸出并四舍五入
- if(t>=99) t=99;
- zhuand();
- disbuf[0]=14;
-
- }
- else{
- tt=t;tt=(t*5)/8;t= tt; //放大10倍輸出并四舍五入
- if(t>=999) t=999;
- if(t>=wendu_h) led1=0;
- if(t<=wendu_l) led2=0;
- zhuand();
- }
- }
- scankey1()
- {
- ReadDat();
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- k1++;
- while(!key1)
- {
- ReadDat();
- }
- }
- }
- }
- adjust()
- { scankey1();
- while(k1!=0)
- { if(k1==1)
- {
- ReadDat();
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- wendu_h++;
- if(wendu_h>=999) wendu_h=999;
- savedata();
- while(!key2)
- {
- ReadDat();
- }
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- wendu_h--;
- if(wendu_h<=0) wendu_h=0;
- savedata();
- while(!key3)
- {
- ReadDat();
- }
- }
- }
- getdata();
- t=wendu_h;
- zhuand();
- disbuf[0]=12;
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
下載:
溫控.zip
(2.11 MB, 下載次數(shù): 378)
2017-4-22 10:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
SHT11.pdf
(840.7 KB, 下載次數(shù): 134)
2017-4-22 10:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
200903121236838905.doc
(42.5 KB, 下載次數(shù): 102)
2017-4-22 10:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
2007sht1.pdf
(621.83 KB, 下載次數(shù): 101)
2017-4-22 10:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|