历史上的今天
今天是:2025年01月04日(星期六)
2019年01月04日 | stm32 ds18b20 温度传感器
2019-01-04 来源:eefocus


举例
void DS18B20_in()
{
GPIO_InitTypeDef gpio =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_IPD
};
GPIO_Init(GPIOG, &gpio);
}
void DS18B20_out()
{
GPIO_InitTypeDef gpio =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_Out_PP
};
GPIO_Init(GPIOG, &gpio);
}
u8 DS18B20_check()
{
u8 flag = 0;
DS18B20_in();
while(ds18b20_in == 1)
{
flag++;
if(flag > 100)
{
return 1;
}
delay_us(1); //一次循环1us
}
flag = 0;
while(ds18b20_in == 0)
{
flag++;
if(flag > 240)
{
return 1;
}
delay_us(1);
}
return 0;
}
u8 DS18B20_reset()
{
DS18B20_out();
ds18b20_out = 0;
delay_us(500);
ds18b20_out = 1;
delay_us(1);
return DS18B20_check();
}
u8 DS18B20_init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
return DS18B20_reset();
}
u8 DS18B20_read_bit()
{
DS18B20_out();
ds18b20_out = 0;
delay_us(1);
ds18b20_out = 1; //释放总线
delay_us(1);
DS18B20_out();
delay_us(15);
return ds18b20_in;
}
u8 DS18B20_read()
{
u8 i = 0;
u8 r, tmp;
for(i = 0; i < 8; i++)
{
tmp = DS18B20_read_bit();
r = (tmp << 7 | r >> 1);
delay_us(45);
ds18b20_out = 1;
delay_us(1);
}
return r;
}
void DS18B20_write(u8 d)
{
u8 i = 0;
u8 tmp = 0;
DS18B20_out();
for(i = 0; i < 8; i++)
{
tmp = d & 0x01;
d >>= 1;
ds18b20_out = 0;
delay_us(1);
if(tmp == 0)
{
delay_us(60);
}
else
{
ds18b20_out = 1;
delay_us(60);
}
ds18b20_out = 1;
delay_us(1);
}
}
void DS18B20_ChangeTemp()
{
DS18B20_write(0xcc); //忽略ROM
DS18B20_write(0x44); //温度转换
return;
}
void DS18B20_ReadTemp()
{
DS18B20_write(0xcc);
DS18B20_write(0xbe); //读取RAM
return;
}
u16 readTemp()
{
int temp = 0;
u8 tmph = 0, tmpl = 0;
DS18B20_reset(); //必须的
DS18B20_ChangeTemp();
DS18B20_reset(); //必须的
DS18B20_ReadTemp();
tmpl = DS18B20_read(); //低字节
tmph = DS18B20_read(); //高字节
temp = tmph;
temp <<= 8;
temp |= tmpl;
return temp;
}
int main(void)
{
while(DS18B20_init() != 0)
{
printf("DS18B20_init failed.\n");
delay_ms(500);
}
while(1)
{
led1 = ~led1;
r = readTemp();
if((r & 0xf800) == 0xf800)
{
r = (~r) + 1;
temp = r * (-0.0625);
}
else
{
temp = r * 0.0625;
}
printf("temp %.2f\n", temp);
delay_ms(1000);
}
}
史海拾趣
|
北京照明集团招聘: 研发总监(负责灯具研发、10-15k+其他) 工作职责: 1.负责公司技术中心的管理工作,制定技术人员的培训计划、负责日常工作协调、员工沟通、绩效考核等; 2.负责研究同行业节能改造的发展方向, ...… 查看全部问答> |
|
我这里有一个程序,用TKS-936仿真时没有反应。我单片机用的是:P89LPC901 该单片机有一个比较器,由P0.4引脚输入电压,与内部参考电压进行比较,当比较器输出改变时,触压中断。 程序如下: #include \"reg932.h\" #define &n ...… 查看全部问答> |
|
使用平台vxworks6.6 开发环境worksbench3.0 在config.h文件中添加了相应的FTP宏定义: #define INCLUDE_IPFTPC #define INCLUDE_IPFTPS 在编译bootrom.bin的时候,系统提示错误: undefined reference to \'ipftps_create\' unde ...… 查看全部问答> |
|
cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a driv ...… 查看全部问答> |




