基于AVR单片机ATMEGA16A的四路多点测温系统proteus仿真

电路图设计:
链接:https://pan.baidu.com/s/1Bdh_iB6P-lDhjchZogIrdQ
提取码:1234在这里插入图片描述
部分参考代码:

#include <iom16v.h>
#include <macros.h>
#include "ds18b20.h"
//#include "lcd1602.h"

//微妙级延迟函数avr 16 以8MHz为例加上for循环,他需要执行1142条指令才是1ms,
void delay_1us(void)
{
  asm("nop");
}

void Delay_1us(unsigned int x)//所以这里存在一定的偏差。
{
   unsigned int i=0;	  	 
   for( i=0;i<x;i++)delay_1us(); 
}

//DS18B20复位函数
void DS18B20_Reset(void)
{	/*
    DQ_1;			//输出低电平
	DQ_OUT;			//DQ为输出状态
	DQ_0;			//输出低电平
	Delay_1us(500);			//延迟500微妙
	DQ_1;				//释放总线
	Delay_1us(60);			//延迟60微妙
	DQ_IN;			//DQ位输入状态
	while(DQ_RD);	//等待从机DS18B20应答(低电平有效)
	while(!(DQ_RD));*/	//等待从机DS18B20释放总线机DS18B20释放总线	
    //这里要加个括号判断优先级	
	 while(1)
	{
       DQ_OUT;
	   DQ_0;
	   Delay_1us(480);			//延时480us
	   DQ_1;
	   Delay_1us(60);	
	   DQ_IN;		//设置为输入端,接收应答信号
	   if(!(DQ_RD))  				//收到应答信号
	  {
		DQ_1;
		Delay_1us(240);
		break;	
		 }		//延时240us
	}		
}

//DS18B20写字节函数
void DS18B20_Write(unsigned char Data)
{
	unsigned char i;
	DQ_OUT;		//DQ为输出
	for(i=0;i<8;i++)
	{
		DQ_0;			//拉低总线
		Delay_1us(10);					//延迟10微妙(最大15微妙)
		if(Data&0x01)DQ_1;
		else DQ_0;			
		Delay_1us(40);		 			//延迟40微妙(最大45微妙)
		DQ_1;					//释放总线
		Delay_1us(1);					//稍微延迟
		Data>>=1;
	}
}

//DS18B20读字节函数
unsigned char DS18B20_Read(void)
{
	unsigned char i,Temp;										
	for(i=0;i<8;i++)
	{
	   Temp>>=1;						//数据右移
	   DQ_OUT;					//DQ为输出状态
	   DQ_0;				//拉低总线,启动输入
	   DQ_1;					//释放总线
	   DQ_IN;					//DQ为输入状态
	   Delay_1us(2);	
	   if(DQ_RD) Temp|=0x80;	
	   Delay_1us(60);		 			//延迟45微妙(最大45微妙)
	}
	
	return Temp;
}
/*void GetROMSequence()//读地址号代码,用lcd1602显示
{
	unsigned char i,temp;
	DS18B20_Reset();
	DS18B20_Write(READ_ROM);
	for (i = 0; i < 8; i++)
	ROMData1[i] = DS18B20_Read();
	lcd_com(0x80);  	
	for(i=0;i<8;i++)
    {
       temp=ROMData1[i]>>4;
       if(temp<10)
       {
         lcd_dat(0x30+temp);
       }
       else
       {
         lcd_dat(0x37+temp);
       }

       temp=ROMData1[i]&0x0f;
       if(temp<10)
       {
         lcd_dat(0x30+temp);
       }
       else
       {
         lcd_dat(0x37+temp);
       }
    }
}*/

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值