📄 b.c
字号:
/*****************************************
说明:
用短路子短接 P0 口、P2.4-P2.6、P3.7 的接线柱
下载完程序通电后,数码管的后三位会显示测得到温度值
当周围温度发生变化时,显示的温度值也会发生相应变化
测温范围为 -55℃ ~ 125℃
以 0.5℃ 递增
中国矿业大学 电子协会
刘滨 2008年9月
*****************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar P0_scan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar dis[3];
uchar TEMP;
//管脚定义
sbit dq = P3^7;
/*************** 短延时 ****************/
void delay(uint s)
{
while(s--);
}
/**************** 延时1ms *****************/
void delay_1ms(unsigned int t)
{
unsigned char i,j;
for(t;t>0;t--)
{
for(i=34;i>0;i--)
for(j=13;j>0;j--);
}
}
/****************** DS18B20 *********************/
void rst(void)
{
dq=1;
delay(8);
dq=0;
delay(80);
dq=1;
delay(14);
delay(20);
}
uchar readbyte(void)
{
uchar i=0;
uchar date=0;
for(i=8;i>0;i--)
{
dq=0;
date>>=1;
dq=1;
if(dq) date|=0x80;
delay(4);
}
return(date);
}
void writebyte(uchar date)
{
uchar i=0;
for(i=8;i>0;i--)
{
dq=0;
dq=date&0x01;
delay(5);
dq=1;
date>>=1;
}
}
uchar readtemp(void)
{
uchar a=0;
uchar b=0;
uchar temp1;
uint t=0;
float tt;
rst();
writebyte(0xcc);
writebyte(0x44);
rst();
writebyte(0xcc);
writebyte(0xbe);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
temp1=(uchar)tt;
return(temp1);
}
/************************ 主函数 *************************/
void main()
{
while(1)
{
TEMP = readtemp()-5; //读出温度值
dis[0]=TEMP%10;dis[1]=(TEMP/10)%10;dis[2]=TEMP/100;
P0 = P0_scan[dis[0]];
P2 = 0xf7;
delay_1ms(5);
P2 = 0xff;
P0 = P0_scan[dis[1]];
P2 = 0xfb;
delay_1ms(5);
P2 = 0xff;
P0 = P0_scan[dis[2]];
P2 = 0xfd;
delay_1ms(5);
P2 = 0xff;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -