西安航空学院毕业论文
}
void display(uchar *p) { } init_play() { }
/******************二号初始化***********************/ init_play1() { }
/*********************三号初始化*********************/ init_play2() { }
18
//显示
while(*p!='\\0') { }
wr_dat(*p); p++; delay1ms(5);
//1号初始化显示
lcd_init(); wr_com(0x80); display(str1);
//2号初始化显示
wr_com(0x80+0x08); display(str2);
//3号初始化显示
wr_com(0x80+0x40); display(str3);
西安航空学院毕业论文
/****************1号DS1820程序*********************/
void delay_18B20(uint i) {
while(i--); }
void ds1820rst() { uchar x=0; DQ = 1; delay_18B20(4); DQ = 0; delay_18B20(100); DQ = 1;
delay_18B20(40);
}
uchar ds1820rd() { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) {
DQ = 0; dat>>=1; DQ = 1; if(DQ) dat|=0x80;
delay_18B20(10);
//延时1微秒
//ds1820复位
//DQ复位 //延时 //DQ拉低
//精确延时大于480us //拉高
//读数据
//给脉冲信号
//给脉冲信号
19
西安航空学院毕业论文
}
return(dat); }
void ds1820wr(uchar wdata)
{
uchar i=0;
for (i=8; i>0; i--) {
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10); DQ = 1; wdata>>=1;
} }
read_temp() { uchar a,b; ds1820rst(); ds1820wr(0xcc); ds1820wr(0x44);
ds1820rst(); ds1820wr(0xcc); ds1820wr(0xbe);
a=ds1820rd(); b=ds1820rd();
tvalue=b;
//写数据
// 数据放在数据线上被读走
//1号读取温度值并转换 //跳过读序列号
//启动温度转换
//跳过读序列号
//读取温度
20
西安航空学院毕业论文
tvalue<<=8; tvalue=tvalue|a;
if(tvalue<0x07ff) else
{ }
//温度值扩大10倍,精确到1位小数
tvalue=~tvalue+1; tflag=1; tflag=0;
}
tvalue=tvalue*(0.625); return(tvalue);
/**********************1号温度值显示**********************/
void ds1820disp() {
uchar flagdat;
//百位数 //十位数 //个位数 //小数位
disdata[0]=tvalue/1000+0x30;
disdata[1]=tvalue00/100+0x30; disdata[2]=tvalue0/10+0x30; disdata[3]=tvalue+0x30;
if(tflag==0) flagdat=0x20; else
flagdat=0x2d;
//负温度显示负号:-
//正温度不显示符号
if(disdata[0]==0x30) {
disdata[0]=0x20;
21
//如果百位为0,不显示
西安航空学院毕业论文
if(disdata[1]==0x30)
disdata[1]=0x20;
//如果百位为0,十位为0也不显示
}
//wr_dat(flagdat); wr_com(0x80+2); wr_dat(disdata[0]); wr_com(0x80+3); wr_dat(disdata[1]); wr_com(0x80+4); wr_dat(disdata[2]); wr_com(0x80+5); wr_dat(0x2e); wr_com(0x80+6); wr_dat(disdata[3]); }
//显示符号位
//显示百位
//显示十位
//显示个位
//显示小数点
//显示小数位
/*******************二号DS18B20程序**************************/
void delay_18B201(unsigned int i) //延时1微秒 {
while(i--); }
void ds1820rst1() {
//ds1820复位
uchar x=0;
DQ1 = 1; delay_18B20(4);
//DQ复位 //延时 //DQ拉低
//精确延时大于480us
22
DQ1 = 0; delay_18B201(100);