需要的拿去
單片機源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- typedef bit BOOL;
- sbit io = P2^0;
- sbit rs = P2^6;
- sbit rw = P2^5;
- sbit ep = P2^7;
- uchar data_byte;
- uchar RH,RL,TH,TL;
- /********延時模塊***********/
- void delay(uchar ms)
- { // 延時子程序
- uchar i;
- while(ms--)
- {
- for(i = 0;i<250;i++);
- }
- }
- void delay1()//延時10us
- {
- uchar i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- void longdelay(uchar s) //長延時
- {
- while(s--)
- {
- delay(60);
- }
- }
- BOOL lcd_bz()//測試LCD忙碌狀態
- {
- BOOL result;
- rs = 0;
- rw = 1;
- ep = 1;
- result = (BOOL)(P0 & 0x80);
- ep = 0;
- return result;
- }
- void write_cmd(uchar cmd)// 寫指令
- {
- while(lcd_bz());
- rs = 0;
- rw = 0;
- ep = 0;
- P0 = cmd;
- ep = 1;
- ep = 0;
- }
- void write_addr(uchar addr)//寫地址
- {
- write_cmd(addr|0x80);
- }
- void write_byte(uchar dat)//寫字節
- {
- while(lcd_bz());
- rs = 1;
- rw = 0;
- ep = 0;
- P0 = dat;
- ep = 1;
- ep = 0;
- }
- void lcd_init()// 初始化
- {
- write_cmd(0x38);
- delay(1);
- write_cmd(0x08);
- delay(1);
- write_cmd(0x01);
- delay(1);
- write_cmd(0x06);
- delay(1);
- write_cmd(0x0c);
- delay(1);
- }
- void display(uchar addr, uchar q)//在某一地址上顯示一字節
- {
- delay(10);
- write_addr(addr);
- write_byte(q);
- longdelay(2);
- }
- void start()//開始信號
- {
- io=1;
- delay1();
- io=0;
- delay(20);//>18ms
- io=1;
- delay1();//20-40us
- delay1();
- delay1();
- delay1();
- delay1();
- }
- uchar receive_byte()//接收一個字節
- {
- uchar i,temp,count;
- for(i=0;i<8;i++)
- {
- count=2;
- while((!io)&&count++)//等待50us低電平結束
- temp=0;
- delay1();
- delay1();
- delay1();
- delay1();
- if(io==1)
- temp=1;
- count=2;
- while((io)&&count++);
- if(count==1)break;
- data_byte<<=1;
- data_byte|=temp;
- }
- return data_byte;
- }
- void receive()//接收數據
- {
- uchar T_H,T_L,R_H,R_L,check,num_check;
- uchar count;
- start();//開始信號
- io=1;
- if(!io)//讀取DHT11響應信號
- {
- count=2;
- while((!io)&&count++);//DHT11高電平80us是否結束
- count=2;
- while((io)&&count++);
- R_H=receive_byte();
- R_L=receive_byte();
- T_H=receive_byte();
- T_L=receive_byte();
- check=receive_byte();
- io=0;//拉低延時50us
- delay1();
- delay1();
- delay1();
- delay1();
- delay1();
- io=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;
- check=num_check;
- }
- }
- }
- void main()
- {
- lcd_init();
- delay(10);
- while(1)
- {
- receive();
- delay(100);
- display(0x00,'R');
- display(0x01,':');
- display(0x02,RH/10+0x30);
- display(0x03,RH%10+0x30);
- display(0x04,'%');
- display(0x40,'T');
- display(0x41,':');
- display(0x42,TH/10+0x30);
- display(0x43,TH%10+0x30);
- display(0x44,0xdf);
- display(0x45,0x43);
- }
- }
復制代碼
所有資料51hei提供下載:
程序.rar
(29.75 KB, 下載次數: 344)
2018-3-15 19:33 上傳
點擊文件名下載附件
|