📄 ds18b20.c
字号:
#define DDR_DQ RC3
#define PIN_DQ IC3
#define POR_DQ OC3
unsigned char TEMP_int=0,TEMP_flo=0;
unsigned char TEMP_H=0,TEMP_L=0;
unsigned char TEMP[5]=" . ";
/*----------------------
延迟子程序
0.5us
------------------------*/
void delay_1820(unsigned int i)
{
while(--i);
}
/*----------------------------
初始化DS18B20
-----------------------------*/
void Init_DS18B20(void)
{
while(1)
{
unsigned char flag=0;
DDR_DQ=1; //设置为输出
POR_DQ=0; //低电平
delay_1820(900); //主机发出复位低电平480us~960us
POR_DQ=1; //释放总线
delay_1820(120); //等待回应-大概60us-240us后
DDR_DQ=0; //设置为输入
flag=PIN_DQ; //读取回应
while(!PIN_DQ);
if( flag ==0 )break; //初始化成功flag=0;
}
}
/*----------------------------
写DS18B20
-----------------------------*/
void write_data(unsigned char dat)
{
unsigned char i=8;
DDR_DQ=1; //设置为输出
POR_DQ=1;
for(;i>0;i--)
{
POR_DQ=0; //低电平开始
delay_1820(16); //延时1us~15us 8us
POR_DQ=dat&1;
delay_1820(120); //延迟一段时间给温度芯片采样数据60-120us
POR_DQ=1; //释放总线
dat>>=1; //下一位
}
}
/*----------------------------
读DS18B20
-----------------------------*/
unsigned char read_data(void)
{
unsigned char i=8,dat=0;
DDR_DQ=1; //设置为输出
POR_DQ=1; //拉高
for(;i>0;i--)
{
dat>>=1;
POR_DQ=0; //低电平开始
delay_1820(10); //延时1us~15us 5us
POR_DQ=1; //释放总线
DDR_DQ=0; //设置为输入
delay_1820(2); //等待温度芯片发送数据
if(PIN_DQ)dat|=0x80; //读取数据
delay_1820(120); //延迟一段时间60~120us
DDR_DQ=1; //设置为输入
POR_DQ=1;
}
return(dat);
}
/*----------------------------
读温度子程序
-----------------------------*/
void Read_DS18B20(void)
{
Init_DS18B20(); //复位
write_data(0xcc); //跳过ROM匹配
write_data(0x44); //启动温度转换
delay_1820(900); //延迟一段时间
Init_DS18B20(); //复位
write_data(0xcc); //跳过ROM匹配
write_data(0xbe); //发出读温度指令
TEMP_L=read_data();
TEMP_H=read_data();
}
/*----------------------------
显示温度子程序
-----------------------------*/
void display_DS18B20(unsigned char x,unsigned char y)
{
TEMP_int=((TEMP_H<<4)&0xf0)|((TEMP_L>>4)&0x0f); //整数部分
TEMP_flo=(unsigned char)((TEMP_L&0x0f)*0.625);//小数部分
TEMP[0] = DataString[TEMP_int/10];
TEMP[1] = DataString[TEMP_int%10];
TEMP[3] = DataString[TEMP_flo];
TEMP[4] = '\0';
dispstr_12864(x,y,TEMP);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -