智能仪表设计说明书
RS=1; RW=0; EN=0; P0=dat; delay1ms(1); EN=1;
delay1ms(1); EN=0; }
void lcd_init()//初始化设置// {
wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); }
void display(uchar *p)//显示// {
while(*p!='\\0') {
wr_dat(*p); p++;
delay1ms(1); }
} void init_play()//初始化显示 {
lcd_init(); wr_com(0x80); display(str2); wr_com(0xc0); display(str3); delay1ms(3000); lcd_init();
wr_com(0x80); display(str1); }
/***************************ds18b20程序****************************/ void delay_18B20(uint i)//延时1微秒 {
while(i--); }
void ds1820rst()/*ds1820复位*/ {
DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us DQ = 1; //拉高
23
智能仪表设计说明书
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); }
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()/*读取温度值并转换*/ {
uint a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x08ff) tflag=0; else {
tvalue=~tvalue+1; tflag=1;
}
tvalue=tvalue*(0.0625)*10;//温度值扩大10倍,精确到1位小数 return(tvalue);
24
智能仪表设计说明书
}
/*******************************************************************/ 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;//如果百位为0,不显示 if(disdata[1]==0x30) {
disdata[1]=0x20;//如果百位为0,十位为0也不显示 } }
wr_com(0xc0+4);
wr_dat(flagdat);//显示符号位 wr_com(0xc1+4);
wr_dat(disdata[0]);//显示百位 wr_com(0xc2+4);
wr_dat(disdata[1]);//显示十位 wr_com(0xc3+4);
wr_dat(disdata[2]);//显示个位 wr_com(0xc4+4);
wr_dat(0x2e);//显示小数点 wr_com(0xc5+4);
wr_dat(disdata[3]);//显示小数位 wr_com(0xc6+4); wr_dat(0x43); }
//********************主程序***********************************// void main() {
BEEP=0;
init_play();//初始化显示
while(1) {
read_temp();//读取温度 ds1820disp();//显示
if(read_temp()>950+0x30||read_temp()<860+0x30) { baojing() ;} delay1ms(1) ;
}}
25
百位数显示数据(显示符号) 智能仪表设计说明书
附录2 原理图
26
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于DS18B20的温度传感器设计(课程设计)(6)在线全文阅读。
相关推荐: