?? lesson8.c
字號:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define T_cont 0.0625;
uchar code welcome[]={"High Sensor Temp"};
uchar code welcome1[]={"Design by:ljh"};
uchar code temp[]={"temp: "};
uchar code ds18b20[]={"DS18B20 OK"};
bit T_sign;
sbit DS=P3^3;
float temp1=0;
uchar t_bai,t_shi,t_ge,t_feng,t_miao;
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
///////////////////////////////////////////////////////////////////////
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dsreset(void) //send reset and initialization command
{
uint i; //DS18B20初始化
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bit tmpreadbit(void) //read a bit 讀一位
{
uint i;
bit dat;
DS=0;i++; //i++ for delay 小延時一下
DS=1;i++;i++;
dat=DS;
i=8;
while(i>0)i--;
return (dat);
}
uchar tmpread(void) //read a byte date 讀一個字節
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //讀出的數據最低位在最前面,這樣剛好//一個字節在DAT里
}
return(dat); //將一個字節數據返回
}
void tmpwritebyte(uchar dat) //write a byte to ds18b20
{ //寫一個字節到DS18B20里
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1 寫1部分
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0 寫0部分
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void readtemperature()
{
uint y;
uchar T_L=0;
uchar T_H=0;
uchar k;
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
T_L=tmpread();
T_H=tmpread();
k=T_H&0x08;
if(k==0x08)
T_sign=1;
else
T_sign=0;
T_H=T_H&0x07;
temp1=(T_H*256+T_L)*T_cont;
temp1=temp1*100;
t_bai=(uint)temp1/10000;
y=(uint)temp1%10000;
t_shi=y/1000;
y=(uint)y%1000;
t_ge=y/100;
y=(uint)y%100;
t_feng=y/10;
t_miao=(uint)y%10;
}
///////////////////////////////////////////////////////////
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5); //延時
lcden=1; //下三行表示E高脈沖到來就開始轉換
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
}
void print(uchar a,uchar *str)
{
write_com(a);
while(*str!='\0') {write_data(*str++);}
*str=0;
}
void print1(uchar a,uchar t)
{
write_com(a);
write_data(t);
}
void main()
{
init();
print(0x80,welcome);
print(0xc0,welcome1);
delay(1000);
init();
while(1)
{
readtemperature();
print(0x80,ds18b20);
print(0xc0,temp);
if(T_sign==1)
print1(0xc7,0x2d);
else
print1(0xc7,0x2b);
if(t_bai!=0)
print1(0xc8,t_bai+0x30);
else
print1(0xc8,0x20);
print1(0xc9,t_shi+0x30);
print1(0xca,t_ge+0x30);
print1(0xcb,0x2e);
print1(0xcc,t_feng+0x30);
print1(0xcd,t_miao+0x30);
print1(0xce,0x43);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -