智能煎药器电路设计(正文) - 图文

更新时间:2024-01-26 08:42:01 阅读量: 教育文库 文档下载

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

西华大学电气信息学院智能化电子系统设计报告

目录

1.前言 ............................................... 1 2.总体方案设计 ........................................ 2

2.1设计内容 .......................................................... 2 2.2方案比较 .......................................................... 2 2.3 方案论证 ......................................................... 3 2.4方案选择 .......................................................... 4

3. 单元模块电路简介与设计 ................................ 5

3.1 单片机主芯片电路 .................................................................................................... 5

3.1.1时钟电路 ................................................................................................................ 5 3.1.2复位电路 ................................................................................................................ 6

3.2显示电路模块 ...................................................... 7 3.3 水阀指示模块 ..................................................... 7 3.4 声光报警 ......................................................... 8 3.5继电器电路 ........................................................ 9 3.6 电源电路模块 ............................................................................................................ 9

4. 软件设计 ........................................... 11

4.1主程序设计 ....................................................... 11 4.2控制端口与电平变化 ............................................................................................... 12

5.系统调试 ........................................... 13

5.1硬件调试 ......................................................... 13 5.2软件调试 ................................................................................................................... 13

6.系统功能、指标参数 .................................. 13

6.1系统功能 ......................................................... 17 6.1指标参数 ................................................................................................................... 17

7.结论 .............................................. 18 8.总结与体会 ......................................... 19 9.致谢 .............................................. 19

西华大学电气信息学院智能化电子系统设计报告 10.参考文献 .......................................... 21 附录一:相关设计图 ..................................... 22 附录二:相关设计软件 ................................... 25

西华大学电气信息学院智能化电子系统设计报告

1.前言

中药熬煮的历史悠久,以传统的煎煮方法获得中药汤剂沿用了很久,为国人防病治病发挥了很大的作用一,但煎煮中药的复杂过程对患者、医院而言很不方便,而一旦煎糊,不但不能治病,反而有很大的毒副作用。

目前,科学技术取得了巨大的成就,计算机更是日新月异,为改造传统中药煎煮方式,应用现代先进技术制取中药汤剂提供了便利条件。于是,煎药机应运而生。第一台煎药机是韩国人研制的,很快被引进到我国。但因为其价格昂贵、质量不稳定,煎煮模式单一,而且需要人工配合的环节多,只有几家大型医院供患者选用,但煎药机的效率不高、采用真空包装因而便于携带、保质期长(7——15天)等优点得到了大家的认可,随着技术的不断改进,国内也有一些厂家投入人力、财力研制开发煎药机。

随着科技的飞速发展,电子技术融入到人们日常生活中的每一处,智能煎药器的出现,大大方便了人们的生活。以往人们采用传统的方法煎药,煎药过程中需要有人进行照料,而且人工的控制带来的问题就是精度不高。随着智能煎药器的出现,很好的解决了煎药过程需要有人照料的问题,同时智能煎药器具有数控技术,控制精度高、高温时间(沸腾时间)自动转换、武火,文火自动转换、节约空间,物美价廉等优点。目前,煎药机的应用非常广泛,许多医院、中药店都配有各种煎药机,为患者提供便利。

1

西华大学电气信息学院智能化电子系统设计报告 2.总体方案设计

2.1设计内容

用单片机设计一个智能煎药器电路,剩余时间和煎药次数用七段数码管进行显示,用按键来设定煎药时间和煎药次数,并控制水阀的通断,并配以绿色的LED指示灯,水阀开通即放药时LED指示灯亮,水阀关闭时LED指示灯灭。当整个煎药过程结束时,蜂鸣器发声报警,且红色LED报警灯亮。

2.2方案比较

方案一:通过设定煎药时间的方式来进行煎药性质的设定。通过按键对系统进行设定煎药时间与煎药次数,在七段数码管上,时间以剩余时间即倒计时的方式进行显示,煎药次数同样以显示剩余煎药次数的方式显示。当煎药整个过程完成后,继电器动作,断开电源,蜂鸣器与红色发光二极管进行声光报警,如图2.1。

煎药时间、次数设定 数码管显示 单片机STC89C52 蜂鸣器 发光二极管 水阀控制 继电器 图2.1 系统总体框图

方案二:通过选择煎药模式的选择来进行煎药性质的设定。通过按键对系统进行设定煎药模式,如文火、武火等模式的选定,当武火将药煎沸腾后,自动进入文火煎药模式。并在液晶显示屏上显示煎药模式,煎药次数同样以显示剩余煎药次数的方式显示。当煎药整个过程完成后,继电器动作,断开电源,蜂鸣器与红色发光二极管进行声光报

2

西华大学电气信息学院智能化电子系统设计报告 警如图2.2。

煎药模式设定 液晶显示 单片机 STC89C52 蜂鸣器 发光二极管 继电器 水阀控制 图2.2 系统组成框图

2.3 方案论证

方案一:该方案主要是通过对煎药时间和煎药次数的设定来确定煎药的方式。该方案中,使用者可以更具是否为第一次煎药来设定具体的时间和次数,例如,若为对一副中药进行第一煎药,则可设定较长的时间和较多的次数。煎药时间的显示采用倒计时的方式,这样直观明了,方便使用者了解剩余时间。由于需要显示的字符只有数字,没有文字字符,所以我们采用数码管进行显示。当煎药过程完成后,通过继电器切断外部电源,停止煎药,通过水阀控制按键将煎好的药放出。

方案二:该方案主要是可设定煎药火力的大小,即文火、武火模式。开始煎药时,通过按键进行煎药模式的选择。若先选择煎药模式为武火,当药沸腾时能自动切换为文火模式。无论开始设定的煎药模式为武火模式还是文火模式,当温度传感器检测到温度达到100摄氏度后,开始15分钟的倒计时,时间到后通过蜂鸣器和发光二极管进行声光报警,并通过继电器断开外部电源,停止煎药。该方案中通过液晶显示屏1602进行煎药模式和时间的显示。

3

西华大学电气信息学院智能化电子系统设计报告 2.4方案选择

方案一采用定时的方式来进行煎药方式的设定,方案二是采用具体煎药模式来设定煎药方式。方案一中,需要到元器件简单,且元器件较少,方案二较方案一多出温度传感器、液晶显示屏等元器件,增加了整体系统的复杂性。相对而言,方案一系统较简单,程序编写也相对较容易,设计难度接近于我们的能力范围之内,而且要维护方便,调试简单,功耗低。基于上述两方案比较,论证,发现方案一更容易实现本次设计的要求,并且方案一的电路较简单,程序容易控制,所以最终选择方案一。

4

西华大学电气信息学院智能化电子系统设计报告 3.单元模块电路简介与设计

3.1 单片机主芯片电路

芯片STC89C52是带2K字节快闪存储器的8位单片机。P0-P3口都是并行I/O口,都可用于数据的输入和输出,但P0口和P2口除了可进行数据的输入和输出外,通常都用来构建系统的数据总线和地址总线。在这4个口中只有P0口是一个真正双向的口,P1-P3这3个口都是准双向口。P3口的口线具有第二功能,为系统提供一些控制信号。 电路如图3.1 。

图3.1 单片机芯片STC89C52的电路图

3.1.1时钟电路

首先介绍一下单片机的晶振电路,即时钟电路。单片机的工作流程,就是在系统时钟的作用下,一条一条地执行存储器中的程序。单片机的时钟电路由外接的一只晶振和

5

西华大学电气信息学院智能化电子系统设计报告 两只起振电容,以及单片机内部的时钟电路组成,晶振的频率越高,单片机处理数据的速度越快,系统功耗也会相应增加,稳定性也会下降。单片机系统常用的晶振频率有6MHz、11.0592MHz、12MHz、本系统采用11.0592MHz晶振,电容选30pF,电路如图3.2 。

图3.2 晶振电路图

3.1.2复位电路

系统刚上电时,单片机内部的程序还没有开始执行,需要一段准备时间,也就是复位时间。一个稳定的单片机系统必须设计复位电路。当程序跑飞或死机时,也需要进行系统复位。复位电路有很多种,有上电复位,手动复位等,电路如图3.3 。

图3.3 复位电路图

6

西华大学电气信息学院智能化电子系统设计报告 3.2显示电路模块

LED采用4位共阳极数码管,利用单片机的I/O口驱动LED数码管的亮灭。设计中由P1.5、P1.6、P1.7接74HC138译码器的输入端,译码后,根据设计要求选中数码管,驱动LED的段码显示。由P2.0、P2.1、P2.2 、P2.3、P2.4、P2.5 、P2.6、P2.7控制LED数码管的数字显示。

74HC138是一种3-8译码器,有3个数据输入端,经译码产生8种状态。根据设计的要求来组合译码,产生片选信号。若全部高位地址都参加译码,称为全译码;若仅仅部分高地址线参加译码,称为部分译码。我们采用的是后者。电路如图3.4 。

图3.4显示电路模块电路图

3.3 水阀指示模块

本次设计中我们用发光二极管来模拟排放水阀的开闭,用单片机的P30口进行水阀的控制。P30口输出高电平时,发光二极管灭,表示水阀关闭;P30口输出低电平时,发光二极管灭亮,表示水阀开通。

7

西华大学电气信息学院智能化电子系统设计报告

图3.5水阀指示模块电路图

3.4 声光报警

当P3.7口输入低电平时蜂鸣器不响,当P3.7口输入高平时蜂鸣器响,从而起到声报警的作用。当P3.6口输入高电平时发光二极管不亮,当P3.6口输入低电平时发光二极管亮从而可以起到光报警的作用;电路如图3.6 和图3.7。

图3.6 声报警电路图 图3.7 光报警电路图

8

西华大学电气信息学院智能化电子系统设计报告 3.5继电器电路

在设定煎药时间和煎药次数后,长按按键S2 3秒退出设定状态,在退出设定的同时P3.5端口输出高电平,使三极管Q2有截止状态变为导通状态,由于采用常开继电器,所以继电器由断开状态变为闭合状态,开始煎药。当倒计时完成后,P3.5端口输出低电平,三极管Q2截止,继电器动作,自动断开插座开关。电路如图3.8 。

图3.8 红外对管测闯红灯、超速电路图

3.6 电源电路模块

电源电路主要是为系统提供电源,在本设计中,为了使电路简单,我们直接用USB接口提供5V直流电源为电路供电。图中LED是电源指示灯电路,指示是否给系统加电,电容C2、C3、C4、C5、C6电路是一个稳压电路。

9

西华大学电气信息学院智能化电子系统设计报告

图3.9 电源电路图

10

西华大学电气信息学院智能化电子系统设计报告 4.软件设计

4.1主程序设计

程序的流程框图如下所示:

否 是 显示清零 检测Key6键是否被按下 否 否 检测Key3键检测Key7键是 开水阀 是否被按下 否 否 检测Key4键是否被按下 是 次数设定值加 是否被按下 是 倒计时设定值减 开 始 初 始 化 检测Key1键是否被长按下 是 进入倒计时设定、数码管显示 否 检测Key2键是否被按下 是 倒计时设定值加 否 检测Key5键是否被按下 是 次数设定值减 检测Key1键是否被长按下 否 是 退出设定 图4.1主程序设计框图

11

西华大学电气信息学院智能化电子系统设计报告 4.2控制端口与电平变化

发光二极管报警电路由P3.6口控制,P3.6输出低电平时,LED发光报警;蜂鸣器报警电路由P3.7口控制,P3.7口输出高电平时,蜂鸣器发声报警;继电器由P3.5口控制,当P3.5口输出高电平时,继电器闭合,系统进行煎药;水阀指示灯用P3.0口控制;当P3.0输出低电平时LED指示灯亮;设定按键、时间加、时间减、次数加、次数减、清零键、水阀控制键分别由P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6口控制。

12

西华大学电气信息学院智能化电子系统设计报告 5.系统调试

5.1硬件调试

在完成电路图的仿真之后,进入了实物设计,实物设计主要是对自己所设计的电路图进去焊接,用到自己电路图上的所用器件,如果实在没有的,可以用功能相似的器件来代替。在完成第一部分的焊接后,要对一些部件进行电压的测量,第一部分的焊接主要焊接电阻,电源,USB接口,发光二极管等,焊接完成后,我们接上USB接口,发现电路板上的USB接口处的发光二极管发亮,这说明已经通电,之后我们使用万用表对USP接口,稳压二极管,电源进行电压的测量,测量出来的电压值均在+5.00V左右,说明之前焊接的电路正确。

之后我们断开电源再将电路素所需要的芯片的连接板和电容等器件焊接到电路板上,焊接时必须注意芯片和电容的正负极,例如电容的正负极判断为“长正短负”,就是电容所接的长的那根导线接正极,短的那根接负极。在焊接完成之后,我们再次接通电源和USP接口的电源,按下开关电源,USB接口处的发光二极管再次发亮,此时再次用万用表对电路板的电源,稳压二极管,USB接口及其各个芯片和单片机进行电压的测量,测量出来的全部都在+5.00V,说明电路正确,此时我们将所用的芯片包括单片机接上电路板,然后开启电源,将程序载入单片机运行整个电路。

在焊接好蜂鸣器后我们完成了整个电路的焊接,总结本次自己动手焊接和调试电路发现自己在动手能力方面还有很多不足,但是能够自己在老师的指导下找出问题解决问题,自己觉得这是一个很大的进步。

5.2软件调试

刚开始写的数码管的驱动函数: /**********************************

函数名称:数码管驱动函数

输入参数:wei,数码管的位;duan,数码管的段 输出参数:无

函数功能:在对应的位上显示段

备 注:一次只能显示一位,要显示多位需多次调用,

位值范围1--8,//段值范围0--F

13

西华大学电气信息学院智能化电子系统设计报告 **********************************/ void SMG_Display(u8 wei,u8 duan) { }

结果出现的现象是显示的位在不断变化,不能控制,经分析,发现P1高3位IO寄存器是与wei值相或,如果寄存器的值不为0,则位就会出乱,解决办法是先把P1高3位IO寄存器清零,再与位值相或

改后的程序:

/**********************************

函数名称:数码管驱动函数

输入参数:wei,数码管的位;duan,数码管的段 输出参数:无

函数功能:在对应的位上显示段

备 注:一次只能显示一位,要显示多位需多次调用,

位值范围1--8,//段值范围0--F

delay_ms(1);

P2 = DuanDis[duan]; //显示段值 //如果位用138译码器 P1 |= (wei-1)<<5; //位控制

**********************************/ void SMG_Display(u8 wei,u8 duan) { }

14

//如果位用138译码器 P1 &= 0x1F;

P1 |= (wei-1)<<5; //位控制 P2 = DuanDis[duan]; //显示段值 delay_ms(1);

西华大学电气信息学院智能化电子系统设计报告

最开始写的按键程序为:(只举一个按键)

if(Key4 == 0) { }

delay_ms(10); if(Key4 == 0) {

Ci++; if(Ci == 10)

Ci = 0;

//次数增加按键

}

此时,如果快速的按一下键然后松开,数码管显示的“次数”增加1,如果按下键不放手,则“次数”快速增加,分析原因,没有加松手检测,加上松手检测后的程序为:

if(Key4 == 0) { }

delay_ms(10); if(Key4 == 0) {

Ci++; if(Ci == 10)

Ci = 0;

while(Key4 == 0) {}; //松手检测

//次数增加按键

}

但是这样也出现了问题,问题是假如按下按键不放手,则数码管只显示“次数”那一位,其它几位都没有显示,分析原因,发现如果按键按下不松开时“while(Key4 == 0) {};

//松手检测”为死循环,没有扫描数码管的程序,所以数码管停留在最后一次显示

if(Key4 == 0) {

delay_ms(10); if(Key4 == 0)

15

的数据,且此时数码管是静态显示的,再次修改程序:

//次数增加按键

西华大学电气信息学院智能化电子系统设计报告

{

}

SMG_Display(8, Ci);

//次数显?

Ci++; if(Ci == 10) {

SMG_Display(1, Dao_Fen_Shi); //倒计时显示 SMG_Display(5, Dao_Fen_Ge); SMG_Display(3, Dao_Miao_Shi); SMG_Display(4, Dao_Miao_Ge); Ci = 0; while(Key4 == 0)

}

}

此时的按键程序就没有问题了,假如按键被按下不松开,则数码管在松手检测的死循环里循环扫描,显示正常。

16

西华大学电气信息学院智能化电子系统设计报告 6.系统功能、指标参数

6.1系统功能

本系统能进行煎药时间的设定,并且可设定煎药的次数,每次煎药完成后,等待一段时间后进行药物的第二次煎熬,直至煎完所设定的次数。整个煎药过程完成后,系统自动进行声光报警,报警一段时间后能够自动解除报警。在煎药完成的同时能够自动切断外部电源。

6.1指标参数

在主电路板中需要测量出的参数:电源电压,各个芯片的电压以及单片机的电压,以下为各电压的值:

1.电源电压的测量值为5.01V。

2.芯片的电压值: MAX232的电压测量值为5.03V。 3.单片机的电压值为5.02V。

所以对于电源为5V电路来说,以上参数都是正确的。 1.电路板中单片机的晶振电路中晶振元件11.0592MHZ。 2.光报警电路中的限流电阻的大小为1K。

以下为声光报警电路、继电器控制电路、水阀指示电路电压变化的值:

蜂鸣器报警电路:未报警时P3.7口电压为0.01V,报警时P3.7口电压为4.98V;LED报警电路:未报警时P3.6口电压为0.02V,报警时P3.6口电压为4.88V;继电器控制电路:未煎药时P3.0口电压为0.03V,煎药时P3.0口电压为4.99V;水阀指示电路:指示灯未亮时,P3.5口电压为4.94V,煎药时P3.5口电压为0.01V。

17

西华大学电气信息学院智能化电子系统设计报告 7.结论

这次我们做的智能煎药器电路设计,是为了实现煎药过程的自动化。通过长按设定按键S2 3秒,系统进入设定状态,此时可进行煎药时间和煎药次数的设定,并且通过按键S3、S4、S5、S6可进行时间和次数的加减,按键S7进行时间和次数的清零。当时间和次数设定好后,长按设定按键S2 3秒退出设定状态,系统开始倒计时,并通过数码管进行显示,退出设定状态的同时,继电器闭合,系统开始煎药。第一次煎药时间到后,继电器动作,变为断开状态,系统停止煎药,等待一段时间后继电器再次动作,进入下一次的煎药,直至完成整个煎药过程。煎药完成后系统进行声光报警,一段时间后能自动解除报警。通过按键S7能进行水阀控制的模拟,按下S7水阀通,再次按下S7水阀关闭。在按键选择方面,我们放弃了矩阵扫描式,采用独立按键,对于我们编程来说更容易实现。

由于时间比较紧迫,我们在对时间设定程序编写时,只能进行以秒为单位的时间加减,若果时间充足,我们应该能编写出以分位单位的时间加减,这样能够方便使用者进行时间的设定。

18

西华大学电气信息学院智能化电子系统设计报告 8.总结与体会

一个月的智能化课程设计结束了,通过4个周的智能化带电子系统设计的实践,使我们在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实践锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我们受益匪浅,同时也暴露出一些平时学习上的问题,让我们深刻反思。这些问题的发现将为我们以后的学习和工作中指明道路,为进一步查漏补缺学习作好准备。

通过实践,让我们更熟悉掌握了Keil uVision3, proteus ISIS, Protel 99 SE这些应用程序的运用,让我们懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,还有焊接和程序固化,在设计过程中我们又很多收获当然也遇到很多困难,譬如说不能把书本上的知识与实践相结合。这几周我们经过老师耐心的讲解和指导通过自己认真的动手操作,终于完成了本次课程设计。

在这次难得的课程设计过程中我们锻炼了自己的思考能力、动手能力和排除故障的能力,增强了我们查阅资料的方法和技巧,更是大大的提高了我们自学的能力,同时也增强了我们的动手能力。

通过题目选择和设计电路的过程中,加强了我们思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练掌握了有关器件的性能及测试方法。

19

西华大学电气信息学院智能化电子系统设计报告 9.致谢

在李老师的耐心、细心指导下,我们小组同学积极讨论思考问题,为了成功完成本此课程设计,我们查阅了许多相关资料,使我们受益匪浅。同时,我们遇到了许多问题,在李老师的指导下,我们小组顺利地突破了各个技术难点。在此我们要感谢学院提供了这次课程设计的机会;感谢在设计中给予我许多帮助的老师,特别要感谢李天倩和阳小明两位老师,在我们的设计过程中,他们至始至终地给予我们悉心的指导,从而使我们的设计顺利完成。同时也要感谢小组内的各位同学,感谢全组同学能够做到互相学习、团结一致,直至最后共同战胜难点,顺利完成本次设计!

20

西华大学电气信息学院智能化电子系统设计报告 10.参考文献

[1] 谭浩强. C语言程序设计(第三版)[J].北京:清华大学出版社,2005 [2]张毅刚、彭喜元.单片机原理及应用[M].北京:高等教育出版社,2003

[3] 张海兵、李敏.PROTEL电路设计实例与分析[J]. 北京:人民邮电出版社,2005 [4] 李春葆、金晶.C语言程序设计辅导[M].北京:清华大学出版社,2007

[5] 杨将新、李华军.单片机程序设计及应用(第三版)[M]. 北京:电子工业出版社,2006 [6] 鲁捷、焦振宇.PROTEL 2004 电路设计[M]. 北京:清华大学出版社,2006 [7]康光华 陈大钦 电子技术基础模拟部分(第四版)[M].高等教育出版社.1987 [8]谢自美 主编.电子线路设计.实验.测试(第二版)[M].华中理工大学出版社,2005 [9] 王为青,邱文勋. 51单片机开发案例精选[J].人民邮电出版社,2001,(5):45-47

[10] 边海龙,孙永奎. 单片机开发与典型工程项目实例详解[J].电子工业出版社,2008 [11] 康光华、邹寿彬.电子技术基础数字部分(第五版)[M]. 北京:高等教育出版社,2006 [12]谢维成,刘勇.微机原理与接口技术[M].华中科技大学出版社,2009 [13]张毅刚.单片机原理及应用[M].高等教育出版社,2003

21

西华大学电气信息学院智能化电子系统设计报告 附录一:相关设计图

图一:Protel原理图

22

西华大学电气信息学院智能化电子系统设计报告

图二:Protel PCB图

图三:ISIS仿真图(设定时间为02分34秒,次数为6次)

23

西华大学电气信息学院智能化电子系统设计报告

图四:实物图(设定时间57分40秒,次数为3次)

24

西华大学电气信息学院智能化电子系统设计报告

附录二:相关设计软件

/************************************** 智能煎药器 实现功能:

通过按键能够设定定时时间和煎药次数, 并能显示在数码管上,能显示煎药倒计时时间,煎药时间一到,声光提示

说 明:第1,2,位码管显示倒计时的分, 3,4位数码管显示倒计时的秒; 第8位数码管显示煎药次数, 程序处于实时扫描按键状态,

*************************************/ #include #define u8 unsigned char #define u16 unsigned in sbit Key1 = P0^0; //按键一 sbit Key2 = P0^1; //按键二 sbit Key3 = P0^2; //按键三 sbit Key4 = P0^3; //按键四 sbit Key5 = P0^4;

//按键五

sbit Key6 = P0^5; //按键六 sbit Key7 = P0^6;

//按键七

sbit Relay = P3^5; //继电器 sbit LED_Water = P3^0; //水阀指示灯 sbit LED_Warning = P3^6; //光报警 sbit Buzzer_Warning = P3^7; //声报警 u16 i;

u8 Dao_Fen_Shi = 0, Dao_Fen_Ge = 0, Dao_Miao_Shi = 0, Dao_Miao_Ge = 0;

u8 Ci = 0; Once_Time_Fen, Once_Time_Miao; u8 Miao_Count = 0, Fen_Count = 0;// Ci_Count = 0; u8

Key1_Flag,

SMG_Run_Flag

=

0,

Start_Timer0 = 0;

u8 All_Time_End; u8 Timer0_Count;

unsigned char code DuanDis[]={ //共

阳数码管 0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delay_ms(u16 z) { u8 x; u16 y;

for(x=110;x>0;x--)

for(y=z;y>0;y--);

}

void Timer0_Init(void) {

TMOD = 0x01;

//设置定时器0工作方

式1

TH0 = (65535-46080)/256;

//一次定

时50ms

TL0 = (65535-46080)%6;

25

西华大学电气信息学院智能化电子系统设计报告

EA = 1; //开总中断 ET0 = 1; //开定时器0中断 TR0 = 1;

//启动定时器0

}

void Timer0() interrupt 1 { TH0 = (65536-46080)/256; TL0 = (65536-46080)%6; Timer0_Count++;

}

void SMG_Init(void) { P1 = 0xFF; //位初始化 P2 = 0xFF; //段初始化

}

void SMG_Display(u8 wei,u8 duan) { //如果位用138译码器 P1 &= 0x1F; //位控制 P1 |= (wei-1)<<5;

P2 = DuanDis[duan]; //显示段值

delay_ms(1); }

void Key_Init(void) { P0 = 0xFF; }

void Warning_Init(void) { LED_Warning = 1; //关闭报警LED Buzzer_Warning = 1; //关闭蜂鸣器

}

void main(void)

{ u8 DingShi = 0,Delay_Flag = 0; Key_Init(); SMG_Init();

//数码管初始化

Timer0_Init(); //定时器0初始化

Warning_Init(); Relay = 1;

//继电器初始化,断开

LED_Water = 1; //水阀指示灯初始化,

LED灭 SMG_Display(1,0); //分

SMG_Display(5,0);

SMG_Display(3,0); //秒 SMG_Display(4,0); SMG_Display(8,0);

//次数 while(1)

{ {

Timer0_Count = 0;

if(Miao_Count == 0)

{ Miao_Count = 60; if(Fen_Count == 00)

Fen_Count = 60;

Fen_Count--;

}

Miao_Count--;

//定时器计20

次为一秒

}

Dao_Fen_Shi = Fen_Count / 10; Dao_Fen_Ge = Fen_Count % 10; Dao_Miao_Shi = Miao_Count / 10;

Dao_Miao_Ge = Miao_Count % 10;

26

西华大学电气信息学院智能化电子系统设计报告

SMG_Display(1, Dao_Fen_Shi); //倒计时显示 SMG_Display(5, Dao_Fen_Ge); SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci);

//次数显

if(Ci!=0

&&(Fen_Count==0)

&&

(Miao_Count==0)) { Relay = 1; //切断电源 Ci--; if(Ci == 0) {

LED_Warning = 0; //计

时到,光报警

Buzzer_Warning = 0; //声

报警

All_Time_End = 1;

}

for(i=695;i>0;i--) //延时

10秒,(延时参数i待调) {

SMG_Display(1,

Dao_Fen_Shi);

SMG_Display(5,

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

SMG_Display(8, Ci);

//次数显示

}

if(Ci == 0) {

LED_Warning = 0; //计

时到,光报警

Buzzer_Warning = 0; //声

报警

All_Time_End = 1;

}else

Relay = 0; //自动接通电

源 if(Ci != 0) {

Fen_Count

=

Once_Time_Fen; //每次定时时间一样

Miao_Count

=

Once_Time_Miao; }

}

if(All_Time_End

==

1/*Ci==0

&&(Fen_Count==0) && (Miao_Count==0)*/) {

Relay = 1; //切断电源

LED_Warning = 0; //计时到,

光报警 Buzzer_Warning = 0; //声报警

for(i=695;i>0;i--) //延时

10秒,(延时参数i待调)

{

SMG_Display(1,

Dao_Fen_Shi);

SMG_Display(5,

27

西华大学电气信息学院智能化电子系统设计报告

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

SMG_Display(8, Ci);

//次数显示

}

LED_Warning = 1; //10

后,报警自动结束 Buzzer_Warning = 1; All_Time_End = 0; Start_Timer0 = 0;

//

}

if(Key1 == 0) {

Key1_Flag = 1;

//\设定

\按键标志

Delay_Flag = 0;

//长按

延时标志

while(Key1 == 0)

//长按2

秒,松手检测 {

for(i=11;i>0;i--)

//

循环一次15毫秒 {

SMG_Display(1,

Dao_Fen_Shi);

SMG_Display(5,

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

SMG_Display(8, Ci);

// }

Delay_Flag++;

//延时标

志,循环12次,总共2秒 }

if((Key1

==

1)

&&

(Delay_Flag >= 12))

{

Start_Timer0 = 1;//长按设

定键后才开始计数定时器 while(Key1_Flag == 1) { if(Key2 == 0) {

delay_ms(10); if(Key2 == 0)

{

Miao_Count++;

//秒加1

if(Miao_Count

== 60) {

Miao_Count = 0;

Fen_Count++;

if(Fen_Count == 60)

Fen_Count = 0;

}

Delay_Flag = 0;

28

西华大学电气信息学院智能化电子系统设计报告

//延时标志

while(Key2 ==

0) //松手检测 {

for(i=0;i<10;i++)

//长按Key2后秒快速增加 {

Dao_Fen_Shi = Fen_Count / 10;

Dao_Fen_Ge = Fen_Count % 10;

Dao_Miao_Shi = Miao_Count / 10;

Dao_Miao_Ge = Miao_Count % 10;

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); //

Delay_Flag++; //延时标志 }

if(Key2

== 0 && Delay_Flag >= 30) {

Miao_Count++; //秒加1

if(Miao_Count == 60) {

Miao_Count = 0;

Fen_Count++;

if(Fen_Count == 60)

Fen_Count = 0;

}

Dao_Fen_Shi = Fen_Count / 10;

Dao_Fen_Ge = Fen_Count % 10;

Dao_Miao_Shi = Miao_Count / 10;

Dao_Miao_Ge = Miao_Count % 10;

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); // }

}

29

西华大学电气信息学院智能化电子系统设计报告

Once_Time_Fen = Fen_Count; //记录设置每次定时时间

Once_Time_Miao = Miao_Count; }

}

if(Key3 == 0) { delay_ms(10); if(Key3 == 0) {

Miao_Count--; //秒减1

if(Miao_Count

== 00) {

Miao_Count = 59;

if(Fen_Count == 0)

Fen_Count = 60;

Fen_Count--;

}

Delay_Flag = 0;

//延时标志

while(Key3 ==

0) //松手检测 {

for(i=0;i<10;i++)

//长按Key2后秒快速增加

{

Dao_Fen_Shi = Fen_Count / 10;

Dao_Fen_Ge = Fen_Count % 10;

Dao_Miao_Shi = Miao_Count / 10;

Dao_Miao_Ge = Miao_Count % 10;

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); //

Delay_Flag++; //延时标志

}

if(Key3

== 0 && Delay_Flag >= 30) {

Miao_Count--; //秒减1

if(Miao_Count == 00) {

Miao_Count = 59;

30

西华大学电气信息学院智能化电子系统设计报告

if(Fen_Count == 0)

Fen_Count = 60;

Fen_Count--; }

Dao_Fen_Shi = Fen_Count / 10;

Dao_Fen_Ge = Fen_Count % 10;

Dao_Miao_Shi = Miao_Count / 10;

Dao_Miao_Ge = Miao_Count % 10;

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge); }

}

Once_Time_Fen

= Fen_Count;//记录设置每次定时时间

Once_Time_Miao = Miao_Count; }

}

Dao_Fen_Shi

=

Fen_Count / 10;

Dao_Fen_Ge =

Fen_Count % 10;

Dao_Miao_Shi

=

Miao_Count / 10;

Dao_Miao_Ge

=

Miao_Count % 10;

SMG_Display(1,

Dao_Fen_Shi); //倒计时显示

SMG_Display(5,

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

SMG_Display(8, Ci);

//次数显示

if(Key4 == 0)

//次数增加按键 { delay_ms(10); if(Key4 == 0) { Ci++; if(Ci == 10)

Ci = 0;

while(Key4 ==

0) {

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

31

西华大学电气信息学院智能化电子系统设计报告

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); //次数显? }

}

}

if(Key5 == 0)

//次数减小按键 { delay_ms(10); if(Key5 == 0) { if(Ci == 0)

Ci = 10;

Ci--;

while(Key5 ==

0) {

SMG_Display(1, Dao_Fen_Shi); //倒计

时显示 SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); //次数显?

} }

}

if(Key1 == 0)

//退出设定延时,长按 { Delay_Flag = 0; while(Key1 == 0) {

// delay_ms(300);

//长按3秒

for(i=11;i>0;i--)

//循环一次15

毫秒 {

SMG_Display(1, Dao_Fen_Shi);

SMG_Display(5, Dao_Fen_Ge);

SMG_Display(3, Dao_Miao_Shi);

SMG_Display(4, Dao_Miao_Ge);

SMG_Display(8, Ci); // }

Delay_Flag++;

//延时标志

if(Delay_Flag >= 12)

{

LED_Warning = 1; //关闭报警LED

Buzzer_Warning = 1; //关闭蜂鸣器

Key1_Flag

32

西华大学电气信息学院智能化电子系统设计报告

= 0; //按键标志 }

}

if(Delay_Flag >=

12) Relay = 0; //时间设定好后闭合继电器 if(Ci == 0)

Ci = 1;

// SMG_Run_Flag = 1; //启动数码管 }

}

}

}

if(Key6 == 0) { delay_ms(10); if(Key6 == 0) { Fen_Count = 0; Miao_Count = 0; Ci = 0;

Relay = 1; //未设定好时间,继电器断 }

while(Key6 == 0) { Start_Timer0 = 1;

Dao_Fen_Shi

=

Fen_Count / 10;

Dao_Fen_Ge

=

Fen_Count % 10;

Dao_Miao_Shi =

Miao_Count / 10;

Dao_Miao_Ge

=

Miao_Count % 10;

SMG_Display(1,

Dao_Fen_Shi); //倒计时显示

SMG_Display(5,

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

SMG_Display(8, Ci);

//次数显 }

Start_Timer0 = 0;

}

if(Key7 == 0) { delay_ms(10); if(Key7 == 0) { LED_Water = !LED_Water; }

while(Key7 == 0) {

SMG_Display(1, Dao_Fen_Shi); //倒计时显示

SMG_Display(5,

Dao_Fen_Ge);

SMG_Display(3,

Dao_Miao_Shi);

SMG_Display(4,

Dao_Miao_Ge);

33

西华大学电气信息学院智能化电子系统设计报告

SMG_Display(8, Ci);

//次数显 }

}

}

}

34

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

Top