本科毕业生学士学位论文 结论
本次毕业设计主要是为了改善太阳能控制系统的功能,实现液位和温度的检测与显示,上水控制及输水管道排空水控制。该控制系统基本上考虑了太阳能热水器的功能扩展和档次提升的空间。通过反复实验,系统的程序执行状况、模拟效果演示均是令人满意的。
整个系统存在如下特点:具有一定程度的智能性,可实现自动上水及液位和温度信息的显示,自动排空管道中的存水以节约用水且方便下次使用。但也存在一些不足。受AT89C52资源的限制,没有设计看门狗电路。另外没有加入加热装置,所以水温受天气影响较大。
本次毕业设计让我进一步巩固了四年来学习的理论知识,还要做到理论与实践相结合。如机型和元器件的选择,要以性价比高为原则,以组成最小最优化的系统,硬件和软件在一定程度上具有互换性,多用软件可节省成本,这些都是在设计中应该考虑的。学到了许多课本上学不到的知识软件,通过这次毕业设计使动手能力和理论知识有了很大的提高。
- 20 -
本科毕业生学士学位论文 参考文献
[1] 郑郁正.单片机原理及应用.四川大学出版社.2003.
[2] 求是科技.单片机典型模块设计实例导航(第2版).人民邮电出版社.2008 [3] 王庆. Protel 99 SE&DXP电路设计教程(附盘).电子工业出版社.2006 [4] 康华光.电子技术基础模拟部分.高等教育出版社.1999. [5] 谭浩强.C程序设计(第二版).清华大学出版社.1999
[6] 张福安,李丽欣,等.基于μ’nsp处理器的太阳能热水器智能控制系统.
德州学院学报第23卷第6期.2007年12月
[7] 基于数字温度传感器DS18B20的分布式测温系统的设计.吉林化工学院
学报.第20卷 第3期.2003年9月 [8] www.willar.com
- 21 -
本科毕业生学士学位论文 附录
#include #define ADIN P1 #define ICMOUT P0 #define ON 0 #define OFF 1
#define uchar unsigned char #define uint unsigned int
sbit D1=P2^0; sbit D2=P2^1; sbit D3=P2^2; sbit D4=P2^3;
sbit D5=P2^4;//发光二极管 sbit ICMWR=P2^5; sbit ICMMODE=P2^6;
sbit DQ=P2^7;//DS18B20数据输出口 sbit ADCS=P3^0; sbit ADEND=P3^1; sbit ADWR=P3^6; sbit ADRD=P3^7;//AD sbit S1=P3^2;//按键 sbit SOV1=P3^3; sbit SOV2=P3^4; sbit SOV3=P3^5;//电磁阀 uchar flag1;//温度正负标志位 uchar TEMP[2];//当前温度值 uchar ADV0,ADV;//AD值 unchar wl; uint T0c,T1c;
uchar TW; //温度液位选择位
- 22 -
本科毕业生学士学位论文 uchar sflag; //手动上水模式标志位 uchar Tflag; //高温标志 //uchar EPflag; //排空水标志位
//延时程序
void delayus(uchar us) {
while(us--); //12M,一次6us }
void delayms(uint ms) // 毫秒级延时 {
uint ti; while(ms--) {
for(ti=0;ti<112;ti++){} } }
void delay(uint count) { uint i; while(count) { i=200; } }
while(i>0) i--; count--;
//空操作
void _nop_ (void);
//DS18B20程序段
bit ds18b20_reset(void) //DS18B20复位和初始化 { uchar data i;
DQ=0;//发一个复位脉冲
- 23 -
本科毕业生学士学位论文 delayus(80); DQ=1; delayus(12); if(DQ) return(0); delayus(80); return(1); }
void ds18b20_write(uchar a) { uchar data i; bit c;
for(i=0;i<8;i++) {
c=(a>>i)&0x01; DQ=0; DQ=0; delayus(0); DQ=c; delayus(10);
} DQ=1;
}
uchar ds18b20_read(void) {
uchar data i,a; for(i=0;i<8;i++) {
DQ=0; DQ=0; DQ=0; DQ=1; delayus(0); a=(a>>1); if(DQ) a=a|0x80; delayus(10); }
DQ=1;
//DS18B20写操作 //DS18B20读一字节操作- 24 -