基于AT89S52单片机的温湿度检测仪-毕业设计(6)

2019-01-19 13:12

毕业论文

开始NO有键按下吗?YES温度检测吗?YES温度检测NO温度显示湿度检测吗?YES湿度检测NO湿度显示结束图3-1 主程序流程图

处理操作的初始化。它的内容包括主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。主程序设计框图如上图3-1。

主程序初始化的具体内容包括:时间中断的初始化、外部中断源的初始化、单片机I/O口初始化、RAM初始化、LCD初始化、对各个子程序的调用,然后对温度和湿度进行检测并将结果显示在LCD上。

初始化对单片机的工作非常重要,因为单片机经过复位以后一些状态字,寄存器的初值可能是随机分配的值也可能是全置0或置1,程序在运行

22

毕业论文

过程中,程序状态字起着重要的作用,为了不影响程序的正常运行初始化是十分必要的。

§1.7 温湿度检测模块程序设计

§1.7.1

温度检测模块程序设计

1. 程序设计方案

开始 初始化DS18B20,LCD 读DS18B20序列号 NO DS18B20是否存在 发送跳过RAM指令 温度转换 LCD显示

23

毕业论文

2. 部分源程序如下: void init_lcd() {

write_zl(0x38);//开显示 write_zl(0x01);//清屏 write_zl(0x06);//整屏不移动 write_zl(0x0C);//不开光标 }

void init_18b20() { DQ=1; delay(8); //延时

DQ=0; delay(80); DQ=1; delay(20); }

void write_dat(uchar dat) { uchar i,k; k=dat;

for(i=0;i<8;i++) { DQ=0;

DQ=k&0x01;//从低位开始 delay(5); DQ=1; k>>=1; }

delay(4); }

24

毕业论文

int read_sj() {

uchar j,date; for(j=0;j<8;j++) { DQ=1; delay(1); DQ=0;

date=date>>1; DQ=1; if(DQ==1) date|=0x80; delay(4);} return(date); }

void temperaturechange() { uint tempH,tempL; init_18b20();

write_dat(0xcc);//只对一个操作就跳过读序列号操作 write_dat(0x44); //启动温度转换 delay(60000);

delay(33750);//需要93.75ms init_18b20(); write_dat(0xcc);

write_dat(0xbe);//读温度寄存器

tempL=read_sj();//读取温度低位LSB tempH=read_sj();//读取温度高位MSB if(tempH&0x80) //高5位是1为负数

25

//

毕业论文

{ a=1; tem=tempH;

tem<<=8; //共16位 } else { a=0;

tem=((tempH*256)+tempL)*0.0625;//转换实际温度 } }

void write_temperature(uint temp) { uint bai,shi,ge; bai=temp/100; shi=temp0/10; ge=temp; if(a==1) { if(shi>0)

{write_zl(0x80+0x40+3); write_sj('-');

//被调用的函数必须在前

tem=tem|tempL; //合并高低位数 tem=~tem+1; tem=tem*(0.0625);

write_zl(0x80+0x40+4); write_sj(0x30+shi);

else {

write_zl(0x80+0x40+3); write_sj(0x00);

write_zl(0x80+0x40+4);

26

}


基于AT89S52单片机的温湿度检测仪-毕业设计(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:马说学案设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: