📄 18b20cewen.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^7;
sbit smg1=P0^0;
sbit smg2=P0^1;
sbit smg3=P0^2;
uchar temp;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//0到F表格
void delay(uint z);
void init();
void write_byte(uchar dat);
uchar read_byte(void);
uchar readtemperature(void);//读出温度函数
void display(void);
void main()
{
while(1)
{
temp=readtemperature();
display();
}
}
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
void write_byte(uchar dat)//低位在前
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(4);
DQ=1;
dat>>=1;//右移一位
}
delay(4);
}
uchar read_byte()
{
uchar i,value;
for(i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value=0x80;
delay(4);
}
return value;
}
uchar readtemperature(void)
{
uchar a,b;
init();
write_byte(0xcc);//跳过ROM
write_byte(0x44); //启动温度检测
delay(300);
init();
write_byte(0xcc);
write_byte(0xbe);//读取
a=read_byte();
b=read_byte();//按顺序读取
b<<=4;
b+=(a&0xf0)>>4;//a&0xf0屏蔽第四位
return b;//除了小数的都在B里
}
void display(void)
{
smg3=0;
smg2=0;
smg1=0;
P1=table[temp%10];
delay(20);
smg2=0;
smg1=1;
P1=table[temp/10];
delay(20);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -