stc8g1k08a和DS18B20测温程序
时间: 2023-08-24 21:09:57 浏览: 133
以下是stc8g1k08a和DS18B20测温程序的示例:
```
#include <stc8.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DQ P1_4
void delay_us(uint us)
{
while (us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(uint ms)
{
while (ms--)
{
delay_us(1000);
}
}
uchar ds18b20_init()
{
uchar result;
DQ = 1;
delay_us(2);
DQ = 0;
delay_us(500);
DQ = 1;
delay_us(70);
result = DQ;
delay_us(400);
return result;
}
void ds18b20_write_byte(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
DQ = 0;
delay_us(2);
DQ = dat & 0x01;
dat >>= 1;
delay_us(60);
DQ = 1;
delay_us(2);
}
}
uchar ds18b20_read_byte()
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
dat >>= 1;
DQ = 0;
delay_us(2);
DQ = 1;
delay_us(2);
if (DQ)
{
dat |= 0x80;
}
delay_us(60);
}
return dat;
}
void ds18b20_convert()
{
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
}
float ds18b20_read_temp()
{
uchar temp_l, temp_h;
float temp;
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);
temp_l = ds18b20_read_byte();
temp_h = ds18b20_read_byte();
temp = (temp_h << 8) + temp_l;
temp = temp * 0.0625;
return temp;
}
void main()
{
float temp;
ds18b20_convert();
delay_ms(750);
temp = ds18b20_read_temp();
while (1)
{
ds18b20_convert();
delay_ms(750);
temp = ds18b20_read_temp();
}
}
```
该程序使用STC8G1K08A单片机和DS18B20数字温度传感器实现温度测量。程序通过初始化DS18B20传感器,发送指令进行温度转换,并读取温度值。主函数中使用死循环进行温度测量,每750毫秒进行一次。
阅读全文