太阳能热水器控制器_第1页
太阳能热水器控制器_第2页
太阳能热水器控制器_第3页
太阳能热水器控制器_第4页
太阳能热水器控制器_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、2009级学生电子综合课程设计 电子综合课程设计报告书课题名称太阳能热水器控制器的设计姓 名*学 号*院 系通信与电子工程学院专 业电子科学与技术指导教师* 讲师2012年 12月30日 一、 设计任务及要求:1. 提出一个基于单片机的太阳能热水器控制器的整体设计方案。2.对整体的电路进行具体的设计以及程序的编写。3.运用PROTEUS对电路进行仿真以及VISIO软件进行流程图绘制。4.控制器信息通过LCD显示,包括当前系统时间,水温和水量。5.测温范围13到52 。可手动调节水位。 指导教师签名: 年 月 日 二、指导教师评语:指导教师签名: 年 月 日 三、成绩验收盖章: 年 月 日 目录

2、 电子综合课程设计报告书1目录3太阳能热水器控制器的设计41设计要求42总体设计方案43硬件电路设计43.1系统电路43.2显示电路43.3水位调节电路43.4时钟电路53.5温度控制电路54 软件设计64.1 系统软件设计64.2 主要程序设计65 系统仿真76设计总结8参考文献8附录9太阳能热水器控制器的设计#(湖南城市学院通信与电子工程电子科学与技术专业,益阳,413000)1设计要求1.水温显示:水温显示在LCD上,测温范围1352;精度±1。2.水位显示:用LCD来显示当前水位。3.水位设置:通过按变阻器“”或“”键可以调整水位。4.时间显示:当前系统时间显示在LCD上。2

3、总体设计方案设计并制作如图2.1所示的太阳能热水器控制器。AT89C51温度传感器水位检测电路水箱加水电磁阀水位指示电路加热器当前系统时间温度显示键盘报警电路工作状态指示电路图2.1 太阳能热水器控制器3硬件电路设计3.1系统电路系统电路原理图如3.1所示。系统电路主要由温度控制电路,水位调节电路,时钟电路等组成。3.2显示电路系统电路原理图如3.2所示。显示电路用型号为LGM12641BS1R的LCD显示,显示电路测试时可在LCD上面显示当前系统时间,水温范围及当前水温,水箱水量。3.3水位调节电路水位调节电路设计原理图如3.3所示。水位调节电路采用ADC0832,电压表和滑动变阻器组成。通

4、过改变滑动变阻器的阻值来改变电压,将信息存入ADC0832,传入到显示电路。3.4时钟电路时钟电路的设计原理图如3.4所示。时钟电路采用DS1302,电容和电源组成。时钟电路通过DS1302获取当前系统时间。3.5温度控制电路温度控制电路的设计原理图如3.5所示。温度控制电路采用DS18B20,电阻和电源组成。电路通过DS18B20上的两个按钮调节所需要的温度值,并在显示电路中LCD上显示。图3.1 系统电路原理图 图3.2 显示电路原理图 图3.3 水位调节电路原理图 图3.4 时钟电路原理图 图3.5 温度控制电路原理图4 软件设计4.1 系统软件设计太阳能热水器控制器主程序流程图如图4.

5、1所示。系统初始化后,液晶显示系统默认设置,包括当前系统时间,水温范围及当前水温,储水量。运行后可以通过调节控制水位电路中的滑动变阻器改变储水量,通过调节温度控制电路达到需要的水温。4.2 主要程序设计1)获取当前系统时间程序clock.c2)液晶驱动程序lcd.c3)键盘程序key.c 具体程序见附件。开始单片机系统初始化初始化AT89C51NY判断初始化标志位=55H?读EEPROM参数到数据存储器写初始化参数到EEPROM看门狗检测水温检测水位扫描显示图4.1 太阳能热水器控制器主程序流程图5 系统仿真整体仿真电路图如图5.1所示。图5.1 整体电路proteus仿真图6设计总结本次课程

6、设计采用AT89C51单片机完成简易太阳能热水器控制器的设计,期间遇到的最大的问题就是程序的设计。程序的设计需要严谨的思维逻辑,良好的书写规范,最后才能调试成功。这是我在此次设计中得到的最大成果。只有把所学的理论知识与实践相结合起来,从理论出发,以实际有用产品为目标,才能提高自己的实际动手能力和独立思考的能力,成为有用之才。参考文献1 李建忠.单片机原理及应用M.西安:西安电子科技大学出版,2002:63-78.2 张俊谟.单片机中级教程M.北京:北京航空航天大学出版,2000:36-45.3蔡可健.节能热水器智能电路设计方案J.智能仪器仪表,2004-9.4马敏,孙寅聪,张炜宇.太阳能热水器

7、控制器的设计M.河南科学出版社,2003-4 5康光华,陈大钦.电子技术基础(模拟部分) M.高等教育出版社,19996 王娟.Proteus在单片机专题实训中的应用J.产品开发与应用,2012,11(01):67-687 范焘.基于Proteus的单片机虚拟实验教学研究J.实验教学,2011,33(01):131-132附录/*程 序 名:LCD.c编 辑 者:*编辑时间:2012-12-22编译环境:Keil 4硬件平台:AT89C51 功能描述:LCD显示程序*/#ifndef _LCD_12864#define _LCD_12864/*预定义*/#define uchar unsign

8、ed char#define uint unsigned int#define port P0sbit rs=P22; / 10sbit rw=P21; /11sbit e=P20; / 12sbit cs1=P23; /27sbit cs2=P24; /26/* 函数名称:Delay()* 功 能:延迟时间=a*1ms* 入口参数:* 出口参数:无*/void Delay(uint a) uchar i; while(a-) for(i=0;i<1250;i+);/* 函数名称:Lcd_Display_On()* 功 能:LCD显示开* 入口参数:无* 出口参数:无*/void Lcd

9、_Display_On() port=0x3f; rs=0; rw=0; e=1; e=0; /*名称:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )*功能:显示16X8字符(字母) *入口参数:*出口参数:*说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示 */void Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point ) uchar i , j,temp; temp=y; i

10、f( bit_flag ) for( i=0; i<2; i+ ) x+=i; y=temp; for( j=0;j<8;j+ ) Lcd_Set_X_Y( x, y ); y+; Lcd_Write_Byte( point i*8 + j ); else for( i = 0; i < 2; i+ ) x += i; y = temp; for( j = 0; j < 8; j+ ) Lcd_Set_X_Y( x, y ); y+; Lcd_Write_Byte( point i * 8 + j ); /* 名称:Lcd_Data(uchar * clock_time

11、 )* 功能:显示日期 * 入口参数:无* 出口参数:无 * 说明 : 时间数组 BCD 码形式*/void Lcd_Data(uchar * clock_time ) uchar i=0; clock_time += 3; /显示 "year 年 month 月 day 日" i= * clock_time >> 4; Lcd_Character_16X8( 1, 0, 80, letter_logoi); /显示 day的高位 i= * clock_time & 0x0f; Lcd_Character_16X8( 1, 0, 88, letter_l

12、ogoi); /显示 day的低位 Lcd_Character_16X16( 1, 0, 96, data_logo2); /显示 日 clock_time +; i= * clock_time >> 4 ; Lcd_Character_16X8( 1, 0, 48, letter_logoi); /显示 month的高位 i= * clock_time & 0x0f; Lcd_Character_16X8( 1, 0, 56, letter_logoi); /显示 month的低位 Lcd_Character_16X16( 1, 0, 64, data_logo1); /

13、显示 月 clock_time + ; i= * clock_time >> 4; Lcd_Character_16X8( 1, 0, 16 , letter_logoi); /显示 year的高位 i= * clock_time & 0x0f; Lcd_Character_16X8( 1, 0, 24 , letter_logoi); /显示 year的低位 Lcd_Character_16X16( 1, 0, 32, data_logo0); /显示 年/* 名称:Lcd_Data(uchar * clock_time )* 功能:显示日期 * 入口参数:无* 出口参数

14、:无 * 说明 : 时间数组 BCD 码形式*/void Lcd_Clock( uchar * clock_time ) Lcd_Data( clock_time ); /显示日期 Lcd_Time( clock_time ); /显示时间uint Lcd_Temperture( uchar * temperature ) uchar temp; uchar Curr_tem; switch( * temperature & 0x0f ) /查表 精确到 0.1 case 0x00: temp = 0; break; case 0x01: temp = 0; break; case 0

15、x02: temp = 1; break; case 0x03: temp = 2; break; case 0x04: temp = 2; break; case 0x05: temp = 3; break; case 0x06: temp = 4; break; case 0x07: temp = 4; break; case 0x08: temp = 5; break; case 0x09: temp = 6; break; case 0x0a: temp = 6; break; case 0x0b: temp = 7; break; case 0x0c: temp = 8; break

16、; case 0x0d: temp = 8; break; case 0x0e: temp = 9; break; case 0x0f: temp = 9; break; default: break; Curr_tem = temp; Lcd_Character_16X8( 1, 4, 104, temperture_logo2 ); Lcd_Character_16X8( 1, 4, 96, temperture_logo1 ); Lcd_Character_16X8( 1, 4, 88, letter_logotemp ); / 小数位 Lcd_Character_16X8( 1, 4,

17、 80, temperture_logo0 ); / . temp = ( * temperature ) >> 4; temperature +; temp |= ( * temperature ) << 4; Lcd_Character_16X8( 1, 4, 72, letter_logo temp % 10 ); /个位 Lcd_Character_16X8( 1, 4, 64, letter_logo temp /10 ); /十位 /* if( temp >= 30 ) Lcd_Character_16X16( 1, 6, 112, sensor_in

18、ducator_logo0 ); /大雨30度显示图形 else if( temp < 20 ) Lcd_Character_16X16( 1, 6, 112, sensor_inducator_logo2 ); /小于20度显示图形 else Lcd_Character_16X16( 1, 6, 112, sensor_inducator_logo1 ); /大于20度小于30度/显示图形 return (Curr_tem +temp*10);/* 名称: Lcd_Temperature( uchar * temperture )* 功能: 显示温度* 入口参数: 温度* 出口参数: 无*/void Lcd_AD( uint Voltage ) Lcd_Character_16X8( 1, 4, 48, AD_logo1 ); / V Lcd_Character_16X8( 1,

温馨提示

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

评论

0/150

提交评论