温控自动风扇系统论文(3)

2019-08-20 20:41

4.2 子程序

4.2.1温度数据显示处理函数

首先使用DS18B20进行温度数据采集,经过处理后的数据在由4个数码管进行数据显示。其中要进行温度值正负判断,负温度求补码,标志位置1等问题。

void tem_deal(uint tem) {

/*************温度数据处理*****************/ if(!flag) {

if(tem>6348) // 温度值正负判断

{tem=65536-tem;flag1=1;} // 负温度求补码,标志位置1 Dis_play[4]=tem&0x0f; // 取小数部分的值 Dis_play[3]=ditab[Dis_play[4]]; // 存入小数部分显示值

Dis_play[4]=tem>>4; // 取中间八位,即整数部分的值 Dis_play[0]=Dis_play[4]/100; // 取百位数据暂存 Dis_play[2]=Dis_play[4]0; // 取后两位数据暂存 Dis_play[1]=Dis_play[2]/10; // 取十位数据暂存 Dis_play[2]=Dis_play[2]; // 取个位数据暂存 if(!Dis_play[0]) // 最高位为0都不显示 {

Dis_play[0]=0x0a; // 先判断百位是否为0 if(!Dis_play[1]) {

Dis_play[1]=0x0a; // 再判断十位是否为0 } }

// if(flag1) // {

// Dis_play[3]=0x0b; // 为负数时,最高位显示 \ // } } }

/******************************************/ /* 温度数据显示 */ /******************************************/ void display() {

char k;

11

for(k=0;k<4;k++) //4位LED扫描控制 { Disdata=table[Dis_play[k]]; //数据显示 if (k==2){DIN=0;} //小数点显示 discan=scan_con[k]; //位选 delay(90); //延时 discan=0x0; } }

4.2.2超温报警可控程序

程序设定好三个按键来用来设定用户预想设定的报警值,和BS18B20采集过来的温度数据进行对比,如果超出了原来预定设的值时,就会立刻调用程序执行报警命令。

void Annu(void) { uchar temp,tim; temp=Dis_play[1]*10+Dis_play[2]; if(KEY1==0) { delay(5000); if(KEY1==0) { while(!KEY1) display(); flag3=0; display(); flag++; BUZ=0; BUZ1=1; if(flag==3) { flag3=1; flag=0; } } } if(flag==1) { DC1=0; if(KEY2==0) { delay(5000);

12

if(KEY2==0) { while(!KEY2) display(); tem1++; } }

if(KEY3==0) { delay(5000); if(KEY3==0) { while(!KEY3) display(); tem1--; } } }

if(temp>tem1) { if(!flag) { BUZ=1; BUZ1=0; } } else { BUZ=0; BUZ1=1; }

if(tem1==-1) tem1=50; if(tem1==51) tem1=0;

if(flag==2) { if(KEY2==0) { delay(5000); if(KEY2==0) { while(!KEY2)

13

{ display(); DC_change(tim); } tem2++; } }

if(KEY3==0) { delay(5000); if(KEY3==0) { while(!KEY3) { display(); DC_change(tim); } tem2--; } } Dis_play[1]=tem2/10; Dis_play[2]=tem2; Dis_play[3]=0; if(!Dis_play[1]) Dis_play[1]=0x0a; // 再判断十位是否为0 display(); if(tem2==0) { DC_clos(); } if(tem2==1) { flag3=1; tim=50; DC_change(tim); } if(tem2==2) { flag3=1; tim=125; DC_change(tim); } if(tem2==3) {

14

flag3=1; tim=200; DC_change(tim); } if(tem2==4) { DC_max(); } if(tem2==5) tem2=0; if(tem2==-1) tem2=4; }

// BUZ=0; if(flag==1) { Dis_play[1]=tem1/10; Dis_play[2]=tem1; Dis_play[3]=0; if(!Dis_play[1]) { Dis_play[1]=0x0a; // 再判断十位是否为0 } display(); } }

4.2.3定时器0函数

设置好定时器0的工作方式。 void timer0_int(void) interrupt 1 {

TR0=0; TH0=(65536-100)/256; TL0=(65536-100)%6; TR0=1; timer++; }

15


温控自动风扇系统论文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高一历史知识点总结

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

马上注册会员

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