欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機使用DHT11傳感器在12864顯示溫度代碼
[打印本頁]
作者:
gaoxin@
時間:
2019-7-27 10:46
標題:
基于51單片機使用DHT11傳感器在12864顯示溫度代碼
IMG_20190727_104416.jpg
(690.57 KB, 下載次數: 47)
下載附件
2019-7-27 10:45 上傳
#include "reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
//顯示
uchar code wen[];
uchar code du[];
uchar code mao_hao[];
uchar code num0[];
uchar code num1[];
uchar code num2[];
uchar code num3[];
uchar code num4[];
uchar code num5[];
uchar code num6[];
uchar code num7[];
uchar code num8[];
uchar code num9[];
/*uchar code numA[];
uchar code numB[];
uchar code numC[];
uchar code numD[];
uchar code numE[];
uchar code numF[];*/
uchar code shi[];
uchar code du[];
sbit cs=P1^1;
sbit reset=P1^0;
sbit rs=P3^0;
sbit sclk=P3^1;
sbit sid=P3^2;
// 延時
void delay(ulong i)
{
ulong j;
uint k;
for(j=0;j<i;j++)
for(k=0;k<110;k++);
}
//數據命令
void pen(uchar data1)
{
uint i;
cs=0;
rs=1;
for(i=0;i<8;i++)
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1<<=1;
}
cs=1;
}
//指令命令
void tan(uchar data1)
{
uint i;
cs=0;
rs=0;
for(i=0;i<8;i++)
{
sclk=0;
if(data1&0x80) sid=1;
else sid=0;
sclk=1;
data1<<=1;
}
cs=1;
}
//調用漢字
void dis_1616(uchar page,uchar lie,uchar *dp)
{
uchar i;
uint j;
for(j=0;j<2;j++)
{
tan(0xb0+page+j);//設計頁地址
tan(0x10+((lie>>4)&0x0f)); //設計列高四位
tan(0x00+(lie&0x0f)); //設計列低四位
for(i=0;i<16;i++)
{
pen(*dp);
dp++;
}
}
}
//調用數字
void dis_816(uchar page,uchar lie,uchar *dp)
{
uchar i;
uint j;
for(j=0;j<2;j++)
{
tan(0xb0+page+j);//設計頁地址
tan(0x10+((lie>>4)&0x0f)); //設計列高四位
tan(0x00+(lie&0x0f)); //設計列低四位
for(i=0;i<8;i++)
{
pen(*dp);
dp++;
}
}
}
//顯示初始化
void cshua()
{
reset=0;
delay(100);
reset=1;
delay(100);
tan(0xe2); //軟復位
delay(10);
tan(0x2f); //打開升壓VC,VS,VR
delay(10);
tan(0x23); //粗調對比度,0x20~0x27
tan(0x81); //與下一條指令配套
tan(0x20); //細調對比度,
tan(0xa2); //偏壓設計,1/9
tan(0xaf); //打開顯示
}
//顯示清屏
void clear()
{
uchar i;
uint j;
for(j=0;j<8;j++)
{
tan(0xb0+j);//設計頁地址
tan(0x10); //設計列高四位
tan(0x00); //設計列低四位
for(i=0;i<128;i++)
{
pen(0x00);
}
}
}
//調用圖像
void clear1(uchar *dp)
{
uchar i;
uint j;
for(j=0;j<8;j++)
{
tan(0xb0+j);//設計頁地址
tan(0x10); //設計列高四位
tan(0x00); //設計列低四位
for(i=0;i<128;i++)
{
pen(*dp);
dp++;
}
}
}
sbit P2_0=P2^0;
uchar U8FLAG; //判斷是否發送對應時間的輔助變量
uchar U8count,U8temp;
uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
uchar U8comdata;
uchar count, count_r=0;
uchar str[5]={"RS232"};
uchar outdata[5]; //定義發送的字節數
uchar indata[5]; //定義接收的字節數
//發送到串口
SendData(uchar *dp)
{
uchar i;
for(i=0;i<5;i++)
{
outdata[i]=dp[i];
}
count = 1;
SBUF=outdata[0]; //為了進入發送程序
}
/*SendData(uchar *a)
{
outdata[0] = a[0];
outdata[1] = a[1];
outdata[2] = a[2];
outdata[3] = a[3];
outdata[4] = a[4];
count = 1;
SBUF=outdata[0];
} */
//延時
void Delay1(uint j)
{
uchar i;
uchar x;
for(x=j;j>0;j--)
{
for(i=0;i<27;i++);
}
}
//延時10us
void Delay_10us(void)
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
//解碼數據
void COM()
{
uchar i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!P2_0)&&(U8FLAG++)); //判斷是否發送完50us的低電平
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0) U8temp=1; //判斷數據是0還是1
U8FLAG=2;
while((P2_0)&&(U8FLAG++));
if(U8FLAG==1) break; //超時跳出for循環
U8comdata<<=1;
U8comdata|=U8temp;
}
}
//濕溫度讀取程序
void RH()
{
//主機拉低18us
P2_0=0;
Delay1(180);
//主機拉高20~40us
P2_0=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主機設為輸入 電平拉高
P2_0=1;
//判斷是否為低電平,如果不為低電平則跳出
if(!P2_0)
{
U8FLAG=2;
while((!P2_0)&&(U8FLAG++)); //判斷是否發送完80us低電平
U8FLAG=2;
while((P2_0)&&(U8FLAG++)); //判斷是否發送完80us高電平
//數據接收狀態
COM();
U8RH_data_H_temp=U8comdata; //----溫度高8位
COM();
U8RH_data_L_temp=U8comdata; //----溫度低8位
COM();
U8T_data_H_temp=U8comdata; //----濕度高8位
COM();
U8T_data_L_temp=U8comdata; //----濕度低8位
COM();
U8checkdata_temp=U8comdata; //----校驗 8位
P2_0=1; //數據校驗
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp; //----溫度高8位== U8T_data_H------
U8RH_data_L=U8RH_data_L_temp; //----溫度低8位== U8T_data_L------
U8T_data_H=U8T_data_H_temp; //----濕度高8位== U8RH_data_H-----
U8T_data_L=U8T_data_L_temp; //----濕度低8位== U8RH_data_L-----
U8checkdata=U8checkdata_temp; //----校驗 8位 == U8checkdata-----
}
}
}
void init1()
{
TMOD=0X20;
TH1=253;
TL1=253; //波特率9600
TR1=1;
TI=0;
RI=0;
SM0=0;
SM1=1; //選擇串口工作方式
EA=1;
ES=1; //串口中斷允許位,用于串口收發中斷
REN=1; //允許串口接收
}
void main()
{
uchar i,j;
init1();
SendData(str); //發送到串口
Delay1(1); //延時100US(12M晶振)
while(1)
{
//調用溫濕度讀取子程序
RH();
str[0]=U8RH_data_H;
str[1]=U8RH_data_L;
str[2]=U8T_data_H;
str[3]=U8T_data_L;
str[4]=U8checkdata;
SendData(str); //發送到串口
Delay1(20000); //讀取模塊數據周期不易小于 2S
ES=0;
cshua();
clear();
tan(0xc8);
tan(0xa0);
i=U8RH_data_H;
j=i*0.5;
dis_1616(0,0,wen);
delay(10);
dis_1616(0,16,du);
delay(10);
dis_1616(0,32,mao_hao);
delay(10);
switch(j/10)
{
case(0) :dis_816(0,40,num0);break;
case(1) :dis_816(0,40,num1);break;
case(2) :dis_816(0,40,num2);break;
case(3) :dis_816(0,40,num3);break;
case(4) :dis_816(0,40,num4);break;
case(5) :dis_816(0,40,num5);break;
case(6) :dis_816(0,40,num6);break;
case(7) :dis_816(0,40,num7);break;
case(8) :dis_816(0,40,num8);break;
case(9) :dis_816(0,40,num9);break;
}
delay(10);
switch(j%10)
{
case(0) :dis_816(0,48,num0);break;
case(1) :dis_816(0,48,num1);break;
case(2) :dis_816(0,48,num2);break;
case(3) :dis_816(0,48,num3);break;
case(4) :dis_816(0,48,num4);break;
case(5) :dis_816(0,48,num5);break;
case(6) :dis_816(0,48,num6);break;
case(7) :dis_816(0,48,num7);break;
case(8) :dis_816(0,48,num8);break;
case(9) :dis_816(0,48,num9);break;
}
delay(10);
}
}
void RSINTR() interrupt 4 using 2
{
/* uchar InPut3;
if(TI==1) //發送中斷
{
TI=0;
if(count!=5) //發送完5位數據
{
SBUF= outdata[count];
count++;
}
}
if(RI==1) //接收中斷
{
InPut3=SBUF;
indata[count_r]=InPut3;
count_r++;
RI=0;
if (count_r==5)//接收完4位數據
{
//數據接收完畢處理。
count_r=0;
str[0]=indata[0];
str[1]=indata[1];
str[2]=indata[2];
str[3]=indata[3];
str[4]=indata[4];
P0=0; //
}
} */
uchar input; //暫時存放接收數據
uchar i;
if(TI==1) //發送中斷
{
TI=0;
if(count!=5)
{
SBUF=outdata[count];
count++;
}
}
if(RI==1) //接收中斷
{
input=SBUF;
indata[count_r]=input;
count_r++;
if(count_r==5)
{
count=0;
for(i=0;i<5;i++)
{
str[i]=indata[i];
}
}
}
}
uchar code wen[]={/*-- 文字: 溫 --*/
/*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
};
uchar code du[]={
/*-- 文字: 度 --*/
/*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
};
uchar code mao_hao[]={ /*-- 文字: : --*/
/*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar code num0[]={ /*-- 文字: 0 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00 };
uchar code num1[]={ /*-- 文字: 1 --*//*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00 };
uchar code num2[]={ /*-- 文字: 2 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00 };
uchar code num3[]={ /*-- 文字: 3 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00 };
uchar code num4[]={ /*-- 文字: 4 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00 };
uchar code num5[]={ /*-- 文字: 5 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00 };
uchar code num6[]={ /*-- 文字: 6 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00 };
uchar code num7[]={ /*-- 文字: 7 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00 };
uchar code num8[]={ /*-- 文字: 8 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00 };
uchar code num9[]={ /*-- 文字: 9 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00 };
uchar code shi[]={
/*-- 文字: 濕 --*/
/*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00,
};
/*uchar code numA[]={0xE0,0xF0,0x98,0x8C, 0x98,0xF0,0xE0,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00, //-A-
};
uchar code numB[]={0x04,0xFC,0xFC,0x44, 0x44,0xFC,0xB8,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0F,0x07,0x00, //-B-
};
uchar code numC[]={0xF0,0xF8,0x0C,0x04, 0x04,0x0C,0x18,0x00, 0x03,0x07,0x0C,0x08, 0x08,0x0C,0x06,0x00, //-C-
};
uchar code numD[]={0x04,0xFC,0xFC,0x04, 0x0C,0xF8,0xF0,0x00, 0x08,0x0F,0x0F,0x08, 0x0C,0x07,0x03,0x00, //-D-
};
uchar code numE[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0C,0x0E,0x00, //-E-
};
uchar code numF[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00, //-F-
}; */
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1