这个代码直接复制就可以了,不需要再加入其他的头文件,废话不多说,直接上代码,下图就是显示情况!
#include<reg52.h>
//================================================Ds18B20初始化设计========
sbit DQ = P1^4;//Ds18b20的端口
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--){
for(i=0;i<12;i++);
}
}
//通过单总线向DS18B20接受一个字节,也就时外部温度,因为只有8个字节所以循环8次
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}
//对已经接受的字节进行读取
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(5);
}
return dat;
}
//DS18B20初始化,复位
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80); // ÑÓʱ´óÓÚ480us
DQ = 1;
Delay_OneWire(10); // 14
initflag = DQ; // initflagµÈÓÚ1³õʼ»¯Ê§°Ü
Delay_OneWire(5);
return initflag;
}
//==============================Ds18B20初始化完成=====================
unsigned char SMG_1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管0到9
unsigned char SMG_Dian[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//数码管带点的0到9
unsigned int temp=0;//用于将读取的温度转化为数码管显示的中间变量
//LED 蜂鸣器和继电器关闭
void init_Led_buss()
{
P0=0xff;
P2=(P2 &0x1f) |0x80;//½«Ç°ÃæÈýλ¹éÁ㣬ºóÎåλ±£³Ö²»±ä£¬ÔÙÓûò£¬ÐÞ¸ÄǰÈýλ
P2 &=0x1f;
P0=0x00;
P2=(P2 &0x1f) |0xa0;
P2 &=0x1f;
}
void delay_1(unsigned char t)
{
while(t--);
}
//数码管显示完时的复位和初始化
void init_SMG_All(unsigned char dat)
{
P0=0xff;
P2=(P2 &0xff) |0xc0;
P2=P2 &0x1f;
P0=dat;
P2=(P2 &0x1f) |0xe0;
P2=P2 &0x1f;
}
//数码管的com通道和单个通道的设置
void SMG_bit(unsigned char dat,unsigned char pos)
{
P0=0xff;
P2=(P2 &0x1f) |0xe0;
P2 &=0x1f;
P0=0x01<<pos;
P2=(P2 &0x1f) |0xc0;
P2 &=0x1f;
P0=dat;
P2=(P2 &0x1f) |0xe0;
P2=P2 &0x1f;
}
//数码管的显示
void Dispaly_SMG()
{
SMG_bit(SMG_1[temp%10],7);
delay_1(300);
SMG_bit(SMG_Dian[(temp%100)/10],6);
delay_1(300);
SMG_bit(SMG_1[temp/100],5);
delay_1(300);
SMG_bit(0xbf,4);
delay_1(300);
SMG_bit(SMG_1[0],3);
delay_1(300);
SMG_bit(SMG_1[0],2);
delay_1(300);
SMG_bit(0xbf,1);
delay_1(300);
SMG_bit(0x8c,0);
delay_1(300);
init_SMG_All(0xff);
}
void Delay_0(unsigned char tt)
{
while(tt--)
{
Dispaly_SMG();
}
}
//DS18B20的采集程序
unsigned char Rd_temp(void)
{
unsigned char low,high;
init_ds18b20();//¸´Î»
Write_DS18B20(0xCC);//Ìø¹ýRomÖ¸Áî
Write_DS18B20(0x44); //Æô¶¯Î¶Èת»»
Delay_OneWire(200);
Delay_0(800);
init_ds18b20(); //¸´Î»
Write_DS18B20(0xCC);//Ìø¹ýRomÖ¸Áî
Write_DS18B20(0xBE); //¶ÁÈ¡¼Ä´æÆ÷
low = Read_DS18B20(); //µÍ×Ö½Ú
high = Read_DS18B20(); //¸ß×Ö½Ú
temp = high;
temp = (temp<<8) | low;
if((temp&0xf8)==0x00)
{
temp>>=4;
temp=temp*10;
temp=temp+(low &0x0f)*0.0625;
}
return temp;
}
//主函数
void main()
{
init_Led_buss();
while(1)
{
Rd_temp();
Dispaly_SMG();
}
}
版权声明:本文为m0_63213850原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。