电热水器自动控温系统下位机_第1页
电热水器自动控温系统下位机_第2页
电热水器自动控温系统下位机_第3页
电热水器自动控温系统下位机_第4页
电热水器自动控温系统下位机_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE6电热水器自动控温系统的设计与实现———下位机电路图图1-2下位机电路图图1-2下位机电路图源程序代#include"math.h"#include"reg51.h"#include"INTRINS.H"#defineN4sbitadcstartale=P3^6 ;sbitadc_con=P2^7;sbitadcoe=P3^7;sbitkey1=P1^0;sbitkey2=P1^1;sbitkey3=P1^2;sbitkey4=P1^3;sbitint_0=P3^2;sbitint_1=P3^3;sbitP15=P1^5;sbitP16=P1^6;voiddelay();voiddelay1();voidinituart(void);unsignedchargettemper();voidfillbuff();voidshowbuff();voidled();voidkeyprocess();voidfilter();voidsend_char();codeunsignedcharledtable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//段码0--9,-codeunsignedcharledtable1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段码0.--9.unsignedcharvideo_buff[6]="";//显示缓冲区unsignedcharlevel; //键值unsignedcharlevelflag; //是否按键按下unsignedchartemperflag; //温度是否相同unsignedchartemper; //温度//主函数voidmain(){ EX1=1; //允许INT1中断 EA=1; //中断总允许 IT1=1; //INT1边沿触发方式 level=0;//初始键值 levelflag=0;//无键按下标志 temperflag=0;//键值 temper=0;//adc初始值 P16=0; inituart();//串口初始化 while(1) { filter(); delay1(); showbuff(); //显示温度值 led(); if(levelflag||temperflag) { send_char();//如果有按键按下或者采集到的值与前一刻不相同时,将//温度或档位发给上位机 } } }//延时函数voiddelay(){ inti,j; for(i=0;i<50;i++) for(j=0;j<1;j++); }voiddelay1(){ inti,j; for(i=0;i<150;i++) for(j=0;j<25;j++); }//检测voidled(){ if(level==1) if((video_buff[3]==level)||((video_buff[3]==level+1)&&(video_buff[4]==0)))P16=0; elseP16=1;//如果有按键按下或者采集到的值与前一刻不相同时,将温度或档位发给上位机 else if(((video_buff[3]==level)&&(video_buff[4]!=0))||((video_buff[3]==level+1)&&(video_buff[4]==0)))P16=0; elseP16=1; //如果有按键按下或者采集到的值与前一刻不相同时,将温度或档位发给上位机 }//得到采样值 unsignedchargettemper(){ unsignedcharadcdata; EA=0; //采样时关闭所有中断 adc_con=0; adcstartale=0; _nop_();_nop_(); adcstartale=1; //启动A/D转换,下降沿有效 P0=0xff; while(int_0==0); //等待转换完成 adcoe=0; //允许读ADC0808 adcdata=P0; //将转换后的数据送单片机的P0口 adcoe=1; //不允许读ADC0808 if(temper!=adcdata)temperflag=1;//相邻两次采样值不同时,temperflag置1 EA=1; //打开所有中断 returnadcdata;} //处理采样值,填充显示缓冲区 voidfillbuff(){unsignedinttmp; tmp=temper*1.96078; video_buff[0]=level;//填充档位 video_buff[1]=10; //填充‘-’ video_buff[2]=10; //填充‘-’ video_buff[3]=tmp/100; //填充十位 tmp=tmp%100; video_buff[4]=tmp/10; //填充个位 tmp=tmp%10; video_buff[5]=tmp; //填充小数点位 }//将档位、温度值显示在数码管上voidshowbuff(){ unsignedcharii,j,k; unsignedcharp=0x1; unsignedcharxdata*i; P15=0; for(ii=0;ii<6;ii++) { i=0xfff3;//控制口地址 *i=0x80;//控制写入控制口 j=video_buff[ii]; if(ii==4)k=ledtable1[j]; elsek=ledtable[j]; i=i-3; //位码地址 *i=p; //送位码到PA口 i=i+1; //段码地址 *i=k; //送段码到PB口 p<<=1; //从左向右依次点亮数码管 delay(); } P15=1; }//键盘中断处理程序voidkeyprocess()interrupt2{unsignedchari;for(i=0;i<30;i++);if(int_1)return;//当INT1=1时,无中断,无按键按下if(!key1)level=1;//如果key1==0,则1键按下if(!key2)level=2;//如果key21==0,则2键按下if(!key3)level=3;//如果key3==0,则3键按下if(!key4)level=4;//如果key4==0,则4键按下levelflag=1; //有按键按下video_buff[0]=level; }//均值滤波 voidfilter() //对四次采样进行求平均,考虑到实际中温度的变化是一个比较缓慢的过程,//相邻的几次采样变化幅度不大,且为计算简便,N取值为4{intsum=0,count;for(count=0;count<N;count++) { temper=gettemper(); //一次采样 if(temperflag) fillbuff(); sum+=video_buff[3]*100+video_buff[4]*10+video_buff[5];delay(); }sum=sum/N;video_buff[3]=sum/100; //温度的十位video_buff[4]=sum%100/10;//温度的个位video_buff[5]=sum%10; //温度的小数点位video_buff[0]=level;}//串口中断处理程序voiduartinter(void)interrupt4{ if(RI==1) //如果RI=1,接收完数据 { RI=0; //软件清零 levelflag=1; level=SBUF-0x30; if(level>=1&&level<=4) { video_buff[0]=level; //将接收到的档位值填写显示缓冲区 } } if(TI==1) //如果TI=1,发送完数据 { TI=0; //软件清零 }}//串口初始化voidinituart(){ SCON=0X50; //方式1,8位数据,允许接收sm0sm1sm2rentb8rb8tiri TMOD=0X20; //设置timer1,方式2(方式2,自动重装入初值的8位计数器,串行通信时用) TH1=0XFD;//初始值 TL1=0xfd; TR1=1; //启动timer1,开始计时 ES=1;// 开启串口中断}//向上位机发送档位、温度voidsend_char(){ if(!TI) { if(temperflag==1) //温度有变化 { SBUF=video_buff[3]+0x30; //发送十位给上位机 while(TI==0); //等待发送完,进入中断处理 SBUF=video_buff[4]+0x30; //发送个位给上位机 while(TI==0); //等待发送完,进入中断处理 SBUF='.'; //发送小数点给上位机 while(TI==0); //等待发送完,进入中断处理 SBUF=video_buff[5]+0x30; //发送小数点位给上位机 while(TI==0); //等待发送完,进入中断处理 SBUF='-'; //发送‘-’给上位机 while(TI==0); //等待

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论