資源簡介
這是基于STC12C5A60S單片機(jī)的一個(gè)成功測試程序 應(yīng)用于1602 和DHT11溫濕度 初學(xué)者使用

代碼片段和文件信息
#include
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?RS=P2^2;
sbit?RW=P2^1;
sbit?EN=P2^0;
sbit?da=P2^3;
uchar?code?z1[]=“shidu:“;
uchar?code?z2[]=“wendu:“;
uchar?b0b1b2b3b4b5b6b7b8b9;
uchar?M0[5]={“0““0““0““0“};
uchar?M[5]={“0““0““0““0“};
uchar?S[2]={“0“}RJYD1; //J計(jì)時(shí)R判斷1的正確與否D1數(shù)據(jù)的暫時(shí)存儲(chǔ)空間???D1必須全局變量
void?delayms(int?a)
{
int?ij;
for(i=0;i {
for(j=0;j<122;j++);
} //1.001ms
}
void?delay5us()
{
uchar?b;
b--;
b--;
b--;
b--;
b--; //5.00um
}
void?delays(uint?o)
{
uint?ij;
for(i=0;i for(j=0;j<800;j++);
}
void?wd(uchar?d) //寫數(shù)據(jù)
{
delayms(1);
RS=1;
RW=0;
EN=0;
P0=d;
delayms(1);
EN=1;
delayms(1);
EN=0;
}
void?wc(uchar?c) //寫指令
{
delayms(1);
RS=0;
RW=0;
EN=0;
P0=c;
delayms(1);
EN=1;
delayms(1);
EN=0;
}
void?lcdr()
{
delayms(1);
wc(0x38);
delayms(1);
wc(0x06); //每寫一字符指針移動(dòng)
delayms(1);
wc(0x0c); //開顯示無光標(biāo)
}
void?lcd1()
{
uint?i;
wc(0x80); //第一行最左邊
delayms(1);
for(i=0;i<6;i++)
{
wd(z1[i]);
delayms(1);
}
wc(0x80+0x40);
for(i=0;i<6;i++)
{
wd(z2[i]);
delayms(1);
}
}
void?D() //單次取值 D1是數(shù)據(jù)的存儲(chǔ)空間
{
uint?i;
????for(i=0;i<8;i++) ???
{
??? ?????J=2;?
??? ??? ?while((!da)&&J++); //2.043ms?P10是1的時(shí)候出來
?????delay5us();
?delay5us();
?delay5us();
?delay5us();
?delay5us(); //45us(28-70)
?R=0;
????? ?if(da) //如果低電平(50微秒低電平數(shù)據(jù)的標(biāo)志)
R=1;
?D1<<=1;
??? ?????D1|=R;? ????
?J=2;
? ?while((da)&&J++);
????
} ???
}
void?CD() //傳遞 信號的主控制
{
delays(250);
da=0; //開始信號
delayms(19); //大于18ms??18.925ms
da=1;
J=2; //開始信號結(jié)束
while((da)&&J++); //主機(jī)拉高20us結(jié)束
if(!da) //有低電平響應(yīng)可讀取DHT11的響應(yīng)信號p10=0出
{
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us(); //90us
J=2;
? while((da)&&J++); //低電平出
D();
M[0]=D1;
D();
M[1]=D1;
D();
M[2]=D1;
D();
M[3]=D1;
D();
M[4]=D1;
da=1; //注意DHT11溫度?濕度的小數(shù)部分為0(來自官方PDF)
}
Y=M0[0]+M0[1]+M0[2]+M0[3];
if(Y=M0[4])
{
M[0]=M0[0];
M[1]=M0[1];
M[2]=M0[2];
M[3]=M0[3];
}
}
void?danzifu(int?k)??????//轉(zhuǎn)換成單字符
{
S[0]=M[k]/10;
S[1]=M[k]%10;
}
void?lcd2() //顯示溫度數(shù)值
{
int?i;
wc(0x80+7); //第一行
delayms(1);
danzifu(0);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(‘%‘);
wc(0x80+0x40+7);//第二行
danzifu(2);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(0xdf);
wd(‘c‘);
}
void?main()
{
CLK_DIV=0x02;
lcdr();
lcd1();
while(1)
{
CD();
lcd2();
}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-03-18?13:10??DHT11溫濕度液晶1602顯示\
?????文件????????6376??2009-05-07?14:37??DHT11溫濕度液晶1602顯示\STARTUP.A51
?????文件???????14064??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\STARTUP.LST
?????文件?????????749??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\STARTUP.OBJ
?????文件???????19736??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text
?????文件????????2891??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.c
?????文件????????2292??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.hex
?????文件??????????41??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.lnp
?????文件????????8654??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.LST
?????文件???????15685??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.M51
?????文件???????21039??2012-03-18?13:04??DHT11溫濕度液晶1602顯示\text.OBJ
?????文件?????????567??2012-03-18?13:10??DHT11溫濕度液晶1602顯示\text.plg
?????文件???????57112??2012-03-18?13:10??DHT11溫濕度液晶1602顯示\text.uvopt
?????文件???????13395??2012-03-17?09:38??DHT11溫濕度液晶1602顯示\text.uvproj
?????文件???????57762??2012-03-17?09:38??DHT11溫濕度液晶1602顯示\text_uvopt.bak
?????文件???????????0??2012-03-17?08:37??DHT11溫濕度液晶1602顯示\text_uvproj.bak
?????文件????????2885??2012-03-17?08:49??DHT11溫濕度液晶1602顯示\新建文本文檔.txt
- 上一篇:安徽縣級shp文件2013
- 下一篇:xUtils實(shí)用工具包
評論
共有 條評論