您的位置 首页 芯闻

AVR M16试验之六 DS18B20测温

***********************************************************************文件名称:mainc*程序作者:kidcao1987*程序

/**********************************************************************
* 文件名称: main.c
* 程序作者: kidcao1987
* 程序版别: V1.0
* 功用描绘: 装上LCD1602,在其上,显现当时的温度。
* 编译器:WinAVR-20090313
* 芯片:ATmega16,外部11.0592MHZ晶振
* 技术支持:http://bbs.cepark.com
**********************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DQ PORTC&=~(1<#define DQ_ActiveHigh DDRC&=~(1<#define DQ_ActiveLow DDRC|=(1<#define DQ_SetInput DDRC&=~(1<#define DQ_Readback (PINC&0x80)
#define RS PA4
#define RW PA5
#define EN PA6
unsigned char const LedData[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned char const LedPos[]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar DisplayNum[]={“0123456789.-C”};
uchar const CharacterChar[]={“Now the Tempera-ture is: “};
uchar Num[4];
uchar TemperatureL,TemperatureH,m;
uint Temperature;
void LCD1602_Initial(void);
void LCD1602_CommandWrite(uchar com);
void LCD1602_ByteWrite(uchar date);
void LCD1602_Display(uchar adr,uchar date);
void LCD1602_BusyCheck(void);
void DS18B20_Reset(void);
void DS18B20_PORTx_Initial(void);
void DS18B20_High_BitWrite(void);
void DS18B20_Low_BitWrite(void);
void DS18B20_ByteWrite(uchar command);
uchar DS18B20_ByteRead(void);
int main(void)
{
DS18B20_PORTx_Initial();
LCD1602_Initial();
while(1)
{
DS18B20_Reset();//复位
DS18B20_ByteWrite(0xcc);//越过ROM匹配
DS18B20_ByteWrite(0x44);//温度转化
_delay_ms(600);//延时等候温度转化完毕,这个很重要!!
DS18B20_Reset();//复位
DS18B20_ByteWrite(0xcc);//越过ROM匹配
DS18B20_ByteWrite(0xbe);//读取温度
TemperatureL=DS18B20_ByteRead();
TemperatureH=DS18B20_ByteRead();//先低字节后高字节
DS18B20_Reset();//复位计划DS18B20的输出
/*以下是温度数据处理以及显现部分*/
Temperature=TemperatureL*6.25+TemperatureH*1600;
Num[0]=Temperature/1000;
Num[1]=(Temperature%1000/100);
Num[2]=Temperature%100/10;
Num[3]=Temperature%10;
for(m=0;m<16;m++)
{
LCD1602_Display(0x80+m,CharacterChar[m]);
}
for(m=0;m<9;m++)
{
LCD1602_Display(0x80+0x40+m,CharacterChar[16+m]);
}
LCD1602_ByteWrite(DisplayNum[Num[0]]);
LCD1602_ByteWrite(DisplayNum[Num[1]]);
LCD1602_ByteWrite(DisplayNum[10]);
LCD1602_ByteWrite(DisplayNum[Num[2]]);
LCD1602_ByteWrite(DisplayNum[Num[3]]);;
LCD1602_ByteWrite(0xdf);
LCD1602_ByteWrite(DisplayNum[12]);
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/258827.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部