基于单片机的观赏鱼自动喂养系统设计

更新时间:2024-05-24 15:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计(论文)

题 目

系 (院) 专 业 班 级 学生姓名 学 号 指导教师 职 称

基于单片机的观赏鱼 自动喂养系统设计

二〇 年 月 日

独 创 声 明

本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。

本声明的法律后果由本人承担。

作者签名: 20 年 月 日

毕业设计(论文)使用授权声明

本人完全了解滨州学院关于收集、保存、使用毕业设计(论文)的规定。

本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用。

(保密论文在解密后遵守此规定)

作者签名: 20 年 月 日

[论文]

基于单片机的观赏鱼自动喂养系统设计

摘 要

随着社会的发展和人们生活质量的提高,越来越多的人喜欢饲养观赏鱼。但如果由于某些原因忽视了对观赏鱼的照顾,观赏鱼则有可能因饥饿或鱼缸内生态环境变坏而死亡。因此,设计一款观赏鱼鱼缸自动喂养系统是非常必要的。

本文设计了一款基于单片机的观赏鱼自动喂养系统。本设计选用AT89C51单片机作为自动喂养系统的控制核心,用传感器采集鱼缸内的环境参数。经数据处理后,单片机向各执行机构传送控制信号,实现自动投饵和对鱼缸内温度、水位、水质等环境因素的自动控制,从而为观赏鱼创造一个良好的生存环境。本设计采用了模块化的设计方法,主要包括主控芯片模块、温度控制模块、水位控制模块、过滤模块、显示模块、杀菌照明模块和投饵器模块。

本设计集众多功能于一身,具有结构小巧,操作简便,成本低廉等优点,可以广泛应用于观赏鱼的饲养。

关键词:单片机;传感器;自动控制;驱动电路;C语言

I

[论文]

Design of Automatic Feeding System in Fish Tank

Based on MCU

Abstract

With the social development and the improvement of people's lives, more and more people like breeding ornamental fish. However, if we can not take care of the ornamental fish for a long time for some reason, they may die of hunger or bad environment in the fish tank. Therefore, the design of automatic feeding system in fish tank based on MCU is very necessary.

This paper has designed an automatic feeding system in fish tank based on MCU. With AT89C51 as core chip, this paper chose some sensors to collect environment parameters. After dater processing, the MCU send control signal to the executive bodies to achieve the functions such as temperature control, water lever control, water quality control, automatically feeding food and so on. In this case, a good environment can be created for the ornamental fish. This design uses a modular design approach. It mainly includes main control module, water temperature control module, water lever control module, filtering module, display module, automatic lighting and automatically feeding food module.

This design is a multi-functional control system with the feature of structure compact, operation simple and low cost. It can be widely used in the area of feeding ornamental fish.

Key words:MCU;Sensors; Automatic control; Driver circuit; C language

II

[论文]

目 录

摘 要 ................................................................................................................................... I ABSTRACT ............................................................................................................................II 目 录 ............................................................................................................................. III 第一章 绪 论 .................................................................................................................... 1 1.1 研究目的 ....................................................................................................................... 1 1.2国内外研究现状 ........................................................................................................... 1 1.3研究的主要内容和目标 ............................................................................................... 1 第二章 模块方案选择与论证 .......................................................................................... 3 2.1硬件框图 ....................................................................................................................... 3 2.2控制模块 ....................................................................................................................... 3 2.3温度测量模块 ............................................................................................................... 4 2.4水位检测模块 ............................................................................................................... 4 2.5电机模块 ....................................................................................................................... 5 2.6显示模块 ....................................................................................................................... 5 第三章 各模块的具体设计 ................................................................................................ 6 3.1控制模块 ....................................................................................................................... 6 3.2温度测量模块 ............................................................................................................... 6 3.3水位检测模块 ............................................................................................................... 7 3.4电机模块 ....................................................................................................................... 8 3.5显示模块 ....................................................................................................................... 9 3.7软件设计 ..................................................................................................................... 10 第四章 单片机模块控制及功能实现 .............................................................................. 12 4.1系统电路原理图 ......................................................................................................... 12 4.2系统仿真图 ................................................................................................................. 12 第五章 结 论 .................................................................................................................... 13 5.1设计总结 ..................................................................................................................... 13 5.2创新点 ......................................................................................................................... 13

III

[论文]

5.3设计不足 ..................................................................................................................... 13 5.4展望 ............................................................................................................................. 13 参考文献 ........................................................................................................................... 14 谢 辞 ................................................................................................................................ 15 附 录 ................................................................................................................................ 16

IV

[论文]

第一章 绪 论

1.1 研究目的

随着社会的发展和人们生活质量的提高,越来越多的人喜欢饲养观赏鱼。它在美化我们生活环境的同时,给我们带来了视觉上的美感和身心享受。但人们不可能每时每刻都控制好鱼类的生活环境,如果由于某些原因长时间忽视了对观赏鱼的照料,观赏鱼则有可能因饥饿或生态环境变坏而死亡。因此,设计一款观赏鱼鱼缸自动喂养系统是非常必要的[1]。 1.2 国内外研究现状

目前市场上的鱼缸自动喂养系统功能比较分散,往往只能实现某个功能,如过滤功能,增氧功能,加热功能等,而且大多需要人工操作,自动化程度不高。投饵器部分主要采用以定时电路为控制核心的单次间歇式喂养系统,投饵器每次投饵都需要重新设定,且定时不准确,投料不均匀,可靠性差,投饵与间歇时间设置不合理,易浪费饵料,这些都无法满足观赏鱼自动喂养的功能要求。倘若同时安装各种功能不同的设备,又会使系统结构复杂,增加成本,影响美观,而且也缺乏彼此功能的协调性。

现在越来越多的人们开始注重生活环境的改善,水族箱便进入了人们的视线,许多宾馆、展会、写字楼等都摆上了水族箱来美化环境,应用于水族箱的观赏鱼自动控制系统应运而生,由于水族箱一般体积较大,而且该自动喂养系统嵌入在水族箱的橱柜内,不可分离,使自动喂养系统移植性差,无法应用于小型的观赏鱼鱼缸上。小型观赏鱼鱼缸自动喂养系统在市场上还基本处于空白,基于这个市场空白,本文设计了基于单片机的观赏鱼自动控制系统[2]。 1.3 研究的主要内容和目标

本设计选用AT89C51单片机作为自动喂养系统的控制核心,加上外设备组成单片机最小系统,用传感器采集环境参数,输入单片机处理,单片机控制各执行机构实现自动投饵,水温自动控制,水位自动控制,自动过滤,参数实时显示,照明和杀菌功能,力求系统集成化高,结构小巧,操作简单。

设计思路大体为:设计方案的选择,程序的编写,系统仿真。在各模块的设计中选用最优方案;编写程序,在proteus仿真中发现并修正设计中不合理的地方;扩充完善喂养系统的功能,使其运行可靠。

1

[论文]

本设计所要达到的预期目标: 1. 可以投掷颗粒状饵料

2. 可以设定系统每天投料时间和次数 3. 可以实时显示参数设置数据 4. 可以实现水温的自动控制 5. 实现水位的自动控制 6. 可以实现自动过滤功能 7. 实现杀菌和照明功能

2

[论文]

第二章 模块方案选择与论证

2.1 硬件框图

参数显示温度传感器加热制冷AT89C51过滤水位传感器补水控制按键 图3.1 喂养系统硬件框架图

投饵2.2 控制模块

方案1:采用凌阳16位单片机,它是16位控制器,具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。但是凌阳单片机应用较为复杂,使用不方便,且当占用的CPU资源较多时会使凌阳单片机同时处理其它任务的速度和能力降低[3]。

方案2:采用现场可编程门阵列FPGA作为控制器。是作为专用集成电路(ASIC)

领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA具有不同的结构,由既可实现组合逻辑功能又可实现时序

逻辑功能的基本逻辑单元模块组成,这些模块间利用金属连线互相连接或连接到I/O模块,实现对I/O口的控制[4]。但使用FPGA需要学习专门的硬件描述语言Verilog或VHDL,比较复杂,而且FPGA价格比较昂贵,从学习的简便性及使用的经济性角度考虑放弃此方案。

方案3:采用AT89C51作为主控制芯片,该芯片有足够的存储空间,可以方便的在线ISP下载程序,能够满足该系统软件的需要,该芯片提供了两个计数器中断,

3

[论文]

对于本作品系统已经足够,采用该芯片可以比较灵活的选择各个模块控制芯片,能够准确的计算出时间,有很好的实时性[5]。

综合使用、经济等方面,在控制模块方面选择方案3。 2.3 温度测量模块

方案1:采用DS18B20温度传感器。DS18B20数字温度传感器在使用中不需要任何外围元件,接线方便,能使现场温度直接以“一线总线”的数字方式传输,仅需要一条口线即可实现微处理器与DS18B20的双向通讯,大大减少了系统的连线数,提高了系统的稳定性和抗干扰性。测温范围为-55℃~+125℃,分辨率为0.5℃。工作电源:3~5V/DC,封装成后可应用于多种场合,有LTM8877,LTM8874等型号。它体积小,重量轻,使用方便,可以根据应用场合的不同而改变其外观,广泛应用于各种便携式数字设备测温和控制领域[6]。

方案2:采用红外测温模块。红外温度传感器是利用电磁辐射这一原理制作而成的,当物体的温度高于绝对零度时,就会不断地向四周辐射电磁波,而这些电磁波中就包含了波段位于0.75~100μm 的红外线,红外传感器接收辐射能后引起温度的升高,使传感器中与温度相关的物理量发生变化,通过检测该物理量的变化来检测温度变化。该传感器功耗低,精度高,虽能满足本设计的功能要求,但需要外围电路支持,成本太高[7]。

从经济方面考虑,方案1经济适中,功能能够完全可以满足设计需要,而且技术比较成熟,综合电路搭建、软件编程功能实现等方面,温度测量模块选择方案1。 2.4 水位检测模块

方案1:采用投入式液位计。投入式液位计又称为静压投入式液位变送器,是一种测量液位的压力传感器.由于液体静压与该液体的高度成比例,该液位计就是根据这一原理采用隔离型扩散硅敏感元件或陶瓷电容压力敏感传感器作为测量元件,将静压转换为电信号,经过高可靠性的放大处理电路及精密温度补偿,将被测介质的表压或绝压转换为标准的电压或电流信号。本产品体积小巧,使用安装方便,直接投入水中即可测量出变送器末端到液面的液位高度[8]。

方案2:用光电开关进行水位检测。光电开关将输入电流转换为红外光信号在发射器上射出,当光线被物体反射后,接收器再根据接收到的光线的强弱进行检测。

4

[论文]

从而对单片机发出控制信号。该传感器寿命长、重量轻、价格低、响应速度快,结构牢靠,抗光、电、磁干扰能力强。

由于不需要实时测量液面高度,为使系统电路简单可靠,在水位检测模块选择方案2。 2.5 电机模块

方案1:用步进电机。步进电机在控制精度还有角度上有着其他电机无可比拟的优势。但是步进电机力矩低,转速不高,这不能实现快速投饵。而且由于步进电机效率低,发热大,价格高,体积笨重。控制相对其他电机复杂,增加了编程的难度[9]。

方案2:采用直流电机。直流电机虽然精度较低,但运转平稳,转速高,而且结

构简单,易于控制,能够满足设计功能要求。

综合设计要求,在电机模块选择方案2。

2.6 显示模块

方案1:采用七段数码管显示。数码管是一类数字形式的显示屏,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示时间、温度等参数。由于它的价格便宜、使用简单、在电器,特别是家电领域应用极为广泛,但数码管显示屏不能显示汉字[10]。

方案2:采用1602LCD显示屏。字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等。该液晶显示器体积小、功耗低、显示内容丰富、超薄轻巧使用方便,在各种仪器仪表和低功耗应用系统中应用广泛[11]。

方案3:采用全彩LED显示屏。该彩屏不仅能够显示数字、字符而且能够显示图像,性能稳定,色彩艳丽,画面逼真,在手机,相机等数码产品中有着广泛的应用。但这种显示屏相比较而言价格较贵。

综合设计要求,系统需要显示数字、字符但不需要显示画面,为了节约成本我们采用方案2。

5

[论文]

第三章 各模块的具体设计

3.1 控制模块

为本系统的最终控制模块电路图,其中采用AT89C51作为主控制芯片,该芯片有足够的存储空间,可以方便的在线ISP下载程序,能够满足该需要,I/O接口数目对于本设计已经足够,采用该芯片可以比较灵活的选择各个模块控制芯片。

图3.1 AT89C51最小系统电路

3.2 温度测量模块

DS18B20采用单总线的接口方式与单片机连接,仅需要一条线即可实现单片机与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,测量温度范围宽,精度高,DS18B20的温度测量范围为-55℃-125℃,在-10℃-85℃范围内,精度为±0.5℃。DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警除法器TH和TL、配置寄存器。

6

[论文]

图3.2 DS18B20内部结构

水温传感器DS18B20芯片三个引脚的接法为:GND端直接接地;QD端直接和单片机相连,把水温数据直接传送给单片机处理;VDD端接5V电源,给芯片供电。

图3.3 DS18B20与单片机的连接

3.3 水位检测模块

系统用光电开关对水位进行检测,当鱼缸中水位低于预定值时,光电开关发出的光信号被阻挡,此时光电开关便会给单片机一个控制信号,当单片机判断到水位过低时,便控制电磁阀导通,向鱼缸内补水,当水位达到设定值时,单片机便使电磁阀关闭,停止补水。

7

[论文]

图3.4 光电开关原理图

图3.5 光电开关实物

3.4 电机模块

由于直流电机的功率比较高,而单片机输出的电平为TTL电平,不能直接驱动直流电机,该系统电机不需正反转变换和调速,为了使电路简单和节约成本的需要,我们用继电器直接驱动电机。实际上是用较小电流控制较大的电流,从而达到控制电路通断的目的。

8

[论文]

图3.6 电机驱动模块

3.5 显示模块

我们选用1602LCD实现系统数字和字符的显示。1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。内置128个字符的ASCII字符集字库,可显示两行,每行16个字符,但不能显示汉字或图形,只有并行接口,无串行接口。

1602采用16脚接口,其中: 第1脚:VSS为电源地 第2脚:VDD接5V电源正极

第3脚:V0为屏幕对比度调整端,接地电源时对比度最高,接电源正极时对比度最弱

第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作。 第6脚:E(或EN)端为使能端。

第7~14脚:D0~D7为8位双向数据端。

第15~16脚:空脚或背光灯电源。15脚背光正极,16脚背光负极[12]。

9

[论文]

图3.7 LCD与单片机的连接

3.7 软件设计

主程序是检测鱼缸内各种环境参数从而进行智能控制的主监控程序[13]。根据模块化的设计思想可以将系统功能划分为多个子任务,每个子任务由对应的子程序运行来实现。通过主程序将各个子程序整合起来就可以实现温度、水位自动控制以及定时投饵等功能[14]。

10

[论文]

开始 初始化设置 初始化和声明 程序主函数 各种环境参数采集 调用各控制子程序 参数显示 结束 图3.8 系统主程序框图

11

[论文]

第四章 单片机模块控制及功能实现

4.1 系统电路原理图

图4.1 系统原理图

4.2 系统仿真图

LCD1KzLVSSVDDVEERSRWED0D1D2D3D4D5D6D712345610kC333p7891011121314RV1D1G补水D2杀菌灯D3照明灯RP1U1X112MHz19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617123456789RESPACK-8R10500R11500R12500C233p18XTAL2R110k9RSTD41N4007D51N4007C110u293031PSENALEEAz光电开关a10kR2Q1NPNRL1RLY-SPCObR410kQ2NPNRL2RLY-SPCOefghij12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51abcdU2321VCCDQGNDDS18B2027.0R34.7kR54.7kTD61N4007D71N4007HeaterOV1OVENcR610kQ3NPNRL3RLY-SPCOdR810kQ4NPNRL4RLY-SPCOefgkR74.7kR94.7kM1投饵器M2过滤器L图4.2 系统仿真图

12

[论文]

第五章 结 论

5.1 设计总结

本文所设计的观赏鱼自动喂养系统,采用单片机为控制芯片,实现定时定量投饵,实现水温、水位的自动控制,能自动过滤水中杂质,并且有杀菌照明功能。系统体积小,重量轻,自动化程度高,操作简便,能够实现科学、自动喂养,用户可以通过按键选择,设定自动喂养系统的各项工作参数,从而控制喂养系统工作,易学易用,降低了人力物力成本[15]。在程序上,本设计用C语言进行编程,采用模块化的编程方法,各模块间独立程度高,避免了模块间的相互影响,对系统整体进行了综合调试,运行效果良好,设计比较完善。 5.2 创新点

(1)单片机控制,智能化程度高。

(2)恒温控制,不仅能够加热,而且能够制冷。 (3)杀菌灯和照明灯的开启可以自由控制。 (4)投饵时间和次数可以自行设定。 5.3 设计不足

(1)无法完成自动换水。

(2)没有水中氧气含量检测装置,不能独立准确供氧。 (3)没有无线模块,不能远程控制 5.4 展望

本设计虽然满足了自动喂养系统的大部分功能,但受时间、技术、成本等因素限制,还有有一些不足,本设计单片机还预留有I/O口,可以拓展其他功能,相信经过一段时间的运行改进,一定会使功能更加丰富,设计更加完善。由于本设计成本低,易维护,填补了中小型观赏鱼鱼缸的市场空白,有较广阔的市场前景。

13

[论文]

参考文献

[1]张海萍.小小水族箱装着大市场[N].市场报,2002-10-21.

[2]葛华.多功能观赏鱼缸自动控制系统的设计[D].南京:东南大学机械工程学院,2010.05. [3]刘建辉.单片机智能控制技术[M].北京工坊工业出版社,2007.

[4]夏宇闻.Verilog HDL数字设计教程[M].北京:北京航空航天大学出版社,2008,6. [5]兰吉昌.单片机C51完全学习手册[M].北京:化学工业出版社,2008,10.

[6]求是科技.单片机典型模块设计实例导航第二版[M].北京人民邮电出版社,2009. [7]雷伏容.51单片机常用模块涉及查询手册[M].北京清华大学出版社,2010. [8]江志红.51单片机技术与应用系统开发案例精选[M].北京清华大学出版社,2008. [9]郭天祥.51单片机C语言教程[M].北京:电子工业出版社.2009,12. [10]阎石.数字电子技术基础[M].北京:高等教育出版社.2006,1.

[11]唐继贤.51单片机工程应用实例[M].北京:北京航空航天大学出版社,2009,1. [12]Atmel Microcontroller Handbook,2001.

[13]慧仇.手把手教你学51单片机[M].北京 电子工业出版社, 2009. [14]谭浩强. C程序设计[M]. 北京:清华大学出版社,1991.

[15]Clive max Maxfiled .The Designed Warrior’s Guide to FPGAs[M].Newnes,2004,6.

14

[论文]

谢 辞

感谢老师在整个设计过程中对我悉心指导。感谢学院创新实验室提供关键的硬件设施。同时,感谢同学在设计中对我提供的热情帮助。

即使有了理论上的可行性,距离成品制作还是一定的距离的,我能做的只有再接再厉。该设计历时四个月,期间经历了方案的筛选,元器件的选择,原理图的绘制、系统的仿真和程序的调试等。在这过程中老师提供学院实验室给我们,极大得改善了我们的实验环境。同时,实验室的同学提供宝贵的经验和资料给我,在设计中对我所遇到的各种疑惑给予热情解答,使得我在资料的搜集和设计中少走了不少弯路,较快的完成了设计。同时,对老师在自始自终的论文设计中对我所遇到的各种问题的耐心指导表示衷心的谢意。

很多方面我的所学是远远不够的,除了自主学习还要加强和身边同学老师的交流合作。感谢身边的同学,很高兴能够与你们相互合作各取所长那个,使得设计从一个个困难中走出,臻于完善。学校对学生动手能力重视,提供了优越的创造条件,在完善的硬件设施下,我们对单片机,传感器,LCD显示屏等电子设计方面的知识有了更深的认识,这些都会对我以后在电子设计方面提供很大的帮助。

设计是一个漫长的过程,受限于自己的所学,不能将这款设计做的完美无缺,能做的,就是不断地交流,学习,改进,使之逐渐趋于完善。由于设计未经过实际的考验,在实际应用中肯定有不足之处,欢迎老师,同学能够指点,加以改进。

15

[论文]

附 录

#include

#define uchar unsigned char #define uint unsigned int #define scan P1

sbit DQ=P2^4;//ds18b20与单片机连接口 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; sbit Filter=P3^2; sbit Fade=P3^3;

sbit ch=P1^0; sbit up=P1^1; sbit down=P1^2; sbit exit=P1^3; sbit a=P3^0;

unsigned char code str1[]={\ %unsigned char code str2[]={\ \ unsigned char str[]={\

unsigned char Time_Fade[]={\ unsigned char Temp_Limit[]={\ uchar Temp_Up=30; uchar Temp_Down=20; uchar data disdata[5]; uint tvalue;//温度值

uchar tflag;//温度正负标志 uchar h,m,s,cnt,t_h=9,t_m; uchar Fade_Cnt;

/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的) { unsigned int i,j; for(i=0;i

void wr_com(unsigned char com)//写指令// {

16

[论文] delay1ms(1); RS=0; RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0; }

void wr_dat(unsigned char dat)//写数据// { delay1ms(1);; RS=1; RW=0; EN=0; P0=dat;

delay1ms(1); EN=1;

delay1ms(1); EN=0; }

void lcd_init()//初始化设置// { delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); }

void display(unsigned char *p)//显示// { while(*p!='\\0') { wr_dat(*p); p++; delay1ms(1);

17

[论文]

} }

void init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str); // wr_com(0xc0); // display(str2); }

/******************************ds1820程序***************************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); }

void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); }

uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); }

18

[论文]

return(dat); }

void ds1820wr(uchar wdata)/*写数据*/ { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }

void read_temp()/*读取温度值并转换*/ { uchar a,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else { tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 }

19

[论文]

/*******************************************************************/ void Temp_Disp()//温度值显示 { uchar flagdat; read_temp();//读取温度 disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue00/100+0x30;//十位数 disdata[2]=tvalue0/10+0x30;//个位数 disdata[3]=tvalue+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号:- if(disdata[0]==0x30) { disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) { disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0x80+0x3e); wr_dat(flagdat);//显示符号位 // wr_com(0xc1); wr_dat(disdata[0]);//显示百位 // wr_com(0xc2); wr_dat(disdata[1]);//显示十位 // wr_com(0xc3); wr_dat(disdata[2]);//显示个位 // wr_com(0xc4); wr_dat(0x2e);//显示小数点 // wr_com(0xc5); wr_dat(disdata[3]);//显示小数位 // wr_com(0xc6); // wr_dat('`'); wr_dat('C'); }

20

[论文]

void Time_Disp() { wr_com(0x80); display(str); wr_com(0x80+0x09); display(Time_Fade); wr_com(0x80+0x48); display(Temp_Limit); }

void Cnt_Disp() { wr_com(0x80+0x0f); wr_dat(Fade_Cnt+0x30); }

/********************主程序***********************************/ void Time_Init() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%6; TR0=1; ET0=1; EA=1; }

void Cpu_Init() {

// Filter=0; // Fade=0; }

void Key_Scan() {

21

[论文]

/*

uchar num; num=0; TR0=0;

delay1ms(10);

wr_com(0x80+0x0f); wr_dat(num+0x30);*/ while(1) {

if(ch==0) { delay1ms(100); num++; while(ch==0); if(num==1) { wr_com(0x80); wr_com(0x0f); }else if(num==2) { wr_com(0x83); wr_com(0x0f); }else if(num==3) { wr_com(0x86); wr_com(0x0f); }else if(num==4) { wr_com(0x89); wr_com(0x0f); }else if(num==5) { wr_com(0x8c); wr_com(0x0f); }else if(num==6) { wr_com(0x80+0x40+0x08); wr_com(0x0f);

22

[论文]

}else if(num==7) { wr_com(0x80+0x40+0x0b); wr_com(0x0f); }else if(num==8) { num=1; wr_com(0x80); wr_com(0x0f); } }

if(num!=0) if(num==1) { if(up==0) { delay1ms(10); while(up==0); h++; if(h==24) h=0; wr_com(0x80); wr_dat(h/10+0x30); wr_dat(h+0x30) } if(down==0) { delay1ms(10); while(down==0); h--; if(h==0) h=23; wr_com(0x80); wr_dat(h/10+0x30); wr_dat(h+0x30) } //wr_com(0x80); }else if(num==2) {

23

;

;

[论文]

if(up==0) { delay1ms(10); while(up==0); m++; if(m==60) m=0; wr_com(0x83); wr_dat(m/10+0x30); wr_dat(m+0x30) }

if(down==0) { delay1ms(10); while(down==0); m--; if(m==0) m=23; wr_com(0x83); wr_dat(m/10+0x30); wr_dat(m+0x30) }

//wr_com(0x83);

}else if(num==3) { if(up==0) { delay1ms(10); while(up==0); s++; if(s==60) s=0; wr_com(0x86); wr_dat(s/10+0x30); wr_dat(s+0x30) } if(down==0) { delay1ms(10); while(down==0); s--;

24

;

;

;

[论文]

if(s==0) s=23; wr_com(0x86); wr_dat(s/10+0x30); wr_dat(s+0x30) ; } //wr_com(0x86);

}else if(num==4) { if(up==0) { delay1ms(10); while(up==0); t_h++; if(t_h==24) t_h=0; wr_com(0x89); wr_dat(t_h/10+0x30); wr_dat(t_h+0x30); Time_Fade[0]=t_h/10+0x30; Time_Fade[1]=t_h+0x30; } if(down==0) { delay1ms(10); while(down==0); t_h--; if(t_h==0) t_h=23; wr_com(0x89); wr_dat(t_h/10+0x30); wr_dat(t_h+0x30) ; Time_Fade[0]=t_h/10+0x30; Time_Fade[1]=t_h+0x30; } }else if(num==5) { if(up==0) { delay1ms(10);

25

[论文]

while(up==0); t_m++; if(t_m==60) t_m=0; wr_com(0x8c); wr_dat(t_m/10+0x30); wr_dat(t_m+0x30) ; Time_Fade[3]=t_m/10+0x30; Time_Fade[4]=t_m+0x30; } if(down==0) { delay1ms(10); while(down==0); t_m--; if(t_m==0) t_h=59; wr_com(0x8c); wr_dat(t_m/10+0x30); wr_dat(t_m+0x30) ; Time_Fade[3]=t_m/10+0x30; Time_Fade[4]=t_m+0x30; } }else if(num==6) { if(up==0) { delay1ms(10); while(up==0); Temp_Up++; if(Temp_Up==99) Temp_Up=0; wr_com(0x80+0x40+0x08); wr_dat(Temp_Up/10+0x30); wr_dat(Temp_Up+0x30) ; Temp_Limit[0]=Temp_Up/10+0x30; Temp_Limit[1]=Temp_Up+0x30; } if(down==0) {

26

[论文]

delay1ms(10); while(down==0); Temp_Up--; if(Temp_Up==0) Temp_Up=99;

wr_com(0x80+0x40+0x08); wr_dat(Temp_Up/10+0x30);

wr_dat(Temp_Up+0x30) ; Temp_Limit[0]=Temp_Up/10+0x30; Temp_Limit[1]=Temp_Up+0x30 ;

} }else if(num==7) { if(up==0) { delay1ms(10); while(up==0); Temp_Down++; if(Temp_Down==99) Temp_Down=0; wr_com(0x80+0x40+0x0b); wr_dat(Temp_Down/10+0x30); wr_dat(Temp_Down+0x30) ; Temp_Limit[3]=Temp_Down/10+0x30; Temp_Limit[4]=Temp_Down+0x30;

}

if(down==0) { delay1ms(10); while(down==0); Temp_Down--; if(Temp_Down==0) Temp_Down=99; wr_com(0x80+0x40+0x0b); wr_dat(Temp_Down/10+0x30); wr_dat(Temp_Down/10+0x30) ; Temp_Limit[3]=Temp_Down/10+0x30; Temp_Limit[4]=Temp_Down+0x30; }

27

[论文] } if(exit==0) { wr_com(0x0c); num=0; TR0=1; break; } } }

void main() { Cpu_Init(); Time_Init(); init_play();//初始化显示 while(1) { Time_Disp(); Temp_Disp();//显示 Cnt_Disp(); if(scan !=0xff) Key_Scan(); if(t_h==h && t_m==m) Fade=0; else Fade=1; } }

void Time0_Isr() interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%6; cnt++; if(cnt==20) { cnt=0; s++;

28

[论文] if(s==60) { s=0; m++; if(m==60) { m=0; h++; if(h==24) h=0; }

}

}

str[0]=h/10+0x30; str[1]=h+0x30; str[3]=m/10+0x30; str[4]=m+0x30; str[6]=s/10+0x30; str[7]=s+0x30;

}

29

本文来源:https://www.bwwdw.com/article/zmw7.html

Top