|
主函數//////////
#include"reg51.h"
#include"intrins.h"
#include"lcd1602.h"
#define u8 unsigned char
#define u16 unsigned int
sbit Da=P1^3;
sbit led0=P1^4;
//sbit led1=P1^5;
//bit flag=0;
//u8 data_byte;
//u8 RH,RL,TH,TL;
u8 Data[5];
//u8 Dat;
void delay10us(u8 z)
{
u8 i;
for(i=z;i>0;i--)
{_nop_();}
}
//void delay10us(u8 t)
//{
// while(--t);
//}
//void delayms0(u8 t)
//{
// while(t--)
// {
// //大致延時1mS
// delay10us(245);
// delay10us(245);
// }
//}
void start()
{
Da=1;
delay10us(10);
Da=0;
delayms(30);
Da=1;
delay10us(40);
}
void receive()
{
u8 i,j;
//u8 tem;
u8 Dat;
start();
while(Da);//等待響應
while(!Da);//等待響應結束,拉高準備傳輸數據
while(Da);//開始傳送
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
while(!Da);//檢測0或1
delay10us(40);
//tem=0;
if(Da==1)
{Dat<<=1;
Dat|=0x01;
}
else
{Dat<<=1;
Dat&=0xfe;}
// tem=1;
while(Da);
// Dat<<=1;
// Dat|=tem;
//
}
Data=Dat;
Dat=0;
}
Da=1;
}
u8 jiaoyan()
{
u16 a=0;
u8 i;
for(i=0;i<4;i++)
{a+=Data;}
if((u8)a!=Data[4])
return 0;
else return 1;
}
/**********************接收一個字節**********************/
//u8 receive_byte()
//{
// u8 i,temp,count;
// for(i=0;i<8;i++)
// {
// count=2;
// while((!Da)&&count++)
// temp=0;
// delay10us(40); //關鍵時間:10~23之間
// if(Da==1)temp=1;
// count=2;
// while((Da)&&count++);
// if(count==1)break;
// data_byte<<=1;
// data_byte|=temp;
// }
// return data_byte;
//}
//void receive()
//{
// u8 T_H,T_L,R_H,R_L,check,num_check;
// u8 count;
// start(); //開始信號
//
// while(Da);
// count=2;
// while((!Da)&&count++); //DHT11高電平80us是否結束
// count=2;
// while((Da)&&count++);
// R_H=receive_byte();
// R_L=receive_byte();
// T_H=receive_byte();
// T_L=receive_byte();
// check=receive_byte();
//
// Da=0;
// delayms(1); //拉低延時
// Da=1;
// num_check=R_H+R_L+T_H+T_L;
//
// if(num_check=check)
// {
// RH=R_H;
// RL=R_L;
// TH=T_H;
// TL=T_L;
//
// flag=0;
// led1=0;
// delayms(500);
// led1=1;
// }
// else
// flag=1;
//
//}
void main()
{
u8 i;
lcd_init();
lcd_initdata();
while(1)
{
receive();
i=jiaoyan();
if(i!=0)
{
// if(flag==0)
// {
// lcd_conv(RH,TH);
lcd_conv(Data[0],Data[2]);
lcd_dis0();
lcd_dis1();
led0=0;
delayms(500);
led0=1;
}
else
lcd_dis2();
delayms(2000);
}
}
lcd1602 顯示函數///////////
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P1^2;
sbit lcdrw=P1^1;
sbit lcden=P1^0;
uchar code tab0[]={"shidu:"};
uchar code tab1[]={"wendu:"};
uchar code tab2[]={"erroy"};
uchar dis_buf[4];
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
bit lcd_busy()
{
bit result;
lcdrs=0;
lcdrw=1;
lcden=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P2&0x80);
lcden=0;
return(result);
}
void write_com(uint com)
{
while(lcd_busy());
lcdrs=0;
lcdrw=0;
P2=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uint date)
{
while(lcd_busy());
lcdrs=1;
lcdrw=0;
P2=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void lcd_clr()
{
write_com(0x01);
delayms(5);
}
void lcd_init()
{
write_com(0x38);
delayms(5);
write_com(0x38);
delayms(5);
write_com(0x38);
delayms(5);
write_com(0x0c);
delayms(5);
write_com(0x06);
delayms(5);
write_com(0x01);
}
void lcd_initdata()
{
uchar i;
write_com(0x00|0x80);
delayms(2);
i=0;
while(tab0!='\0')
{
write_data(tab0);
delayms(2);
i++;
}
delayms(10);
write_com(0x40|0x80);
delayms(2);
i=0;
while(tab1!='\0')
{
write_data(tab1);
delayms(2);
i++;
}
delayms(10);
}
void lcd_conv(uchar in0,in1)
{
dis_buf[0]=in0/10+0x30;
dis_buf[1]=in0%10+0x30;
dis_buf[2]=in1/10+0x30;
dis_buf[3]=in1%10+0x30;
}
void lcd_dis0()
{
write_com(0x06|0x80);
delayms(2);
write_data(dis_buf[0]);
delayms(2);
write_data(dis_buf[1]);
delayms(2);
write_data(0x25);
delayms(2);
}
void lcd_dis1()
{
write_com(0x46|0x80);
delayms(2);
write_data(dis_buf[2]);
delayms(2);
write_data(dis_buf[3]);
delayms(2);
write_data(0xdf);
delayms(2);
write_data('C');
delayms(2);
}
void lcd_dis2()
{
uchar i;
write_com(0x06|0x80);
delayms(2);
i=0;
while(tab2!='\0')
{
write_data(tab2);
delayms(2);
i++;
}
}
|
-
-
DHT11.rar
2015-11-7 09:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
47 KB, 下載次數: 133, 下載積分: 黑幣 -5
評分
-
查看全部評分
|