亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機溫濕度傳感器程序 LCD12864顯示
[打印本頁]
作者:
楠傷加南
時間:
2021-5-19 15:38
標題:
單片機溫濕度傳感器程序 LCD12864顯示
#include<REG52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DATA=P1^0;//dht11data端接單片機的P1^0口//
#define LCD_data P0 //數據口
sbit LCD_RS = P3^5; //寄存器選擇輸入
sbit LCD_RW = P3^6; //液晶讀/寫控制
sbit LCD_EN = P3^4; //液晶使能控制
sbit LCD_PSB = P3^7; //串/并方式控制
/*定義數字ascii編碼*/
unsigned char mun_char_table[]={"0123456789"};
uchar code dis1[] = {"溫度:"};
uchar code dis2[] = {"濕度:"};
uchar RHL,RHH,CL,CH;
uint m,n;
//很正要的延時
void delayus(uchar n)
{
while(n--);
}
//很正要的延時
void Delay10ms(void)//12M晶振下延時
{
uchar a,b;
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
//粗延時
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=614;y>0;y--);
}
//起始
void Start(void)
{
DATA=1;
delay_ms(10);
DATA=0;
Delay10ms(); //主機把總線拉低必須大于
//18msDHT11能檢測到起始信號
Delay10ms();
Delay10ms();
DATA=1;
delay_ms(1);
}
uint integer(uchar x)
{
uchar h,l;
uint n;
l=x&0x0f;
h=(x&0xf0)>>4;
n=h*16+l;
return n;
}
uchar readdht11_byte()
{
uchar i,dht;
for(i=8;i>0;i--)
{
dht=dht<<1;
while(!DATA); //等待50ms
delayus(30); //延時29us
if(DATA==1)
{
dht=dht|0x01;
delayus(60);
}
else
delayus(30); //延時29us
}
return(dht);
}
void read_dht11()
{
Start();
DATA=0; //數據線拉低>18ms
delay_ms(20); //延時>18ms
DATA=1; //拉高等待
delayus(30); //延時29us
DATA=1;
if(!DATA)
{
while(!DATA);//
while(DATA);
RHH=readdht11_byte();//濕度整數數據
RHL=readdht11_byte();//濕度小數數據
CH=readdht11_byte();//溫度整數數據
CL=readdht11_byte();//溫度小數數據
}
}
//////////////以下是LCD12864驅動程序////////////////
/*******************************************************************/
/* */
/*檢查LCD忙狀態 */
/*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。 */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
P0=0X00; //關掉數碼管的信號。阻止數碼管受到P0口信號的影響
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delay_ms(1);
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************/
/* */
/*寫指令數據到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delay_ms(1);
LCD_EN = 1;
delay_ms(1);
LCD_EN = 0;
}
/*******************************************************************/
/* */
/*寫顯示數據到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數據。 */
/* */
/*******************************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delay_ms(1);
LCD_EN = 1;
delay_ms(1);
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* LCD初始化設定 */
/* */
/*******************************************************************/
void lcd_init()
{
LCD_PSB = 1; //并口方式
lcd_wcmd(0x34); //擴充指令操作
delay_ms(5);
lcd_wcmd(0x30); //基本指令操作
delay_ms(5);
lcd_wcmd(0x0C); //顯示開,關光標
delay_ms(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay_ms(5);
}
/*********************************************************/
/* */
/* 設定顯示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //顯示地址
}
//////////////////以上是LCD12864驅動程序////////////////
void main()//主函數模塊//
{
uchar i=0;
lcd_init();
delay_ms(1500);
lcd_pos(0,0); //設置顯示位置為第一行的第1個字符
i = 0;
while(dis1[i] != '\0')
{ //顯示字符
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(1,0); //設置顯示位置為第一行的第1個字符
i = 0;
while(dis2[i] != '\0')
{ //顯示字符
lcd_wdat(dis2[i]);
i++;
}
while(1)
{
delay_ms(1500);
read_dht11();
m=integer(RHH);
delay_ms(1);
n=integer(CH);
lcd_pos(0,3);
lcd_wdat(mun_char_table[n/10]);
lcd_wdat(mun_char_table[n%10]);
lcd_pos(1,3);
lcd_wdat(mun_char_table[m/10]);
lcd_wdat(mun_char_table[m%10]);
}
}
復制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1