Proteus仿真-DS18B20温度传感器使用方法

一、硬件链接

在元件库中搜索DS18B20,按下图的连接方式链接。

 二、驱动代码

#define uchar unsigned char 
#define uint unsigned int
sbit DS1820_dat=P2^3;
 
 
void DS18B20_delay(uint T)							   //????
{
	while(T--);
}
 
 
void Initial()			 
{
    DS1820_dat=1;
   	DS18B20_delay(8);		  //??16??
    DS1820_dat=0;
    DS18B20_delay(80);
    DS1820_dat=1;
    DS18B20_delay(15);
} 
 
void Input(uchar f)			//18B20???????
{
    uchar j;
    for (j=0;j<8;j++)
    {
        DS1820_dat=0;
        DS1820_dat=f&0x01;
        DS18B20_delay(10);
        DS1820_dat=1;
        f>>=1;
    }
}
 
uchar Output()		   //18b20 ????????
{
    uchar j,b;
    for (j=0;j<8;j++)
    {
        DS1820_dat=0;
        b>>=1;
        DS1820_dat=1;
        if (DS1820_dat)
        {
            b=b|0x80;
        }
        DS18B20_delay(10);
    }
    return(b);
}
int Temper()
{	  
	EA = 0;         // 打开总中断
	int Store;
	int Store_2,Store_1;
	Initial();				   //对 DS18B20 复位
	Input(0xcc);			  	//跳过 ROM
	Input(0x44);			   //启动温度转换
	Initial();				   //对 DS18B20 复位
	Input(0xcc);			   //跳过 ROM
	Input(0xbe);			   //读 RAM 命令
	Store_1=Output();		   //读温度的低字节
	Store_2=Output();	 	   //读温度的高字节	 
	Store_2=(Store_2*256)+Store_1;	   //合起来为温度的整数部分
	Store=(int) Store_2*0.625;
		EA = 1;         // 打开总中断
	return Store;
}

三、软件示例

完整代码功能为51单片机温度控制系统,proteus仿真资料
功能:
1、低于设定最低温度时加热丝加热,高于最高温度时停止加热。可用按键设置高低温度。

2、显示当前时间,时间可设置。
3、DAC液位监测,液位低于10%开启电机上水,高于90%关闭电机上水,百分比可在程序中修改

/*****************主函数********************/
void main()
{	
	
	beep = 0;				    //开机蜂鸣器叫一声
	delay_1ms(200);
	P0 = P1 = P2 = P3 = 0xff;   //初始化IO口
	init_time0();		 //初始化定时器
 	init_1602();		 //lcd1602初始化
	init_1602_dis_csf(); //lcd1602初始化显示
	do
     {
	  temp=Temper();
     }
    while(temp==850);   	       //因为DS18B20上电之后会读出来850,但不是温度值,所以等待读出温度值   
 	delay_1ms(100);
	while(1)
	{
		key();			 //按键程序
 		if(key_can > 0)
		{
			beep = 0;
			delay_1ms(50);
			beep = 1;			
 			key_with();	
		}
		
		if(flag_200ms == 1)
		{	
			flag_200ms = 0;
			if(menu_1 == 0)
			{
				read_time();		  //读时间
				init_1602_ds1302();   //显示时钟
				vol_value=VOL_VAL*A_D()/256;               //获取模拟电压值
				percent = 100.0*vol_value/VOL_VAL;
				display_temp(55);

			}
		}
		delay_1ms(1);
	}
}

关注下方公众号,回复公众号“204”获取完整工程文件

### Proteus温度传感器的模拟、设计与教程 #### DS18B20 温度传感器的应用实例 在Proteus中实现基于51单片机的温度控制系统时,可以利用DS18B20温度传感器来监测环境温度并控制加热装置的工作状态。当检测到当前温度低于预设下限时启动加热;而一旦超过上限则关闭加热设备[^1]。 ```c #include <reg52.h> sbit DQ = P3^7; // 定义DQ引脚连接至P3.7口 #define uint unsigned int #define uchar unsigned char uchar Temp_H,Temp_L; float temp; void Delay(uint z){ while(z--); } // 初始化函数 void Init_DS18B20(void){ IT0=0; EX0=0; TMOD=0X01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; TR0=1; } ... ``` 此部分代码展示了如何初始化DS18B20以及定义相关变量用于后续操作处理。完整的程序还包括读取温度值、比较阈值逻辑判断等内容,在实际项目开发过程中可根据具体需求调整参数配置。 #### LM35 配合 ADC0808 的应用案例 对于采用LM35作为感温元件并通过ADC完成模数转换的情况而言,该过程涉及到了多个硬件组件之间的协同工作。例如,在8086微处理器平台上构建类似的系统架构时,需注意正确设置各模块间的接口关系以便顺利传输测量所得的数据信息[^2]。 ```assembly MOV DX, 0F8H ; 设置端口号给DX寄存器 OUT DX, AL ; 将AL中的命令字节送出到指定I/O地址处 IN AL, DX ; 输入来自选定通道上的A/D转换后的数值 CALL DELAY ; 调用延时子程序等待稳定时间过去再继续执行下一步骤 ... DELAY PROC NEAR PUSH CX ; 压栈保护CX的内容不变 MOV CX, 0FFFFH LOOPE: LOOP LOOPE POP CX ; 出栈恢复原来的CX值 RET ; 返回调用位置 DELAY ENDP ``` 上述汇编指令片段描述了一个简单的输入/输出流程,其中包含了向外部电路发送请求信号、接收反馈结果以及必要的延迟环节以确保采样精度的要求得到满足。 --- 通过以上两个例子可以看出,在Proteus环境下搭建不同类型的温度传感实验平台具有较高的灵活性和实用性。无论是针对嵌入式系统的初学者还是有一定经验的研发人员来说都是很好的学习资源之一。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值