新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > AVR M16实验之六 DS18B20测温

AVR M16实验之六 DS18B20测温

作者: 时间:2016-11-25 来源:网络 收藏

void DS18B20_PORTx_Initial(void)
{
DDRB=0xff;//B口全部输出
PORTB=0xff;//B口全部低电平
DQ;
DQ_ActiveHigh;
}
void DS18B20_Reset(void)
{
DQ_ActiveLow;
_delay_us(600);//延时至少480us
DQ_ActiveHigh;//释放数据线
_delay_us(70);//延时大于60us
while(DQ_Readback);//检测存在信号
_delay_us(500);//延时保证时序完整性
}
void DS18B20_High_BitWrite(void)
{
DQ_ActiveLow;//拉成低电平
_delay_us(2);//保持至少1us
DQ_ActiveHigh;//释放数据线
_delay_us(65);//等待足够时间使DS18B20采样数据线
}
void DS18B20_Low_BitWrite(void)
{
DQ_ActiveLow;//拉成低电平
_delay_us(65);//等待足够时间使DS18B20采样数据线
DQ_ActiveHigh;//释放数据线
}
uchar DS18B20_BitRead(void)
{
DQ_ActiveLow;//拉成低电平
_delay_us(2);//保持至少1us
DQ_ActiveHigh;//释放数据线
_delay_us(4);//延时使主机再15us的后阶段读取数据线
if(DQ_Readback)
return 1;
else
return 0;
}
/*DS18B20字节写函数*/
void DS18B20_ByteWrite(uchar command)
{
uchar n=0;
for(n=0;n<8;n++)
{
if(command&0x01)
DS18B20_High_BitWrite();
else
DS18B20_Low_BitWrite();
command>>=1;
_delay_us(5);
}
}
/*DS18B20字节读函数*/
uchar DS18B20_ByteRead(void)
{
uchar n=0,Readback=0;
for(n=0;n<8;n++)
{
Readback>>=1;
if(DS18B20_BitRead())
Readback|=0x80;
_delay_us(65);
}
return Readback;
}
void LCD1602_Initial(void)
{
PORTA&=~((1<DDRA|=(1<
PORTB=0x00;
DDRB=0xff;

LCD1602_CommandWrite(0x38);
_delay_ms(15);
LCD1602_CommandWrite(0x38);
_delay_ms(5);
LCD1602_CommandWrite(0x38);
_delay_ms(5);
LCD1602_CommandWrite(0x01);
_delay_ms(1);
LCD1602_CommandWrite(0x38);
_delay_ms(1);
LCD1602_CommandWrite(0x0c);
_delay_ms(1);
LCD1602_CommandWrite(0x06);
}
/*1602写命令字子函数*/
void LCD1602_CommandWrite(uchar com)
{
LCD1602_BusyCheck();
PORTA&=~(1<PORTB=com; //将数据送到8位并行数据口
PORTA|=(1<_delay_ms(1); //延时5ms,保持EN电平
PORTA&=~(1<}
/*1602写数据子函数*/
void LCD1602_ByteWrite(uchar date)
{
LCD1602_BusyCheck();
PORTA|=(1<PORTB=date; //将数据送到8位并行数据口
PORTA|=(1<_delay_ms(1); //延时5ms,保持EN电平
PORTA&=~(1<}
/*在某位置显示某字符,参数adr为待写地址,date为待写字节*/
void LCD1602_Display(uchar adr,uchar date)
{
LCD1602_BusyCheck();
LCD1602_CommandWrite(adr);
LCD1602_BusyCheck();
LCD1602_ByteWrite(date);
}
void LCD1602_BusyCheck(void)
{
PORTB=0xff;
DDRB=0x00;
PORTA|=(1<PORTA&=~(1<PORTA|=(1<_delay_us(5);
while(PINB&0x80);
PORTA&=~(1<PORTA&=~(1<PORTB=0xff;
DDRB=0xff;

}

本文引用地址:https://www.eepw.com.cn/article/201611/321115.htm

视频地址:http://v.youku.com/v_show/id_XMTYxNDkyOTgw.html


上一页 1 2 下一页

评论


技术专区

关闭