DS18B20程序
来源:互联网 发布:sql数据库本地连接 编辑:程序博客网 时间:2024/05/16 14:44
#define CLR_DIR_1WIRE DDRD&=~BIT(4) //只要修改这里的参数就可以了!呵呵!
#define SET_DIR_1WIRE DDRD|=BIT(4) //里面什么都不用该!
#define CLR_OP_1WIRE PORTD&=~BIT(4)
#define SET_OP_1WIRE PORTD|=BIT(4)
#define CHECK_IP_1WIRE (PIND&0x10) //检测
unsigned char wmh,wml;
void init_1820()
{
SET_DIR_1WIRE; //设置PC2 为输出
SET_OP_1WIRE;
CLR_OP_1WIRE;
delay_nus(480); //480us以上
SET_OP_1WIRE;
CLR_DIR_1WIRE;
delay_nus(20); //15~60us
while(CHECK_IP_1WIRE);
SET_DIR_1WIRE;
SET_OP_1WIRE;
delay_nus(140); //60~240us
}
void write_1820(unsigned char x)
{
unsigned char m;
for(m=0;m<8;m++)
{
CLR_OP_1WIRE;
if(x&(1<<m)) //写数据了,先写低位的!
SET_OP_1WIRE;
else
{CLR_OP_1WIRE;}
delay_nus(40); //15~60us
SET_OP_1WIRE;
}
SET_OP_1WIRE;
}
unsigned char read_1820()
{
unsigned char temp,k,n;
temp=0;
for(n=0;n<8;n++)
{
CLR_OP_1WIRE;
SET_OP_1WIRE;
CLR_DIR_1WIRE;
k=(CHECK_IP_1WIRE); //读数据,从低位开始
if(k)
temp|=(1<<n);
else
temp&=~(1<<n);
delay_nus(50); //60~120us
SET_DIR_1WIRE;
}
return (temp);
}
void gettemp() //读取温度值
{
unsigned char temh,teml,wm0,wm1,wm2,wm3;
init_1820(); //复位18b20
write_1820(0xcc); // 发出转换命令
write_1820(0x44);
// delay_nms(800); //不延时也好使,不知道怎么回事!
init_1820();
write_1820(0xcc); //发出读命令
write_1820(0xbe);
teml=read_1820(); //读数据
temh=read_1820();
wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
wm1=temh<<4;
wm2=wm1+wm0; //16进制转10进制
wm3=wm2/100;
wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位
wml=(wm2%100)%10;
}
- DS18B20程序
- DS18B20 测温程序
- C51 DS18B20程序
- C语言程序>>DS18B20
- ds18b20 驱动测试程序
- STM32 DS18B20 程序
- ds18b20(程序)
- 温度传感器(DS18B20)程序
- DS18B20温度传感器完整C程序
- ds18b20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- DS18B20
- ds18b20
- QQ域名邮箱用户数增加到30个,不错
- 急急急
- html中的图像使用map标签
- POJ 1828
- linux命令之cd,ls,vi进入及退出文件
- DS18B20程序
- EMC
- 分词小议
- Multiport T1/E1 ATM Port Adapters with Inverse Multiplexing over ATM
- 心情
- static 使用总结
- 编写自己的js框架
- 天上到底有什么? 2009.10.31
- Java实现观察者模式