⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1820.c

📁 一个单片机的ds1820的c语言程序希望对有些同学右一定的帮助
💻 C
字号:


#include <reg52.h>

#include "ds18b20.h"
#include "delay.h"
sbit DS18B20=P3^3;
unsigned char duan[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
unsigned char L_18B20,H_18B20; //分别存放低八位 高八位的数据;
unsigned char temp=0;
sbit a0=P1^0;
sbit a1=P1^1;
sbit a2=P1^2;
sbit a3=P1^3;
//#define LEDPORT P0
/*-------------数码管显示函数--------------------
参数:number 要显示的数字
参数:pos    要显示的位置(从左到右为1--4)
返回值:无
------------------------------------------------*/
/*void display(uchar number,uchar pos)//数码管显示函数
{
 uchar temp; //临时变量
 if(number<10 && pos<5 && pos>0)//确定数据合法
 {
  temp=(number<<4)&0xf0;//获得要显示的数据
  temp+=1<<(pos-1);   //送位置位
  LEDPORT=temp;    ////送显示数据,开始显示
 }
 else return;
} */
/*void delay_ms()
{
unsigned char i=0xff;
while (i--);} */
void delay_ms(unsigned int t)
{
unsigned int j;
for(;t>0;t--)
     for(j=125;j>0;j--);
}
void leddisplay(unsigned int count)
{SCON=0x00;
SBUF=duan[(count/1000)];
T1=1;
a0=0;
delay_ms();
a0=1;
SBUF=duan[(count%1000/100)];
T1=1;
a1=0;
delay_ms();
a1=1;
SBUF=duan[(count%100/10)];
T1=1;
a2=0;
delay_ms();
a2=1;
SBUF=duan[count%10];
T1=1;
a3=0;
delay_ms();
a3=1;
}
void Reset_18B20(void)//ds18b20复位程序
{
 unsigned char i;
 DS18B20=0;
 i=110;
 while(i>0)i--;
 DS18B20=1;
 i=6;
 while(i>0)i--;
}

void Wait_18B20()//等待程序,等待ds18b20应答
{
 unsigned char i;
// while(DS18B20);
 while(~DS18B20);
 i=6;
 while(i>0)i--;
}

bit Readbit_18B20(void) //读取一个bit的数据
{
 unsigned char i;
 bit b;
 DS18B20=0;
 i++;i++;
 DS18B20=1;
 i++;i++;i++;i++;i++;
 b=DS18B20;
 i=13;
 while(i>0)i--;
 return b;
}

unsigned char Readbyte_18B20(void) //读取一个字节的数据
{
 unsigned char i,j,d;
 d=0;
 for(i=1;i<=8;i++)
 {
  j=Readbit_18B20();
  d=(j<<7)|(d>>1); //又玩野

 }
 return d;
}

/*void Writebyte_18B20(unsigned char b)//写一个字节(控制字)
{
   unsigned char j,i;
 bit temp;
 for(j=1;j<9;j++)
 {
  temp=b&0x01;
  b=b>>1;
  if(temp) // 写“1”
  {
   DS18B20=0;
   i++;i++;i++;i++;i++;
   DS18B20=1;
   i=13;
   while(i>0)i--;
  }
  else  //写“0”
   {
   DS18B20=0;
    i=13;
   while(i>0)i--;
   DS18B20=1;
   i++;i++;i++;i++;i++;
   }
 }
} */
void Writebyte_18B20(unsigned char date)
{
 unsigned char i,j;
 for(i=8;i>0;i--)
 { DS18B20=0;
   DS18B20=date&0x01;
 j=13;
   while(j>0)j--;
   DS18B20=1;
   date>>=1;
   }
   j=13;
  while(j>0)j--;
 }



void Convert(void)    //开始转换
{
 Reset_18B20();
 Wait_18B20();      //等待应答脉冲
 Writebyte_18B20(0xcc); //跳过序列号脉冲
 Writebyte_18B20(0x44); //转换命令
}

void Read_18B20(void) //读取ds18b20
{
 Convert();
 Reset_18B20();
 Wait_18B20();
 Writebyte_18B20(0xcc);  //跳过ROM
 Writebyte_18B20(0xbe);   //发送读取命令
 L_18B20=Readbyte_18B20(); //读取低八位数据
 H_18B20=Readbyte_18B20(); //读取高八位数据
 /*if(H_18B20>0x7f)      //最高位为1时温度是负
 {
   L_18B20=~L_18B20;         //补码转换,取反加一
   H_18B20=~H_18B20+1;
   //fg=1;      //读取温度为负时fg=1
   }*/
   temp=(L_18B20+H_18B20*256); //整数部分
}
void main()
{
 while(1)
 { Read_18B20();

   leddisplay(temp);
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -