




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计成绩评定表课题名称快热式家用电热水器设计任务要求1、能够用液晶显示当前水温,能显示设定功率档位;2、温度检测显示范围为0099,精确度为1;3、设置3个功率档位指示灯,14档一个灯亮,58档2个灯亮,9档3个灯全亮。0档无功率输出,档位灯不亮;4、设置3个轻触按钮,分别为电源开关,“+”键,“-”键。加热功率分09档,按“+”键依次递增至9档,按“-”键依次减至0档;5、出水温度超过65度时停止加热,并蜂鸣报警,温度降到45度以下时恢复;学生自评成绩功能实现:自评成绩:学生互评成绩互评成绩:指导教师评定成绩评定成绩:共 18 第 17 页 2020-1-13单片机课程设计报告1、 方案论证: 方案一:采用2为数码管显示出水温度,并能显示功率档位,用热敏电阻组成电桥来采集信号,再经放大,A/D转换后送单片机。采用不同功率的电热丝组合得到多种加热功率,本方案采用数码管显示虽然低廉,但需要同时显示温度和功率档位,显示不直观。测温系统,采用了热敏电阻,A/D转换,实现起来较为麻烦。且硬件连接较为复杂,精度和效率方面有待提高; 方案二:采用1602液晶显示出水温度,既方便又直观,采用目前较为先进的集成测温传感器DS18B20,该温度传感器能直接将温度转换成数字信号供单片机直接处理,且硬件连接极为简单,效率和精度相比方案一更高;采用目前较为流行的双向可控硅,通过控制双向可控硅的导通角可实现功率的任意控制,相比多种加热丝,价格更为低廉,功率控制更为灵活。 通过对比我们最终选定方案二。2、 系统硬件电路的设计:1、系统硬件电路简介:系统硬件电路由7个模块组成,即:单片系统及外围电路、电源电路、按键输入电路、液晶显示及指示灯电路、报警电路、功率控制电路和温度检测电路。 本系统所有电路均集成与一块电路板上,既可作为快热式家用电热水器系统使用,又可作为一个单片机最小系统用于其它系统开发;同时支持系统升级! 2、系统框图如下:温度检测显示电路 单 片 机按键输入蜂鸣报警功率控制供 电3、 系统各模块原理图: (1)单片机及外围电路: 设计之初,经过我们的精心考虑,我们最终决定完善单片机的最小系统,这样该系统一方面可以作为一个家用电热水器系统使用,另一方面,还可以作为一个单片机最小系统所使用,便于二次开发。 (2)电源电路: 左边电路将220v的市电转化为5v的直流电,为整个系统供电,右边电路为过零检测电路,用于检测市电的过零点,为功率控制电路提供触发依据; (3)按键输入电路: 按键按下后,产生一个低电平,通过判断相应管脚的低电平,可以识别当前是哪个按键被按下。此处三个按键用于控制加热功率; (4)液晶显示及指示灯电路: 本液晶显示及指示灯电路,由3个LED灯及1602液晶组成。其中3个LED灯用于指示当前的加热档位,1602液晶不仅用于显示当前的水温,还可用于显示当前加热档位,显示更为直观; (5)功率控制及报警电路: 左边蜂鸣器用于超温报警,右边双向可控硅用于控制加热功率,可控硅的导通角可由光电耦合器任意控制,D11用于指示当前加热电路正处于工作状态。 4、整机系统PCB图:3、 系统实物图: 4、 系统程序的设计: (1)快热式热水器必须实现温度检测,温度显示,功率控制3大功能,51单片机实现多任务处理的一个方法就是分时复用,在程序设计时要分配好各任务所占CPU的时间。 分时复用规则:对于实时性要求较高的任务,应放在最里层的循环中,而对实时性要求不是很高的任务,则可放在外层,以达到最佳状态。 本系统的温度及功率档位显示、按键扫描、加热控制任务相对实时性较高,而温度检测则对实时性的要求较低,可将其放在循环外层。开始 (2)程序流程图: 系统初始化 j=300按键扫描功率控制完成循环300次? N 温度检测刷新温度5、 性能测试: 测试数据一览表功率档位加热丝电压超调量0001600.7%2921%31151.4%41331.8%51472.3%61622.9%71853.8%82114.5%92235.1% 本次测试数据,基本上满足了要求。4、 心得体会:本次课程设计在我们组员的密切配合下,历时一周完成,当中学习到了不少知识。硬件电路方面,本次课程设计我们将所有系统集于一体,从原理图的绘制,PCB的布局布线,到电路板的制成,电路的调试,当中遇到了不少问题,通过组员的互相讨论,分析,最终我们成功的解决了这些问题,这既增强了我们的团队合作能力,又增强了我们的实际动手能力;双向可控硅的使用加深了我们对于“弱电控制强电”重要思想的理解。软件方面,本次软件设计,一是增强了自已模块化编程的能力;二是软件调试能力上了一个台阶;三是进一步理解了实时系统与非实时系统的区别以及在程序中CPU的时间分配问题。 5、 分工情况:(1) 硬件电路设计:刘海龙,许琪 (2)系统软件设计:吴春风 (3) 硬件电路调试:许琪,吴春风,刘海龙(4) 设计报告书写:吴春风 六、程序清单:1) 主函数main.c:#include#includelcd1602.h#includeds18b20.h#includejiank.h#includedelay.hvoid main(void) unsigned int j; Sys_Init();/ 系统初始化 lcd1602_init(); ds18b20_init(); show_decp();/辅助显示 EA=1;/开总中断 while(1) for(j=300;j0;j-) Key_Scan(); Heater_Control(); show_temp();/显示温度值 2) 显示子函数lcd1602.c:/*功能:显示当前水温值,显示辅助字符,超温报警控制*/#include#includeds18b20.h#includejiank.h#includedelay.h#define uchar unsigned char#define uint unsigned int#define ulong unsigned long #define lcd1602_command 0#define lcd1602_data 1#define data_port P0sbit rs=P15; / 数据命令选择,0为命令,1为数据sbit rw=P16; / 读写选择,0为写,1为读;sbit en=P17; / 使能lcduchar code DS18B20Buffer1=Power Stall:;/辅助显示字符1uchar code DS18B20Buffer2=Value:;/ 辅助显示字符2uchar TempBuffer8;/温度缓冲区/*LCD1602写函数*/void lcd1602_write(bit style,uchar input) EA=0;/ 读取温度值时,不允许中断 en=0; rs=style; / 选择写入数据还是命令 rw=0; / 选择写 data_port=input; delay_100us(10);/ 1ms en=1; delay_100us(10);/ 1ms en=0;/数据传完; EA=1;/ 读取温度值时,不允许中断/*/*LCD1602初始化函数*/void lcd1602_init(void) delay_100us(20); lcd1602_write(lcd1602_command,0x38); delay_100us(20);lcd1602_write(lcd1602_command,0x38);delay_100us(20); lcd1602_write(lcd1602_command,0x38); lcd1602_write(lcd1602_command,0x38);/设置8位格式,2行,5x7 lcd1602_write(lcd1602_command,0x0c);/整体显示,关光标,不闪烁 lcd1602_write(lcd1602_command,0x06);/设定输入方式,增量不移位 lcd1602_write(lcd1602_command,0x01);/清除屏幕显示/*/*液晶字符定位函数*/void location(unsigned char row, unsigned char column) / 行:row,列:column if(row=0) lcd1602_write(lcd1602_command,0x80|column); if(row=1) lcd1602_write(lcd1602_command,0x80|(column-0x40);/*/*将字符输出到液晶显示(写入液晶即可显示)*/void print(uchar *str) while(*str!=0) lcd1602_write(lcd1602_data,*str); str+; /*/*温度数据转换成液晶字符*/*超温报警提醒*/void temp_to_str(void) /温度数据转换成液晶字符显示 ulong tt=0; tt=read_temperature(); if(tt650000) beep=0;swpst=0;/ 超温报警,断开继电器 if(tt450000) beep=1;swpst=1;/ 回温消除警报,接通继电器 TempBuffer0=tt/100000+0; /十位 TempBuffer1=tt/10000%10+0; /个位 TempBuffer2=46;/小数点 TempBuffer3=tt/1000%10+0;/小数点后一位 TempBuffer4=tt/100%10+0; /小数点后两位 TempBuffer5=0xdf; /温度符号 TempBuffer6=C; TempBuffer7=0; /*/*辅助显示*/void show_decp(void) location(0,0); print(DS18B20Buffer1); location(1,0); print(DS18B20Buffer2);/*/*液晶字符显示*/void show_temp(void) /液晶显示程序 temp_to_str(); /温度数据转换成液晶字符 location(1,7); /液晶字符显示位置 print(TempBuffer); /显示温度 /*/3) 测温子函数ds18b20.c:/*功能:采集当前水温,送至1602液晶显示*/#include#includejiank.h#includedelay.hsbit DB=P14; / ds18b20数据线(单总线)/*DS18B20初始化*/void ds18b20_init(void) unsigned char success_flag=0; EA=0;/ 读取温度值时,不允许中断 DB=1; delay_100us(5); DB=0; delay_100us(14); DB=1; delay_100us(1); if(DB&0X01) success_flag=0; beep=0; else success_flag=1; DB=1; delay_100us(100); EA=1;/ 读取温度值时,不允许中断/*/*功能:向ds18b20写一个字节的数据*/*(从低位写起)*/void write_byte(unsigned char dat) unsigned char i,p; EA=0;/ 读取温度值时,不允许中断 for(i=8;i0;i-) p=dat&0x01;if(p=0) DB=0; delay_100us(1); DB=1;if(p=0x01) DB=0; delay_5us(); DB=1; delay_100us(2);dat=1; EA=1;/ 读取温度值时,不允许中断/*/*功能:从ds18b20读取一个字节的数据*/unsigned char read_byte(void) unsigned char i,value; EA=0;/ 读取温度值时,不允许中断 for(i=0;i=1; DB=0; delay_5us(); DB=1; if(DB&0x01) value|=0x80; delay_100us(1); DB=1; EA=1;/ 读取温度值时,不允许中断 return value;/*/*功能:将读出的数据转化为温度值*/unsigned long read_temperature(void) unsigned char aa,bb,cc=0; unsigned long sum=0; float temp; unsigned int i; ds18b20_init(); write_byte(0xCC); write_byte(0x44); /delay_50ms(5); for(i=180;i0;i-)/提高响应速度 Key_Scan();Heater_Control(); ds18b20_init(); /delay_5us(); write_byte(0xCC); write_byte(0xBE); aa=read_byte();/提取低字节数据 bb=read_byte();/提取高字节数据 cc=aa; aa&=0x0f;/屏蔽高4位获取小数部分数据 bb4;/获取整数部分数据 temp=(float)(aa*0.0625+bb); sum=(long)(temp*10000); return sum; 4)键盘扫描及温控函数jiank.c:/*功能:控制加热功率,控制加热与否,指示当前档位*/#include#includelcd1602.h#includedelay.hsbit key1=P35;/按键+sbit key2=P36;/按键-sbit key3=P37;/加热开关按键sbit beep=P22;/蜂鸣器sbit led0=P10;/ 功率指示sbit led1=P11;/ 功率指示sbit led2=P12;/ 功率指示sbit trigger=P23;/光耦激励信号sbit swpst=P24;/加热开关(继电器) unsigned char Power_Flag=2;/ 功率控制标志unsigned char PowerBuffer2;/ 功率显示缓冲区/*系统初始化*/void Sys_Init(void) swpst=1; trigger=1; /光耦触发禁止 EX0=1; /外部中断0使能 IT0=1; /下降沿触发 TMOD=0X10;/选择定时器1,并设置其工作方式为1; /*/*蜂鸣函数*/void Beep(void) beep=0; delay_50ms(1); beep=1;/*/* 键盘扫描函数*/void Key_Scan(void)/ 功率“+” if(key1=0) delay_100us(200);/ 20msif(key1=0) if(Power_Flag=0&Power_Flag9) Power_Flag+; Beep(); while(!key1);/ 等待按键释放 / 功率“-” else if(key2=0) delay_100us(400);/ 20ms if(key2=0) if(Power_Flag0) Power_Flag-; Beep(); while(!key2);/ 等待按键释放 / 加热开关 else if(key3=0) delay_100us(400);/ 20ms if(key3=0) Beep(); EX0=0; ET1=0; led0=1; led1=1; led2=1; while(!key3);/ 等待按键释放 while(1) if(key3=0) delay_100us(400);/ 20ms if(key3=0) Beep(); EX0=1; ET1=1; while(!key3);/ 等待按键释放 break; else; PowerBuff
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工方案审查收费依据
- 纯碱盐水工工艺创新考核试卷及答案
- 水产养殖智能算法研究报告
- 电器附件制造工新员工考核试卷及答案
- 橡胶育苗工综合考核试卷及答案
- 法治素养考试题库及答案
- 湖北省武汉为明实验学校高中地理必修3教学设计:4.1区域农业发展
- 服装行业服务创新竞争力评估分析报告
- 热处理设备节能改造分析报告
- 促销活动反馈分析报告
- 《仓储与配送实务》教案-17物流高技
- 快递转让合同
- JBT 7946.2-2017 铸造铝合金金相 第2部分:铸造铝硅合金过烧
- 信息系统操作与维护管理制度
- 顺丰速递员工合同模板
- 2024年建筑业10项新技术
- 2019年一级注册消防工程师继续教育三科题库+答案
- 自然拼读法音标教学(课件)人教PEP版英语三年级上册
- 婴幼儿托育服务与管理
- 医院培训课件:《ICU获得性衰弱症及其干预》
- 认养一头牛的营销策划方案
评论
0/150
提交评论