欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
DHT11溫濕度檢測+時鐘 51單片機源碼
[打印本頁]
作者:
uncle_drew
時間:
2017-3-23 11:28
標題:
DHT11溫濕度檢測+時鐘 51單片機源碼
幫別人做了個畢設,順便把資料分享一下把,可以實現DHT11溫濕度檢測以及電子時鐘在LCD1602上的顯示,時鐘可以調整分,時,日,月四項,有需要的可以自己加入年的調整
0.png
(43.44 KB, 下載次數: 101)
下載附件
2017-3-23 19:16 上傳
#include<reg52.h>
#include<intrins.h> //包含_nop_()函數定義的頭文件
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL;
uchar data_byte;
uchar RH,RL,TH,TL;
uchar deda=0;
uchar hour=0,min=0,sec=0,date=1,month=3,year=17;
//uchar string[]="WeiHongmouzhizuo";
uchar string2[]="0123456789";//要顯示的字符串
sbit DHT11=P1^0; //DHT11數據位
sbit RS=P2^5; //寄存器選擇位
sbit RW=P2^6; //讀寫選擇位
sbit E=P2^7; //使能信號位
sbit BF=P0^7; //忙碌標志位
sbit k4=P2^4; //調整時間
sbit k3=P2^3;
sbit k2=P2^2;
sbit k1=P2^1;
//const uchar string1[ ]={" mazirong "};
//const uchar string2[ ]={"TEL:13297961386 "};
/*****************************************************
函數功能:判斷液晶模塊的忙碌狀態
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
//*********************延時1ms
void delay(uchar z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
//*********************延時10us
void delay1()
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
//******************走時函數
void init_timer()
{
TMOD=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TR0=1;
}
////用延時函數代替檢測STA7狀態的函數
void check()
{
uint a;
for(a=0;a<1200;a++);
}
//**************各月份天數
/*void inter_month()
{
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:if(date==32)
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
};
break;//若是大月,則有31天
case4:
case6:
case9:
case11:if(date==31)
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
};
break;//若是小月,則有30天
case2:if(year%4==0)
{
if(date==30)
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}//閏年二月有29天
else
if(date==29)
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
};//平年二月28天
break;
default:break;
}
}
*/
//*******************時間、日期走時單元
void conv()
{
if(sec==60)
{
min++;
sec=0;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
date++;
//inter_month();
if(month==13)
{
year++;
month=1;
if(year==100)year=0;
}
}
}
}
}
//*********************50ms定時中斷
void T0_srv(void)interrupt 1
{
TH0=-(50000/256);
TL0=-(50000%256);
deda++;
if(deda==20)
{
sec++;
deda=0;
conv();
}
}
//****************時間調整函數
void set_time()
{
if(!k4)//min
{
delay(20);
if(!k4)
{
min++;
if(min==61)
{
min=0;
}
}
}
if(!k3)//hour
{
delay(20);
if(!k3)
{
hour++;
if(hour==25)
{
hour=0;
}
}
}
if(!k2)//date
{
delay(20);
if(!k2)
{
date++;
if(date==32)
{
date=1;
}
}
}
if(!k1)//month
{
delay(20);
if(!k1)
{
month++;
if(month==13)
{
month=1;
}
}
}
}
//測試忙碌狀態
uchar lcd_bz()
{
bit result;
RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態
RW=1;
E=1; //E=1,才允許讀寫
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬件反應時間
result=BF; //將忙碌標志電平賦給result
E=0;
return result;
}
//********************寫指令
void write_cmd(uchar cmd)
{
check();
//while(lcd_bz()==1);
RS=0; //根據規定,RS和R/W同時為低電平時,可以寫入指令
RW=0;
E=0; //E置低電平(寫指令時,E為高脈沖)
_nop_();
_nop_(); // 就是讓E從0到1發生正跳變,所以應先置"0"
P0=cmd; //將數據送入P0口,即寫入指令或地址
_nop_();
_nop_();
_nop_();
_nop_();
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬件反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
//*********************寫地址
void write_addr(uchar addr)
{
write_cmd(addr|0x80);
}
//*********************寫數據
void write_byte(uchar dat)
{
check();
//while(lcd_bz()==1);
RS=1; //RS為高電平,RW為低電平時,可以寫入數據
RW=0;
E=0; //(寫指令時,E為高脈沖)
// 就是讓E從0到1發生正跳變,所以應先置"0"
_nop_();
_nop_();
P0=dat; //將數據送入P0口,即將數據寫入液晶模塊
_nop_();
_nop_();
_nop_();
_nop_();
E=1; //E置高電平
_nop_();
_nop_();
…………余下代碼請下載附件…………
復制代碼
下載:
溫度顯示.rar
(2.75 KB, 下載次數: 61)
2017-3-23 11:27 上傳
點擊文件名下載附件
c代碼
下載積分: 黑幣 -5
作者:
smile123
時間:
2017-5-13 16:07
下載顯示都是00怎么回事啊
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1