ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:737.19KB ,
资源ID:2754168      下载积分:14 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2754168.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(水温自动控制新版系统.docx)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

水温自动控制新版系统.docx

1、 《电子技术综合设计》 设计汇报 设计题目: 水温自动控制系统 组长姓名: 学 号: 专业和班级: 工业自动化14-16班 姓 名: 学 号: 专业和班级: 工业自动化14-16班 姓 名: 学 号: 专业和班级: 工业自动化14-16班

2、 时 间: ~ 年第(1)学期 指导老师: 陈烨 成 绩: 评阅日期: 一、 课题任务 设计并制作一个水温自动控制系统,对1.5L净水进行加。水温保持在一定范围内且由人工设定。 细节要求以下: 1.温度设定范围为40℃~90℃ ,最小分辨率为0.1℃,误差≤1℃。 2.可经过LCD显示器显示温度目标值和实时温度。 3.能够经过键盘调整目标温度数值。 二、 方案比较 1. 系统模块设计 为完成任务目标,能够将系统分为以下多个部分:5V直流电供电模块、测温模块、80C52单片机控制系统、键

3、盘控制电路、温度显示模块、继电器控制模块、强电加热电路。经过各模块之间相互配合,能够完成水温检测、液晶显示、目标值设置、水温控制等功效。 系统方框图以下: 2. 5V直流电供电模块 方案一:直接用GP品牌9v电池,然后接经过三端稳压芯片7805稳压成5伏直流电源提供给单片机系统使用,接两个5伏电源滤波电容后输出。 方案二:经过变压器,将220v市电转换成9v左右交流电,变压器输出端9V电压经桥式整流并电容滤波。要得到一个比较稳定5v电压,在这里接一个三端稳压器元件7805。 因为需要给继电器提供稳定5V电压,而方案一中造成电池过分损耗,无法稳定带动

4、继电器连续工作,所以我们选择能够提供愈加稳定5v电源方案二。 3. 测温模块 经查阅资料,IC式感温器在市场上应用比较广泛有以下多个: AD590:电流输出型测温组件,温度每升高1 摄氏度,电流增加1μA,温度测量范围在-55℃ ~150℃之间。其所采集到数据需经A/D 转换,才能得到实际温度值。 DS18B20:内含AD转换器,所以除了测量温度外,它还能够把温度值以数字方法(9 B i t ) 送出,所以线路连接十分简单,它无需其它外加电路,直接输出数字量,可直接和单片机通信,读取测温数据。它能够达成0.5℃固有分辨率,使用读取温度暂存寄存器方法还能达成0.0625℃以上精度,温度测

5、量范围在-55℃~125℃ 之间,应用方便。 SMARTEC感温组件:这是一只3个管脚感温IC,温度测量范围在-45℃ ~ 13℃,误差能够保持在0.7℃ 以内。 max6225/6626:最大测温范围也是-55~+125℃,带有串行总线接口,测量温度在可测范围内误差在4℃以内,较大,故舍弃该方案。 本设计选择DS18B20感温IC,这是因其性能参数符合设计要求,接口简单,内部集成了A/D 转换,测温更简便,精度较高,反应速度快,且经过市场考察,该芯片易购置,使用方便。 下面是DS18B20感温IC实物和接口图片 4. 80C52单片机控制系统 AT89C52是一个低电压,高性

6、能CMOS 8位单片机,片内含8k bytes可反复擦写Flash只读程序存放器和256 bytes随机存取数据存放器(RAM),器件采取ATMEL企业高密度、非易失性存放技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存放单元,AT89C52单片机在电子行业中有着广泛应用。 5. 键盘控制电路 方案一:四键设定,一个十位控制键,一个个位控制键,一个位控制键,一个确定键,经过四键配合设定为度,该方案接线和程序简单,但实际操作不太便捷。 方案二:矩阵键盘设定,经过按键输入不一样数字实现温度设定,电路连接比较简单,程序较方案一复杂,但已经在学习过程中接触过矩阵键盘

7、编程技巧,有一定可行性,且操作起来愈加符合我们日常习惯。 此次设计暂定采取矩阵键盘来作为温度设定电路输入。 6. 温度显示模块 方案一:使用数码管显示,经过数码管显示被测温度和设定温度。该方案程序简单,且已学习过其编程技巧,但硬件占用单片机I/O口较多,对于尽可能节省端口,让线路简单来说不是好方法,而且显示也不够直观灵活,只能显示数字,。 方案二:使用液晶屏1602显示。1602可显示两行字符及数字,能够用来显示设定温度及测量温度,较之数码管显示愈加清楚直观,即使以前没有接触过相关知识,但该器件上手比较轻易,能够在短期内学会其使用方法。 1602较之数码管愈加符合此次设计要求,所以使

8、用1602作为显示器件。 7. 继电器控制模块 方案一:采取一般控制方法,即水温温度抵达临界温度时,控制继电器开闭。但因为水温改变快,且惯性大,不易控制精度。 方案二:采取PWM控制加PID算法,经过采取PWM能够产生一个PWM波形,而PWM波形占空比是经过PID算法调整,这么就能够经过控制加热电路开、断时间比来控制加热器功率进而控制温度改变,从而使精度提升。此方法中硬件上能够使用固态继电器或晶闸管控制加热器工作。 我们选择方案二。 三、 电路设计 1. 电源电路 整个系统需要使用5V直流电和220V交流电。电源电路采取变压器和稳压模块,将工频电压降为5V直流电

9、为系统供电。首先用变压器模块20V交流电降为9V交流电,接入整流电桥,变为直流电输出,再使用三端稳压芯片7805稳压为5V。L7805输出端要联上电解电容,滤除交流电干扰,预防损坏单片机系统。 LM7805最大能够输出1A电流,内部有限流式短路保护,短时间内,比如几秒钟时间,输出端对地(2脚)短路并不会使7805烧坏。 2. 温度传感器 DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD,共用地线GND。外部供电方法(VDD接+5V,且数据传输总线接4.7k上拉电阻,其接口电路以下图(外接电源工作方法)所表示。 3. 单片

10、机最小系统 单片机最小系统,或称为最小应用系统,是指用最少元件组成单片机能够工作系统.对51系列单片机来说,最小系统通常应该包含:单片机、晶振电路、复位电路 4. 按键、显示电路 这部分实际上是一个单片机最小系统基础电路,键盘选择矩阵键盘可满足要求,经过按键输入不一样数字实现温度设定。   在显示方面选择常见1602液晶显示模块。经过对应程序,能够实现温度实时显示,电路连接也比较简单,只需连接数据总线,和三根控制线即可实现数据控制,实现显示功效。 1602显示电路 5. 继电器温控 单片机驱动继电器通断,从而比较轻易实现对小功率电热棒加热。本系统利用

11、继电器吸合是否来实现水温自动化控制。此次设计采取型号为JRC-21F继电器。其特点有:  (1).超小型,低功耗;  (2).触点型式:1H,1Z(1A.AC); (3).触点负载:2A,120VAC;  (4).外型尺寸:15.7X10.4X11.4  图是驱动较大功率继电器接口,当p1.1(连接单片机输出口)输出低电平时,Q1导通,继电器吸合;当p1.1输出高电平时,Q1截止,继电器断开。因为继电器吸合时电流比较大,所以在单片机和继电器之间增加了光电耦合器件作为隔离电路。R3是光电耦合输出管限流电阻,R4是驱动管Q1基极泄放电阻。 整体硬件电路见附录 四、 程序设计

12、 程序结构包含:主程序、传感器测温程序、lcd1602显示程序、键盘扫描程序、 PID计算程序、PWM波形发生程序。 主程序步骤图以下所表示: 传感器测温程序步骤图: lcd1602显示程序步骤图: 键盘扫描程序步骤图: 温度比较和PID计算程序步骤图: PWM波形发生程序(定时器中止)步骤图: 五、 测试方案 1.静态测试: 室温状态下,分别用温度计和18B20传感器检测水温,观察二者是否有误差。 2.动态测试: 用继电器控制“热得快”对1升水加热,用键盘设定需加热温度值,观察、统计1602显示器上实

13、时水温值改变过程和每次改变温度设定值后PID调整超调量。数次调试并和修改PID参数来完善该系统。检验水温稳定值是否满足设计目标要求。 六、 系统调试 1.加热水量和加热器功率确定 加热器水量和功率应该组成匹配,加热水量过多或功率过小会造成加热时间过长,而加热水量过少或功率过大会使超调增大,不利于控制。我们选择1L容器作为测试对象,估计将20摄氏度水加热到100摄氏度需要5分钟。经过计算这么加热器功率最少为1120w,所以选择1000w加热管。满足1L容器很多,不过广口盆水位较低,不利于加热管安放。经过努力,找到了适宜容器(实物见附件),恰能使得加热棒处于最为适宜水位深度。 2.上下

14、层温差优化和电动机电源选择 电动机本不在设计范围里面,不过伴随系统调试进行,发觉容器中水极难实现热均匀。容器中上下层温差过大,造成温度传感器所测数据极不正确,滞后过大,很不利于控制。所以又添加一个直流减速电机带动桨叶加速冷热水对流,从而让容器里面水受热均匀,方便测温模块对系统水温实时监测。这一额外电动机没有在事先考虑器件电气匹配范围内,所以当它和加热模块一同共用5v直流电源时,已超出了整流模块所能提供最大电流,于是又添加了一个电源给电动机供电。 3. PID程序修改调试 当实际水温和目标值差距过大时,加热器只需满功率工作(或完全停止工作)即可满足要求。此时采取PID控制意义不大,且PI

15、D控制范围很大,参数极难整定,而微分步骤也轻易受到干扰造成加热器无法满功率运行。所以,在满足控制精度前提下,可将PID控制范围缩小到设定温度±1℃之内。范围缩小后,PID参数轻易调整,控制效果显著增强。经过调试后PID参数分别为Proportion = 10,Integral = 8,Derivative =6。 4.PWM波周期调试 PWM波周期越短,控制精度越高。但PWM波形输出需要单片机中止程序进行控制,中止频率过高会干扰单片机中主程序运行。测温模块18B50对时间要求很严格,所以测温模块读取数据期间会和中止程序冲突。若18B20读数期间许可中止中止会造成其温度输出出现大量错误;若不

16、许可中止会造成PWM波周期频繁改变。经过调试,将PWM波周期设为5s。 七、 数据测试和处理 1.静态温度测试 室温状态下,分别用温度计和18B20传感器检测水温,得到结果分别为。温度计显示17.5℃,18B20传感器显示温度17.9℃,在误差许可范围内,满足要求。 2.动态温度测试: 令测温系统工作,对1.5L净水加热,设定温度分别为50℃,60℃, 80℃,每10s统计一次显示器幕上数据,绘制其温度改变曲线,并计算温度控制超调量,稳态误差。 温度数据及曲线以下: (1) 目标温度50度: 时间(10s) 0 1 2 3 4 5 6 7 温度(℃) 3

17、0 30 30.1 30.5 31.1 32 32.7 33.5 时间(10s) 8 9 10 11 12 15 17 18 温度(℃) 34.5 35.3 36.1 37.1 38.1 40.6 42.3 43.2 时间(10s) 19 20 21 23 24 25 26 27 温度(℃) 44.1 45 45.8 47.6 48.4 49.1 49.7 50.8 时间(10s) 28 29 30 31 32 33 34 35 温度(℃) 51.2 51.6 51.8 51.8

18、 51.8 51.8 51.8 51.7 时间(10s) 36 39 40 43 46 51 54 57 温度(℃) 51.6 51.3 51.1 50.8 50.6 50.5 50.3 50.1 时间(10s) 60 63 64 66 68 69 70 72 温度(℃) 50 49.8 49.9 50.1 50.5 50.7 50.7 50.7 时间(10s) 75 78 81 84 87 88 90 91 温度(℃) 50.5 50.4 50.2 50.1 49.9 49.8 5

19、0 50 时间(10s) 92               温度(℃) 50               超调量为3.6% (2) 目标温度60度: 时间(10s) 0 1 2 3 4 5 6 7 温度(℃) 50 50.5 51.1 51.8 52.6 53.5 54.1 55 时间(10s) 8 9 10 11 12 13 14 15 温度(℃) 55.8 56.6 57.5 58.3 58.9 59.8 60.3 61.2 时间(10s) 16 17 18

20、 19 20 21 24 27 温度(℃) 61.5 61.6 61.6 61.6 61.5 61.4 61.1 60.8 时间(10s) 30 32 33 34 36 37 40 41 温度(℃) 60.4 60.2 60.1 60 59.8 60 60.2 60.3 时间(10s) 42 45 47 48 50 52 53 54 温度(℃) 60.3 60.2 60 60 59.8 59.9 60.1 60.3 时间(10s) 56 57             温度(℃

21、 60.4 60.3             超调量为2.5% (3) 目标温度80度: 时间(10s) 0 1 2 3 4 5 6 7 温度(℃) 60 60.8 61.4 62.1 62.8 63.7 64.5 65.3 时间(10s) 8 9 10 11 12 13 15 16.5 温度(℃) 66.1 66.8 67.6 68.3 69.1 70.3 71.3 72.4 时间(10s) 18 19 21 22 23 24 25 26 温度(℃) 73.5 7

22、4.3 75.6 76.4 77 77.7 78.4 78.9 时间(10s) 27 28 29 30 31 32 33 34 温度(℃) 79.5 80.1 80.3 80.5 80.5 80.3 80.2 80.1 时间(10s) 35 36 37 38.5 39 40 41 42 温度(℃) 79.8 79.6 79.4 79.3 79.3 79.3 79.4 79.4 时间(10s) 43 44 45 46 47 48 49 50 温度(℃) 79.5 79.6 79.7 7

23、9.8 79.9 80 80 79.9 时间(10s) 51 52 53 54 55 56 57 58 温度(℃) 79.7 79.6 79.6 79.6 79.7 79.7 79.8 80 时间(10s) 59 60 61 62 63       温度(℃) 80.1 80 80 80 80       超调量为0.6% 由以上温度曲线能够看出,水温能够保持在设定温度上下,控制过程中超调量<4%,且稳态时误差在为±0.3℃,满足系统设计要求。 八、 设计总结 经过此次应用系统设计,在很大程度上

24、提升了我们独立思索、分析判定和动手实践能力,也对系统设计过程和设计过程中应注意问题有了初步认识,加深了我们对所学知识了解。 出于对本身知识及可获取学习资源考虑,我组此次电子综合设计选题最终定为水温自动控制系统设计,该题目为往年电设题目,参考资料较易获取且基础未超出我们现掌握知识水平。 在参考了书本及网络上设计思想以后,我们确定了该系统设计方案初稿,并讨论了设计方案可行性。讨论确定出试验所需器材和组员分工,由一名组员进行程序编写,另外两名组员进行硬件电路焊接及调试。 经过几次检验、调试和修改以后,基础实现了此次设计部分预期目标:可经过LCD显示器显示温度目标值和实时温度,能够经过键盘调整目

25、标温度数值等功效。 在系统调试过程中,碰到部分问题: 1.因为一开始没有估量好器件占用空间,所购万用板太小,无法满足试验要求,以后又换用了一个较大万用板。在最小系统焊接完成后,因为没有搞清楚按键内部接线,使单片机一直处于复位状态,无法正常工作,后用万用表排查出该错误。 2.在加热控制器件选择上花费了较多精力,开始设计方案是用光电耦合器配合双向晶闸管利用PWM波控制加热功率来实现温度稳定,但在硬件试验时发觉控制导通无法实现,且电压、电流余量有限,不能满足设计要求。便换用了固态继电器配合三极管来实现功率控制。 3.在完成基础功效后,发觉因为水温分布不均匀,温度传感器无法立即检测到水温改变以

26、改变加热功率,减小超调量,又在原系统中增加了电机搅拌器以使水温分布均匀。 4. 在PID参数整定中,发觉初始PID算法过于简单,造成被控变量误差和稳定性均较差。一般位置PID算法极难满足水温控制系统要求。查阅资料后,缩小了PID控制范围,在满足控制精度前提下,温控范围缩小到设定温度±1℃之内。范围缩小后,PID参数轻易调整,控制效果显著增强。 这些问题处理帮助我们融合所学知识,极大提升了我们动手能力。经过对本设计反思总结,加深了对机械,单片机,自动控制等多方面知识了解,也激发了我们对电子设计极大爱好,这对我们以后学习生活有着十分关键作用。 九、

27、 参考文件 1. 刘海成.《AVR单片机原理及测控工程应用》 .北京航空航天大学出版社 2. 周润景 刘晓霞.《单片机实用系统设计和仿真经典实例》.电子工业出版社 3. 谢维成 杨加国.《单片机原理和应用及C51程序设计》.清华大学出版社 4. 大学生电子设计竞赛组委会.《第五届全国电子设计竞赛获奖作品选编》.北京理工大学出版社 5. 黄志伟 《全国大学生电子设计竞赛系统设计》。北京航空航天出版社 6. 51黑电子论坛 十、 附录 1.

28、电路原理图 2.程序 #include #include #include #include #define uchar unsigned char #define uint unsigned int sbit DQ =P2^7; //定义端口 sbit RS=P2^5; sbit RW=P2^4; sbit EN=P2^3; sbit output=P2^0; sbit P0_0=P0^0; sbit P0_

29、1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; uchar flag;//flag为温度值正负号标志单元 uchar c[2];//18b20直接输出量 uint cc,cc2;//变量cc为18b20输出量直接计算值,cc2为放大100倍温度值 float cc1;//cc1为温度值 uchar buff1[10]={"Set temp: "};//1602屏显示 uchar buff2[10]={"Cur temp: "};//1602屏显示 uchar set_c[2]={'5','0'}; //用于温度设置及1

30、602屏显示 uchar buff3[6]={"+00.0 "}; //1602屏显示 uchar temper,set_temper=50;//temper用于PID测量值(整数),set_temper用于PID参考值 uint s; //PID测量值(小数) struct PID { unsigned int SetPoint; // 设定目标 unsigned int Proportion; // 百分比常数 unsigned int Integral; // 积分常数 unsigned int

31、 Derivative; // 微分常数 unsigned int LastError; // Error[-1] unsigned int PrevError; // Error[-2] unsigned int SumError; // Sums of Errors }; struct PID spid; // 创建PID结构 uint rout; // PID Output uint rin; // PID Input unsigned char high_time

32、low_time,count=0;//占空比调整参数 void delay(uint useconds) //延时程序 { for(;useconds>0;useconds--); } uchar ow_reset(void) //复位(18B20) { uchar presence; DQ = 0; // DQ 低电平 delay(50); /

33、/ 480ms DQ = 1; // DQ 高电平 delay(3); // 等候 presence = DQ; // presence 信号 delay(25); return(presence); // 0许可, 1严禁 } uchar read_byte(void)

34、 //从单总线上读取一个字节(18B20) { uchar i; uchar value = 0; for (i=8;i>0;i--) { value>>=1; DQ = 0; DQ = 1; delay(1); if(DQ)value|=0x80; delay(6); } return(value); } void write_byte(uchar val) //向单总线上写一个字节(18B20) { uchar i; for (i=8; i>0;

35、 i--) // 一次写一位 { DQ = 0; DQ = val&0x01; delay(5); DQ = 1; val=val/2; } delay(5); } void Read_Temperature(void) //读取温度(18B20) { ow_reset(); write_byte(0xCC); // 跳过 ROM write_byte(0xBE); // 读 c[1]=read_byte();

36、 //低字节 c[0]=read_byte(); //高字节 ow_reset(); write_byte(0xCC); write_byte(0x44); // 再次开始 cc=c[0]*256.0+c[1]; // 18b20输出量直接计算值 if (c[0]>0xf8) {flag=1;cc=~cc+1;}else flag=0; cc1=cc*0.0625; //计算出温度值 cc2=cc1*100; //温度值放大100倍,放在整型变量中便于取数字 c[0]=(c[0]

37、<<4)&0x7f; s=(unsigned int)(c[1]&0x0f); s=(s*100)/16; //温度值小数部分 c[1]=c[1]>>4; temper=c[0]|c[1]; //温度值整数部分 delay(1000); //用于PID测量温度值 return; } void fbusy() //检验忙函数(1602) { P1 = 0xff; RS = 0; RW = 1; EN = 1; EN = 0; while((P1 & 0x80)) { EN = 0;

38、 EN = 1; } } void wc51r(uchar j) //写命令函数(1602) { fbusy(); EN = 0; RS = 0; RW = 0; EN = 1; P1 = j; EN = 0; } void wc51ddr(uchar j) //写数据函数(1602) { fbusy(); //读状态; EN = 0; RS = 1; RW = 0; EN = 1; P1 = j; EN = 0; } void init() //1602初始化

39、{ wc51r(0x01); //清屏 wc51r(0x38); //使用8位数据,显示两行,使用5*7字型 wc51r(0x0c); //显示器开,光标开,字符不闪烁 wc51r(0x06); //字符不动,光标自动右移一格 } void display(void) //1602显示程序1(初始化显示) { uchar k; delay(10); init(); wc51r(0x80); //写入显示缓冲区起始地址为第1行第1列 for (k=0;

40、k<10;k++) //第一行显示提醒信息"Set temp:" { wc51ddr(buff1[k]);} for (k=0;k<2;k++) { wc51ddr(set_c[k]);} //显示设定温度 wc51r(0xc0); //写入显示缓冲区起始地址为第2行第1列 for (k=0;k<10;k++) //第二行显示提醒信息"Cur temp:" { wc51ddr(buff2[k]);} buff3[1]=cc2/1000+0x30; if ( buff3[1]==0x30) buff3[1]

41、0x20;//取出十位,转换成字符,假如十位是0不显示。 buff3[2]=cc2/100%10+0x30;//取出个位,转换成字符 buff3[4]=cc2/10%10+0x30;//取出小数点后一位,转换成字符 if (flag==1) buff3[0]='-';else buff3[0]='+'; for (k=0;k<6;k++) //第二行显示温度 { wc51ddr(buff3[k]);} } void display2(void) //1602显示程序2(循环显示) { uchar k; delay(

42、10); wc51r(0xca); buff3[1]=cc2/1000+0x30; if ( buff3[1]==0x30) buff3[1]=0x20;//取出十位,转换成字符,假如十位是0不显示。 buff3[2]=cc2/100%10+0x30;//取出个位,转换成字符 buff3[4]=cc2/10%10+0x30;//取出小数点后一位,转换成字符 if (flag==1) buff3[0]='-';else buff3[0]='+'; for (k=0;k<6;k++) //第二行显示温度 { wc51ddr(buff3[k

43、]);} } uchar scan_key()//键盘检测程序,16个按键输出序号1~16 { uchar set_num=0; uchar dushu,dushu1; P0=0xff; P0_0=0; //扫描第一行 dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { delay(900); dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { dushu1=dushu; while(dushu!

44、0xf0) { dushu=P0; dushu=dushu&0xf0; } delay(900); dushu=P0; dushu=dushu&0xf0; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } if(dushu1==0xe0) set_num=1; else if(dushu1==0xd0) set_num=2; e

45、lse if(dushu1==0xb0) set_num=3; else if(dushu1==0x70) set_num=4; } } P0_0=1; delay(900); P0_1=0; //扫描第二行 dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { delay(900); dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { dushu1=dus

46、hu; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } delay(900); dushu=P0; dushu=dushu&0xf0; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } if(dushu1==0xe0) set_num=5; else if(dushu1==0xd0)

47、 set_num=6; else if(dushu1==0xb0) set_num=7; else if(dushu1==0x70) set_num=8; } } P0_1=1; P0_2=0; //扫描第三行 dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { delay(900); dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { du

48、shu1=dushu; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } delay(900); dushu=P0; dushu=dushu&0xf0; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } if(dushu1==0xe0) set_num=9; else if(dushu1==0

49、xd0) set_num=10; else if(dushu1==0xb0) set_num=11; else if(dushu1==0x70) set_num=12; } } P0_2=1; delay(900); P0_3=0; //扫描第四行 dushu=P0; dushu=dushu&0xf0; if(dushu!=0xf0) { delay(900); dushu=P0; dushu=dushu&0xf0; if(dus

50、hu!=0xf0) { dushu1=dushu; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } delay(900); dushu=P0; dushu=dushu&0xf0; while(dushu!=0xf0) { dushu=P0; dushu=dushu&0xf0; } if(dushu1==0xe0) set_num=1

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服