随着科学技术的进步,电子技术传感技术以及材料技术近年来得到了很大的发展。国内外微波炉研发机构和生产工厂,为了满足微波炉消费者的使用要求,将各种先进的现代化技术应用微波炉,推出了一系列新颖先进的微波炉产品。这些微波炉新产品,反映了微波炉技术发展趋势,这些趋势主要表现在以下几个方面。
(1)智能化。采用微电脑控制技术和传感器感测技术,实现微波炉的智能化加热烹调,是微波炉技术发展的一大方向。这中智能化的微波炉,无需使用者在操作按键上输入烹调时间、加热功率、食物重量等参数,只要按一下启动键,微波炉内的传感器就将检测到的食物温度、整齐湿度等参数不断输出给电脑控制芯片,微电脑控制芯片进行一系列的运算、比较、分析之后,输出相应的指令,自动控制微波炉的加热时间和功率大小,实现智能化全自动烹调。
(2)多功能。随着现代化人们生活节奏的加快以及追求生活质量的提高,对于食物的加工烹饪也提出了更高的要求,因而出现了多功能的微波炉。比如将电烤箱的烧烤功能元件加入微波炉,制造出的微波炉烧烤组合微波炉,就是一个例子。这种微波炉目前在国内已经非常普遍,其优点就在于利用微波炉能量快速烹调,使食物具有更好的口感和视觉效果效应。
(3)节能化。松下公司将变频技术应用于微波炉推出的变频微波炉产品,通过将市电电源换为变频电源,能将50Hz的电源任意转换成20000~45000Hz的高频电源,供给微波炉产生电路,使微波炉的输出功率随着电源频率的变化而改变,从而改变了以往微波炉利用占空比原理调节微波炉输出功率的方式,不仅使得微波炉能量产生电路的供电系统的体积重量大大减小,而且使得耗电量减少了四分之一左右。
(4)健康化。随着人们健康环保意识的增强,对于食品中热量的限制也愈加重视。作为现代化食品烹调器具的微波炉,能烹调出低热量的保健食品。
(5)操作简便化。采用各种液晶触摸式控制面板和声控传递系统,使得这种多功能微波炉的操作变得简单易行。
1 引言
随着人们生活水平的不断提高,现代化的厨房电器已成为人们日常不可缺少的家用电器。不断更新的现代化家用厨房电器,极大地方便和丰富了们的家庭生活。如微波炉已经成为现代城市生活中人们不可缺少的烹饪工具,现在的微波炉已经可以做到煎、煮、烤、烘、焖、炖、蒸、烩等多种烹饪方式,做出各种营养美味的食物。与其他烹饪工具相比,微波炉具有热效率高、耗电量少、烹调速度快等优点。合乎经济原则,也比传统
1 / 46
文档可能无法思考全面,请浏览后下载!
烹饪节省时间。由于独特的加热原理,它可以有效保持食物原有的色、香、味与营养成份,还可以迅速解冻食物,保持食物的水分与鲜嫩。而且微波炉使用中绝少产生油烟与炽热空气,使厨房保持清洁。微波炉有如此强大的功能与新技术的不断应用是分不开的。例如,微波炉的智能化、多功能化、节能化、健康化、操作简便化的发展,使得微波炉的发展前景越来越好,越来越受到人们的欢迎。微波炉,顾名思义是用微波来加热,用的频率是24. 5亿赫左右的超短波,它由磁控管产生,经微波炉金属器壁反射再反射后,被炉中的食物吸收。食物能吸收微波是因为食物中含有水分[13]。水分子为极性分子,一端为正极,一端为负极,而微波是电磁波,有正半周与负半周。24. 5亿赫即表示该微波在一秒钟内变换正负极达24. 5亿次,每换一次,水分子即跟随反转一次;由于水分子一直振动反射,也就摩擦生热,热被食物分子吸收,食物就会变热、变熟[20]。微波炉控制器系统以P89V51RB2FN单片机为核心,由液晶显示模块、语音电路模块、键盘模块、掉电存储模块、电源模块等功能模块组成。本系统对基本的功能设置、数据装入和定时功能进行了重点设计。此外,还扩展了微波火力八级档位设定、烹调模式、语音提示、烹调预约时间设置、模拟无水及无物自停等功能,对微波炉的基本功能进行设计与创新。
2 总体方案论证与比较
方案一:采用数字逻辑芯片[3]。
本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。各个状态保持或转移的条件依赖于键盘控制信号。由于键盘控制信号繁多,系统的逻辑状态以及相互转移更是复杂,用纯粹的数字电路或小规模的可编程逻辑电路实现该系统有一定的困难,需要用中大规模的可编程逻辑电路。这样,系统的成本就会急剧上升〔相对于方案二〕。因此,本设计并未采用这种方案。
2 / 46
文档可能无法思考全面,请浏览后下载!
方案二:采用单片机作为整个控制系统的核心。
鉴于市场上常见的51系列8位单片机的售价比较低廉,我们的设计采用了
P89V51RB2FN单片机作为主控制器,P89V51RB2FN 是一款80C51 微控制器,包含16kB Flash 和256 字节的数据RAM ,3 个16 位定时器/计数器,8 个中断源,4 个中断优先级,2 个DPTR 寄存器[19];主要负责系统的控制与协调工作。具体方案如下:首先,利用单片机检测各种模拟信号,通过接收键盘送来的命令,确认功能设置,实现数据装入和实时监控,其次,根据CPU发出的信号控制语音播报、显示等功能,用软件实现系统定时功能,节省了硬件成本的开销。这样的设计使安装和调试工作可以并行进行,极大地缩短了总体设计和制造的时间,综合考虑以上因素。
我们采用了方案二,本方案的基本原理如图2.1所示,控制系统的原理图见附录。
交流输入 整流虑波 输出 调整 单元 键盘模块单片机及外围电路 语音模块液晶显示模块 3 模块电路设计与比较
本章主要是介绍系统各模块方案的选择与设计,比较各种方案,选择最可行最适合的模块电路,以使整个系统达到性价比最高。
3.1显示模块方案选择
单片机应用系统最常用的显示器是LED(发光二极管显示器)和LCD(液晶显示
3 / 46
图2.1 系统原理框图 掉电存储模块
文档可能无法思考全面,请浏览后下载!
器)[2]。这两种显示器可显示数字、字符及系统的状态。它们的驱动电路简单、易于实现且价格低廉,因此得到了广泛应用。现在就这两种显示模块进行分析,选择符合微波炉控制器的模块。
方案一:数码管LED显示模块
常用的LED显示器有LED状态显示器(俗称发光二极管)、LED七段显示器(俗称数码管)和LED十六段显示器。发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED十六段显示器用于字符显示。无论是单个LED(发光二极管)还是LED七段码显示器(数码管),都不能显示字符(含汉字)及更为复杂的图形信息,这主要是因为它们没有足够的信息显示单位。所以,在一些要求显示图文的系统中,不适宜用LED显示模块。
方案二:液晶显示器LCD模块
LCD是一种被动显示器,具有功耗低,显示信息大,寿命长和搞干扰能力强等优点,它不仅省电,而且能显示大量的信息如文字、曲线、图形等,其显示界面较之数码管有了质的提高,在低功耗的单片机系统中得到大量使用。[1]随着液晶显示技术的发展,LCD显示器的规格众多,其专用驱动芯片也相互配套,使LCD在控制和仪表系统中广泛应用提供了极大的方便。
本微波炉控制器系统要显示各种工作模式、微波炉火力档的设定、预约时间和工作时间等等图文复杂的信息,故选择液晶显示器作为显示模块。本系统采用的是FYD12864-0402B[17]型号的液晶显示器。
FYD12864-0402B液晶显示器是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字,也可完成图形显示;低电压低功耗是其又一显著特点。[17]由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
本系统中,液晶显示的工作方式是采用并行的工作方式。
3.2键盘模块方案选择
方案一:独立式按键结构
4 / 46
文档可能无法思考全面,请浏览后下载!
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图3.1所示。图中按键输入均采用低电平有效,些外,上拉电阻保证了按键断开时,I/O口线有确定的高电平。当I/O口线内部有上拉电阻时,外电路可不接上拉电阻。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。[1]
VCC P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51 图3.1 独立式按键电路
方案二:矩阵式按键
单片机系统中,若使用按键较多时,通常采用矩阵式(也称行列式)键盘。矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如图3所示。
由图3.2可知,一个4*4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当无按键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。[2]
矩阵式键盘大大节省了I/O口线,比较适合微波炉控制系统的要求,为其它的模块省了很多I/O口线,减小了整个系统的硬件开销。
5 / 46
文档可能无法思考全面,请浏览后下载!
+5V 0 1 2 3 0 4 8 12 0 5 9 13 1 6 10 14 7 11 15 3 1 2 3 2 图3.2 矩阵式键盘结构
3.3语音电路方案选择
方案一:蜂鸣器
蜂鸣器声音单一,无法实现一连串的语音播放,对一些要求比较高的系统来说,蜂鸣器不适合。本系统要求每次烹饪结束或者预约时间结束都要语音提示,所以本系统不采用蜂鸣器。
方案二:语音处理电路
在本设计中,提示音及语音播报功能都需要语音电路实现。本设计采用了ISD1730芯片实现语音处理功能,ISD1730属于华邦ISD公司2007 年新推出的单片优质语音录放电路,该芯片 提供多项新功能,包括内置专利的多信息管理系统,新信息提示( vAlert ) , 双运作模式(独立 & 嵌入式),以及可定制的信息操作指示音效。芯片内部 包含有自动增益控制、麦克风前置扩大器、扬声器驱动线路、振荡器与内存等的全方位整合系统功能。
其特点为可录、放音十万次,存储内容可以断电保留一百年;两种控制方式,两种录音输入方式,两种放音输出方式;可处理多达 255 段信息;有丰富多样的工作状态提示;多种采样频率对应多种录放时间;通过音频放大器放大输出;音质好,电压范围宽,应用灵活,价廉物美。该电路可以在单片机的控制下实现按地址录、放音,并能检测到放音是否结束。根据设计需要,语音提示音播放伴有LED灯闪烁提示,直观方便。
ISD1730 的独立按键工作模式录放电路非常简单(见图3.3),而且功能强大。不
6 / 46
文档可能无法思考全面,请浏览后下载!
仅有录、放功能,还有快进、擦除、音量控制、直通放音和复位等功能。这些功能仅仅通过按键就可完成。
在按键模式工作时,芯片可以通过 LED 管脚给出信号来提示芯片的工作状态,并且伴随有提示音,用户也可自定 4 种提示音效。
VCCD?LEDC?0.1uC?R34.3kR?1KJP?12P14P2034VCC567891011121314VCCVCCDVSSD/LEDRDY/INT/RESET/FWDMISO/ERASEMOSI/RECSCLK/PLAY/SS/FTVSSAVCCAAnaInROSCMIC+/VOLMIC-AGCVSSP2AUDSP-VSSP1VCCPSP+4 HEADER282726P21P12252423P22P132221VCC201918171615100u470uR14.3kMK?C34.7uC10.1uC20.1uMICROPHONE2R24.3kC?R?82K4.7u语音电路图3.3 语音电路
LS?SPEAKER 3.4电源方案选择
方案一:开关电源[4]
用开关稳压电源给整机供电,此方案能够完成本作品电流源的供电,但开关电源比较复杂,而且何种也比较大,制作不便,因而此方案难以实现。
方案二:LM7805三端稳压电源[8]
单片机控制系统以及外围芯片供电采用LM7805三端稳压器件,通过桥式整流,然后进行滤波稳压。可提供5V直流给单片机,如下图3.4所示。
7 / 46
文档可能无法思考全面,请浏览后下载!
19V_1D1U57805421C72200/25VVCCGNDVinVout3C8BRIDGE239V_22C60.1470/25VC90.1图3.4 电源电路
电源模块 3.5定时方案选择
方案一:采用实时时钟芯片
针对计算机系统对实时时钟功能的普遍需求,各大芯片生产厂家陆续推出了一系列的实时时钟集成电路,如DS1287、DS12887、DS1302等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据并进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用事业存放需长期保存但有时也需变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。但是实时时钟芯片对硬件要求较高,成本相对而言比较高,所以不采用该方案。[5]
方案二:软件控制
利用P89V51RB2FN内部的T0定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时,还有烹饪预约时间和烹饪时间的设置。该方案不但节省硬件成本,且能够加深我们对定时/计数器的使用、中断及程序设计方面的理解与提高,简化硬件设计,使整个设计整体小巧玲珑易携带。软件设计较适合现阶段我们的学习和锻炼,因此本系统将采用软件方法实现计时和定时。[6]
3.6掉电存储模块的选择
为了在断电的情况下能保存好已经设置好的时间和菜单等数据,为此系统采用24C01 E2PROM。24C01是一个4Kb的支持I2C 总线数据传送协议的串行CMOS
8 / 46
文档可能无法思考全面,请浏览后下载!
E2PROM 可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms 典型时间为5ms)的串行E2PROM。
当系统在工作过程中,遇到突然断电的情况下,系统会把断电前的状态和数据自动存进24C01 E2PROM中,在系统重新开始工作时自动从24C01 E2PROM中读取数据,以继续完成没有完成的工作,实现了系统的掉电存储功能。
U224C011234GNDA0A1A2GNDVCCWPSCLSDA8765VCCSCLSDA掉电存储模块
图3.5 掉电存储模块
3.7火力输出电路
微波炉的心脏是磁控管。这个叫磁控管的电子管是个微波发生器,它能产生每秒钟振动频率为24.5亿赫的微波。这种肉眼看不见的微波,能穿透食物达5cm深,并使食物中的水分子也随之运动,剧烈的运动产生了大量的热能,于是食物煮熟了。这就是微波炉加热的原理。
磁控管工作原理大意是把家用220V电转换20000伏高压,经过磁控管转化成2450MHZ的电磁波。磁控管阳极高压3000V-7000V,工作频率2450MHz,阳极电流为300mA-1200Ma[21],微波炉功率调整的原理就是通过高速控制磁控管的开停时间来调整功率,磁控管的功率是不可变的,因此直接控制磁控管的开关状态以实现对微波炉的火力设置是不可取的,现有两种方案选择。
方案一:开关电源
使用开关电源方式可以达到更高频率的开停速度,而且这个开关频率是可变的,这就实现的微波功率的精度控制,开关电源的使用以电子元件代替了高成本的高压变压器[18],大大节省了制造成本,但是相比较方案二,开关电源还是不合适。
方案二:PWM使能脉宽调节模式[19]
P89V51RB2FN单片机内部的可编程计数器阵列(PCA )功能模块含有一个特殊的16 位定时器,有5 个16 位的捕获/比较模块与之相连。每个模块可编程工作在4种模式
9 / 46
文档可能无法思考全面,请浏览后下载!
下:上升/下降沿捕获、软件定时器、高速输出或脉宽调节器。每个模块都与P1 口向连。模块0 连接到P1.3 (CEX0 ),模块1 连接到P1.4 (CEX1 ),依此类推。寄存器CH 和CL 的内容是正在自由递增计数的16 位PCA 定时器的当前值。PCA 定时器是5 个模块的公共时间基准,可通过编程工作在:1/6 振荡频率、1/2 振荡频率、定时器0 溢出或ECI 脚的输入(P1.2 )。定时器的计数源由CMOD SFR 的CPS1 和CPS0 位来确定。所有PCA 模块都可用作PWM 输出(如图3.6)。输出频率取决于PCA 定时器的时钟源。由于所有模块共用仅有的PCA 定时器,所有它们的输出频率相同。各个模块的输出占空比是独立变化的,与使用的捕获寄存器CCAPnL 有关。当PCA CL SFR 的值小于CCAPnL SFR 时,输出为低,当PCA CLSFR 的值等于或大于CCAPnL 时,输出为高。当CL 的值由FF 变为00 溢出时,CCAPnH 的内容装载到CCAPnL 中。这样就可实现无干扰地更新PWM 。要使能PWM 模式,模块CCAPMn 寄存器的PWM 和ECOM位必须置位,如图3.7所示。
本系统采用了PCA的模块0(P1.3)的使能脉宽调节模式(PWM)来控制单片机输出脉冲的占空比,通过改变输出占空比控制变压器初级绕组的通断电状态,即对其阳极电压的变压器初级绕组通断电的控制来实现对磁控管的开关控制。以此控制变压器的初级绕组微波炉磁控管的停和转,以实现对烹调功率的控制。
PCA方框图和PCA模块的PWM模式的方框图分别如图3.6和图3.7所示,表3.1就是输出的火力档位对应的电压。
表3.1 火力档位设置表
档 位(档) 输出电额(V)
0 0.2
1 0.7
2 1.35
3 1.95
4 2.55
5 3.15
6 3.75
7 4.35
8 4.95
10 / 46
文档可能无法思考全面,请浏览后下载!
图3.6 可编程计数器阵列方框图
图3.7 使能脉宽调节模式
11 / 46
文档可能无法思考全面,请浏览后下载!
4 系统软件设计及操作说明
本章只要是介绍微波炉控制器设计系统的软件设计及系统的操作说明,系统的液晶显示模块采用并行通讯的工作方式,键盘方面则采用程序扫描的工作方式,下面就各模块的软件设计进行了详细的介绍。本系统软件设计的程序见附录。
4.1系统软件设计
根据实际的硬件电路,为了有效地实现系统的基本功能,用软件方法实现了系统的定时功能、控制系统的语音播放、控制液晶显示等等。软件设计主程序流程图、按键功能扫描子程序图、预约时间子程序图、火力模式子程序图、火力自定义子程序图、烹饪模式子程序图、液晶显示子程序图、语音播放子程序图、定时服务子程序图和按键扫描子程序图分别如下图所示。
4.1.1主程序
主程序负责与各子程序模块的接口和检查键盘功能号,流程图如图4.1所示。
4.1.2按键功能扫描子程序
本系统的矩阵式键盘的工作方式采用的是程序扫描方式,为了能及时发现有键按下,CPU必须不断调用键盘处理程序,对键盘进行扫描以确定调用哪个功能子程序。通过调用按键程序扫描子程序,检测哪些功能按键被按下就进入哪种状态模块,以调用哪个功能子程序,进入哪种工作状态,不断地循环扫描,流程图如图4.2和图4.9所示。
4.1.3烹饪预约时间子程序
进入烹饪预约时间子程序,通过加、减按键和确定键来对时间进行设置,首先是对时的设置,按确定键再对分进行设置,接着对秒进行设置,每次设置完就要按一次确定键,以完成对时间的设置。时间设置完毕返回等待系统开始烹饪,流程图如图4.3所示。
4.1.4火力模式子程序
进入火力模式,通过加、减键,来设置烹饪时间,流程同预约时间的设置相同,时
12 / 46
文档可能无法思考全面,请浏览后下载!
间设置完毕就直接开始烹饪,流程图如图4.4所示。
4.1.5火力自定义子程序
火力自定义模式,既要设置火力,也要设置烹饪时间,流程是先通过加、减键设置火力档,最高是8档,最低是1档,确定以后再通过加、减键开始设置烹饪时间,火力和烹饪时间都设置完毕,直接开始烹饪,流程图如图4.5所示。
4.1.6烹饪模式子程序
烹饪模式是系统预先已经设置好烹饪时间和烹饪火力,只要按确定键就马上进入开始烹饪状态。流程图如图46所示。
4.1.7液晶显示子程序
液晶显示子程序显示各模式的工作状态,如显示火力模式、烹饪模式、预约时间和烹饪时间,液晶显示器采用的是并行通讯的工作方式。流程图如图4.7所示。
4.1.8定时服务子程序
程序检测系统是否开始烹饪,当系统已经进入烹饪状态,定时服务子程序开始工作,首先通过按键扫描判断预约时间标志按键是否被按下,当有按键按下进入预约时间的定时服务,如果没有按键按下,直接进入烹饪时间的定时服务。流程图如图4.8所示。
4.1.9语音播放子程序
进入语音播放子程序,当预约时间结束,响应播放语音提示,当烹饪时间结束,响应播放语音提示。语音播放有五种情况,分别是烹饪时间结束、烹饪预约时间结束、炉门检测、无水及无物五种情况,由三个按键模拟后三种情况,程序不断地对这五种情况进行扫描,当任何一种情况发生,系统立即响应并播放提示音给用户。流程图如图4.10所示。
13 / 46
文档可能无法思考全面,请浏览后下载!
开始 初始化 液晶初始化 调用键盘扫描子程序 调用按键操作子程序 调用液晶显示子程序 调用语音播放子程序 结束 图4.1 主程序流程图
14 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 调用预约时间子程序? Y 调用预约时 间子程序 N 调用火力模式子程序? Y N 调用火力模 式子程序 调用火力自定义子程序? Y 调用火力自 定义子程序 N 调用烹饪模式子程序? N 恢复现场 Y 调用烹饪模 式子程序 返回 图4.2 按键功能扫描子程序 15 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 N 是加键? Y 预约时+1>99? N Y 预约时=0 N 是减键? Y N 预约时-1=0xFF? 预约时=99Y 预约秒设置 N 确定键? N 确定键? Y 预约分设置 返回 N 确定键? Y Y 恢复现场 图4.3 烹饪预约时间子程序
16 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 N 是加键? Y 烹饪时+1>99? N Y 烹饪时=0 N 是减键? Y N 烹饪时-1=0xFF? 烹饪时=99Y 烹饪秒设置 N 确定键? N 确定键? Y 烹饪分设置 恢复现场 N 确定键? Y 返回 Y 开始烹饪 图4.4 火力模式子程序
17 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 是加键? N Y 火力档位+1>8? N Y 火力档位=8 是减键? N Y 火力档位-1=0? N Y 火力档位=0 N 确定键? Y 调用火力模式子程序 恢复现场 返回 图4.5 火力自定义子程序 18 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 确定键? N Y 取消键? N 开始烹饪 Y 恢复现场 返回初始状态 返回 图4.6 烹饪模式子程序 19 / 46
保护现场 显示火力模式 显示烹饪模式 显示预约时间 显示烹饪时间 保护现场 返回 4.7 液晶显示子程序图
文档可能无法思考全面,请浏览后下载!
保护现场 是否开始烹饪? Y 预约时间标志位为1? Y N N 烹饪时间秒-1=0xFF? Y 烹饪时间秒=59 N N 预约时间秒-1=0xFF? Y 预约时间秒=59 烹饪时间分-1=0xFF? Y 烹饪时间分=59 N N 预约时间分-1=0xFF? Y 预约时间分=59 烹饪时间时-1=0xFF? Y 烹饪时间结束 N N 预约时间时-1=0xFF? 恢复现场 Y 预约时间结束 返回 图4.8 定时服务子程序 20 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 有键闭合吗? Y 二次调用延时子 程序延时12ms N 延时6 ms 有键闭合吗? Y 求闭合键的键号 N 闭合键释放否? Y 键号送到A N 恢复现场 返回 图4.9 按键扫描子程序 21 / 46
文档可能无法思考全面,请浏览后下载!
保护现场 预约时间结束? Y 播放语音提示 N 烹饪时间结束? Y 播放语音提示 N 炉门是否关? Y 播放语音提示 N 无水? Y 播放语音提示 N N 无物? Y 播放语音提示 恢复现场 返回 图4.10 语音播放子程序 22 / 46
文档可能无法思考全面,请浏览后下载!
4.2系统操作说明
系统的操作只要是键盘的操作,还有扩展功能键的操作,下面就详细介绍各个按键的功能,和用途。
4.2.1键盘操作说明
表4.1 键盘功能
键号 1 2 3 4 5 6 7 8 9 0 A B C D E F
名称 烹饪 烘烤 解冻 自定义 鲁菜 川菜 粤菜 清蒸
预约时间标志位 —— 加键 确定键 —— 语音开关 减键 取消键
功能
烹饪火力为5档 烘烤火力为8档 解冻火力为1档 自定义火力和烹饪时间
鲁菜设定的火力为5档,烹饪时间为8分钟 川菜设定的火力为7档,烹饪时间为5分钟 粤菜设定的火力为4档,烹饪时间为10分钟 清蒸设定的火力为3档,清蒸时间为15分钟 当预约时间标志位按下,就开始设置预约时间 ——
加1键,设置时间和火力增加1,长按累加 确定键按下,系统默认当前状态 ——
语音开关开,液晶显示屏有音乐标志,播放提示音 减1键,设置时间和火力减少1,长按累减 任何状态下按了取消键,都返回初始状态
如表4.1所示,1~3为火力档位选择键,4为自定义模式键,5~8为预制菜谱选择键,其他为功能键。
火力档位选择键,按加、减键进入时间设置菜单,用加键A、减键E选择需要的时间,按确定键B进入运行状态。
23 / 46
文档可能无法思考全面,请浏览后下载!
自定义模式键,进入火力设定菜单,系统设置1~8八个火力档[9],从低到高,用加、减键选择相应的火力,按确定键进入时间设定菜单,再用加、减键设置需要的时间,然后按确定键进入运行状态。
预制菜谱选择键调用内置菜单,有四个选择,分别是鲁菜、川菜、粤菜和清蒸,根据每种菜色的特点,设置了相应的火力和时间,如鲁菜烹调方法擅长爆、烧、炒、炸,菜肴以清、鲜、脆、嫩著称,所以鲁菜的烹饪特点设置了五档火力,时间较短[12];川菜的特点是烹饪时间短,火候急,汁水少,口味鲜嫩,所以川菜设置的火力高,时间短;粤菜的烹调技艺是擅长煎、炸、烩、炖、煸等,色彩浓重[14],所以设置的档位是中档,时间稍长些;而清蒸是讲求菜式要新鲜、清淡、不腻,所以清蒸的火力最小,时间较长些。每个菜单模式对应着相应的火力和时间,只需按确定键即可确认运行,这四个按键相当于我们电脑操作常用的快捷键,方便快捷。
预约模式键,进入设定预约时间,液晶显示屏显示设置预约时间,按加、减键设置需要的时间,按确定键返回设定烹饪时间,预约时间的功能是可提前设定要烹饪的时间,当预约时间结束,系统会自动开始烹饪,无需人工操作,实现自动化操作,省时省力。
语音开关键,按下,液晶显示屏有音乐标志显示,表示进入相应功能时伴随有语音提示;如果没有音乐标志,则系统响应语音程序时,没有语音提示。
取消键,任何状态下按了取消键都返回初始开机状态,液晶屏显示主菜单。 由于系统功能有限,0键和C键留待扩展功能用。
4.2.2 扩展按键操作说明
为了能够实现智能控制和保证微波炉工作过程中的安全性,必须对相关的模拟参量进行检测。本系统采用三个按键分别模拟无物、无水及微波炉门没有关三种状态,当相应的按键按下,系统就会停止工作进入待机状态,并响应相应的语音提示,提示用户系统操作。
操作很简单,在系统工作过程中,只要按下三个键中的任一键,就可以模拟以上无物、无水和炉门检测中的任一种情况,系统马上响应语音提示用户安全操作;当三个按键同时按下时,优先响应炉门检测,接着是无物,最后才是无水。
炉门检测只要是当微波炉的门没有关上,系统都不会工作;无物按键是当微波炉内没有放入物品的时候,微波炉也不能工作;无水按键的功能是为了防止食物在烹饪过程中烧焦,当食物水分不足时,系统马上停止工作。
24 / 46
文档可能无法思考全面,请浏览后下载!
5 数据测试及分析
本系统的输入部分采用LM7805三端稳压器,桥式整流、滤波供给系统5V的直流电源和键盘输入模块。输出部分则有液晶显示和语音提示电路。
5.1常规模式测试
在该模式下,主要对烹调、解冻和烧烤三个功能分别进行测试。在每个功能下,通过键盘和液晶显示器选择菜单,设置完后,按启动键,开始模拟加热。这个过程中,液晶显示屏显示火力强度和烹饪时间,烹饪时间倒计时工作,系统正常工作。
在加热过程中液晶显示屏显示工作模式和火力强度以及加热时间。若此时打开炉门,则加热停止,定时时间全部停止,并语音提示“炉门打开,请关上”。此时系统处于待机状态。
在烹饪或烤烘过程中,若炉内食物水份太少,温度升高,则系统停止工作,并语音提示“炉内食物水份太少了”。当炉内未放物体时,相当于模拟量物体重量为0,这时尽管完成设置并启动,但系统不工作,并语音提示“炉内没放入物体”。
总之,对系统各种功能测试均正常,既具备一般微波炉的功能,同时还具有高温保护,和防止空加热功能。
5.2定时时间测试
表5.1 定时时间误差测量表 倒计时设定值 10分10秒 25分25秒 34分08秒 59分59秒
实际测得值 10分10秒 25分25秒 34分08秒 59分58秒
计时误差 0 0 0 1
定时时间测试如表5.1所示,就是设置食物的烹饪时间或烹饪预约时间与实际时间的误差,由表5.1可知,当定时时间较短时,系统的定时误差为0;当系统的定时时间较长时,如一个小时,则出现了误差,误差为一个小时有一秒的误差。造成误差的原因
25 / 46
文档可能无法思考全面,请浏览后下载!
是由于晶振和单片机定时器的累积误差而导致系统定时误差的产生。
5.3语音电路测试
设置好烹饪预约时间和烹饪时间,使系统进入工作状态,当烹饪预约时间结束和烹饪时间结束,如语音提示正常,则语音电路正常工作;再来测试扩展功能,在系统工作状态下,按下任一模拟开关,应响应相应的语音提示,如按下模拟无水开关,语音提示锅内水份不足,系统马上停止工作,按下模拟无物开关,系统提示炉内无物体,不能开始工作,按下炉门检测开关,系统提示炉门没有关上,不能工作等三种提示音,经过测试,均能实现,如表5.2所示。
表5.2 语音功能测试表
语音功能
烹饪预约时间结束提示音 烹饪时间结束提示音 炉内水份不足提示音 炉内无锅提示音 炉门检测提示音
语音提示音内容 开始烹饪
东西煮好了,马上可以享用 炉内食物水份太少 炉内没有物品 炉门打开,请关上
实现情况 实现 实现 实现 实现 实现
26 / 46
文档可能无法思考全面,请浏览后下载!
6 结束语
本系统以P89V51RB2FN单片机为核心部件,根据综合电子技术、数字与模拟电子电路以及单片机原理的知识,通过软件实现了微波炉的可编程控制系统,且各项功能达到了设计要求。在系统的设计过程中,我们力求硬件线路简单,充分发挥软件编程方便灵活的特点,并最大限度挖掘单片机片内资源,来满足系统设计要求。因时间有限,该系统还有许多值得改进的地方:例如硬件系统的集成度还可以进一步提高,控制系统的智能性有待于进一步加强,按键和系统性能有望进一步优化以增强用户使用的安全性与方便性,软件中某些逻辑判断方面的算法还有待于进一步优化。
两个多月终于过去了,心情终于放松了一点点了,通过两个多月的设计,让我对以前的知识温故而知新,把以前所学的知识都很好地联系起来,对以前所学的知识更加巩固。此次的设计让我深深的体会到数字电路的世界是如此的复杂和明了,特别是一些简单的电路的设计,在此之前,我并不怎么会设计电路。在设计档位灯的控制和时钟脉冲的关段和开通以及档位选择的控制电路中,我通过复习以前的知识,看以前的实验课本以及一些图书馆的资料,我终于应付了设计电路这一关。在设计过程中,虽然遇到许多的困难,但是经过细心的研究还是突破了难关,现在回味还是无穷的。焊电路的时候特别需要耐心,没有耐心是无法完成这个即又简单又枯燥的任务,每一条连线和拉线错综复杂,既考眼力,又考脑力,在努力了整整五天,才把整块板焊好。调试的时候特别兴奋,当看到自己的劳动有成果的时候,那时的心情别提有多开心,就像中奖一样。当然在调试过程中也发现在了很多问题,但是我不气妥,有问题才有进步,解决问题的过程就是学习的过程,我一直坚信这一点,通过不断的调试,发现问题并解决问题,我从中学到了很多。虽然刚开始一点头绪都没有,心情依然很烦躁。但是只要用心去专研,持之以恒,就会有新的发现。在设计的过程当中,通过与同学互相交流,互相学习,互相 讨论,受益匪浅。在两个月的毕业设计当中,我学会了如何面对困难和解决困难。
27 / 46
文档可能无法思考全面,请浏览后下载!
参考文献
[1]刘守义.单片机应用技术[M].西安:西安电子科技大学出版社,2002. [2]吴黎明.单片机原理及应用技术[M].北京:科学出版社,2005.
[3]公茂法、马宝甫编著.单片机人机接口实例集[M].北京:北京航空航天出版社,1998. [4]李广弟等.单片机原理机应用[M].北京:北京航空航天大学出版社,2003. [5]李华.MCS-51系列单片机使用接口技术[M].北京:北京航空航天大学出版社,1990. [6]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1993. [7]黄继昌等.传感器工作原理及应用实例[M].北京:人民邮电出版社,1998. [8]纪宗南.单片机外围器件实用手册[M].北京:北京航空航天大学出版社,1998. [9]格兰仕微波炉使用手册[Z].佛山市格兰仕微波炉电器有限公司.
[10]潘永雄、沙河、刘向阳.电子线路CAD实用教程[M].西安:西安电子科技大学出版社,2005.
[11] 周康生.微波炉的原理、使用与维修[M] .成都: 成都科技大学出版社,1997.4. [12] 李曾鹏.微波炉食谱[M] . 广州: 广东科技出版社,1998.6. [13] 梁庆德.如何选购微波炉[M] .杭州:浙江人民出版社.1996 [14] 萧义娟.微波炉特色菜(一)[M] .广州: 广东科技出版社,2000.
[15] 林立、李琳.家用微波炉的使用与维修 [M].福州:福建科学技术出版社,1996. [16] 许宝发、章雪影.家用电器的原理与维修400问[M]. 北京:机械工业出版社,2004. [17] FYD12864-0402B液晶显示模块使用手册[Z].www.cdfyd.com.
[18] 翟 雷、罗权威、王光锋.可编程微波炉控制器系统设计报告[R].山东:中国海洋大学工程学院,2004.
[19]P89V51RD2器件手册[Z].广州:广州周立公单片机发展有限公司.http://www.zlgmcu.com.
[20] 海尔家用微波炉使用说明书[Z].青岛:青岛海尔微波制品有限公司.2004.1.第一版.http://haier.com .
[21] 微波炉控制器的选型及其实例分析[OL].电子设计信息网,2007.7.23.
28 / 46
文档可能无法思考全面,请浏览后下载!
附录
附录A:系统模块图
29 / 46
XTAL2XTAL11819
2VCCRP3VCC34SCLSDAC1VCCU2RW1R14.3kJP1100u470uR41KC40.1uD123456789D1LED4.7KVCCRP4P00/AD0P01/AD1P02/AD2P03/AD3P04/AD4P05/AD5P06/AD6P07/AD7KEY1KEY2KEY3393837363534333210KR24.3kMK10.1uC3MICROPHONE2R34.3kVCC4 HEADER0.1uC2C84.7uVCCP27/A15P26/A14P25/A13P24/A12P23/A11P22/A10P21/A9P20/A8P144.7KVCC2827262524232221P27P26P25P24P23P22P21P201234567892930311234567891011121314VCCDVSSD/LEDRDY/INT/RESET/FWDMISO/ERASEMOSI/RECSCLK/PLAY/SS/FTVSSAVCCAAnaInROSCMIC+/VOLMIC-AGCVSSP2AUDSP-VSSP1VCCPSP+C94.7u282726P12252423P132221VCC201918171615R782KCR6VCC51LCD1286412VCC3LCDRS4LCDRW5LCDE6D07D18D29D310D411D512D613D71415VCC1617181920VSSVCCVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7PSBNC/RESETVOUTAK1RP14.7KVCCU1P89V51D快进P12放音P13复位P141234567LCDELCDRWLCDRSRP2VCC12345678P10/T2P11/T2EXP12/ECIP13/EX0P14/EX1P15/EX2P16/EX3P17/EX4123456789D0D1D2D3D4D5D6D71011121314151617C5P30/RXDP31/TXDP32/INT0P33/INT1P34/T0P35/T1P36/WRP37/RD附录B:系统电气原理图
4.7KVCC9RSTC10UPSENALE/PROGEA/VPPR510KY112C630P12MC730P文档可能无法思考全面,请浏览后下载!
1GND3A9V_2230 / 46
液晶显示模块P24U324C01VCCP23SCLSDAS2P22S3P21S4U47805VCCVoutC13470/25VC110.131VinC122200/25VP201122111221112211S71S81221221S6221212112S521P25S91S101S111S12122222222P26语音电路LS1SPEAKERP27S1311S1411S1511S161122222222B1S11B1234A0A1A2GNDVCCWPSCLSDA8765GND掉电存储模块9V_1D242BRIDGE2C100.1键盘模块TitleASizeA4Date:File:23-May-2008Sheet of D:\\PROGRAM FILES\\DESIGN EXPLORER 9D9ra SwEn\\ EBXyA:MPLES\\PREVIO~12.DDB34NumberRevision电源模块21 文档可能无法思考全面,请浏览后下载!
附录C:程序清单
#include sbit RS = P1^7; sbit RW = P1^6; sbit E = P1^5; //music sbit FWD = P1^2; sbit PLAY = P1^3; sbit RESET = P1^4; // sbit DOOR = P0^5; sbit NOTHING = P0^6; sbit WATER = P0^7; bit door_d,nothing_d,water_d; bit stop; //clock byte secpoint; byte mmsec1,mmsec2,msec,sec,min,hour; byte set_sec,set_min,set_hour,book_sec,book_min,book_hour; //byte asec,amin,ahour; //music byte duan,duan_data,music_time; bit played; // byte fire,fire_model,model; byte keyth,add_state; word keydelay; bit keych; bit booking,ok; void init(void); //key byte keyscan(void); void delays(void);//延时 byte kbscan(void);//键盘扫描 void prokey(void); //lcd void wait1640us(void); 31 / 46 文档可能无法思考全面,请浏览后下载! void LCD_WD(unsigned char lcddata); void LCD_WI(unsigned char lcddata); void displcdinit(void); void displcd(void); void disptime(void); void music(void); void t0int() interrupt 1 { TH0 = 0xe0;TL0 = 0xcf; //4ms e0 if((add_state==0xff)&&(!ok)&&(!stop)) { if(++msec==249) { msec = 0; if(booking) { if(--book_sec==0xff) { if(--book_min==0xff) { if(--book_hour==0xff) { book_hour = 0; book_min = 0; book_sec = 0; booking = 0; duan = 6; ET1 = 1; } else book_min = 59; book_sec = 59; } else book_sec = 59; } } else { if(--set_sec==0xff) { if(--set_min==0xff) { if(--set_hour==0xff) { 32 / 46 文档可能无法思考全面,请浏览后下载! set_hour = 0; set_min = 0; set_sec = 0; ok = 1; duan = 8; ET1 = 1; } else set_min = 59; set_sec = 59; } else set_sec = 59; } } disptime(); } } } void t1int() interrupt 3 { TH1 = 0x00;TL1 = 0x00; if(duan_data music_time = 0; ++duan_data; FWD = !FWD; } } else { if((++music_time>0x2b)&&(!played)) { music_time = 0; PLAY = 0; } else if((++music_time>0x10)&&(!PLAY)) { music_time = 0; PLAY = 1; played = 1; } 33 / 46 文档可能无法思考全面,请浏览后下载! else if((++music_time>0x60)&&(played)) //1s { RESET = 0; music_time = 0; ET1 = 0; played = 0; duan_data = 0; RESET = 1; } } } void main(void) { byte i; //清0X80~0XFF的Memory RESET = 0; for(i=0x80;i<0xff;i++) *(byte data *)i = 0; //强制i的值为DATA 的地址 for(i=0;i<0xff;i++); RESET = 1; init(); displcdinit(); while(1) { keyth = keyscan(); if(keych) { keych = 0; prokey(); displcd(); disptime(); } if((!DOOR)&&(!door_d)) { door_d = 1; duan = 0; stop = 1; ET1 = 1; } else if((DOOR)&&(!NOTHING)&&(!nothing_d)) { nothing_d = 1; duan = 2; stop = 1; ET1 = 1; } 34 / 46 文档可能无法思考全面,请浏览后下载! else if((DOOR)&&(NOTHING)&&(!WATER)&&(!water_d)) { water_d = 1; duan = 4; stop = 1; ET1 = 1; } else if(DOOR&&NOTHING&&WATER) { door_d = 0; nothing_d = 0; water_d = 0; stop = 0; } } } void init(void) { TMOD=0x11; // TR0=1;ET0 =1; TR1=1;//ET1=1; TR0=1;ET0=1; EA = 1; } void prokey(void) { switch(keyth) { case 1: fire = 8; fire_model = 1; add_state = 1; model = 10; set_hour = 0; set_min = 0; set_sec = 0; break; case 2: fire = 5; fire_model = 2; add_state = 1; model = 10; set_hour = 0; set_min = 0; set_sec = 0; //烹调 //烘烤 35 / 46 文档可能无法思考全面,请浏览后下载! break; case 3: //解冻 fire = 2; fire_model = 3; add_state = 1; model = 10; set_hour = 0; set_min = 0; set_sec = 0; break; case 4: fire = 0; fire_model = 4; add_state = 2; model = 10; set_hour = 0; set_min = 0; set_sec = 0; break; case 5: model = 1; fire_model = 4; fire = 7; set_hour = 1; set_min = 30; set_sec = 0; add_state = 3; break; case 6: model = 2; fire_model = 4; fire = 5; set_hour = 1; set_min = 10; set_sec = 0; add_state = 3; break; case 7: model = 3; fire_model = 4; fire = 4; set_hour = 1; set_min = 0; set_sec = 0; add_state = 3; //自定义 //鲁菜 //川菜 //粤菜 36 / 46 文档可能无法思考全面,请浏览后下载! break; case 8: //清真 model = 4; fire_model = 4; fire = 2; set_hour = 2; set_min = 30; set_sec = 0; add_state = 3; break; case 9: add_state = 4; booking = 1; break; case 10: add_state = 5; break; case 11: switch(add_state) { case 1: if(++set_hour>99) set_hour = 0; break; case 10: if(++set_min>59) set_min = 0; break; case 11: if(++set_sec>59) set_sec = 0; break; case 2: if(++fire>8) fire = 8; break; case 4: if(++book_hour>99) book_hour = 0; break; case 40: if(++book_min>59) book_min = 0; break; case 41: //预约 //时间 //增加 37 / 46 文档可能无法思考全面,请浏览后下载! if(++book_sec>59) book_sec = 0; break; default: break; } break; case 12: //确定 switch(add_state) { case 1: add_state = 10; break; case 10: add_state = 11; break; case 11: add_state = 0xff; break; case 2: add_state = 1; break; case 3: add_state = 0xff; break; case 4: add_state = 40; break; case 40: add_state = 41; break; case 41: add_state = 0; break; default: add_state = 0; break; } break; case 13: break; case 14: break; case 15: switch(add_state) //开机/复位 //语音开关 //减少 38 / 46 文档可能无法思考全面,请浏览后下载! { case 1: if(--set_hour==0xff) set_hour = 99; break; case 10: if(--set_min==0xff) set_min = 59; break; case 11: if(--set_sec==0xff) set_sec = 59; break; case 2: if(--fire==0xff) fire = 0; break; case 4: if(--book_hour==0xff) book_hour = 99; break; case 40: if(--book_min==0xff) book_min = 59; break; case 41: if(--book_sec==0xff) book_sec = 59; break; default: break; } break; case 16: set_hour = 0; set_min = 0; set_sec = 0; book_hour = 0; book_min = 0; book_sec = 0; fire = 0; fire_model = 0; model = 0; add_state = 0; ok = 0; //取消 39 / 46 文档可能无法思考全面,请浏览后下载! booking = 0; break; } } byte code disp_model[] = {\"模式: \byte code disp_firepower[] = {\"火力: \byte code disp_booktime[] = {\"预约时间: \byte code disp_worktime[] = {\"烹调时间: \byte code disp_fire1[] = {\"烹调 \byte code disp_fire2[] = {\"烘烤 \byte code disp_fire3[] = {\"解冻 \byte code disp_manul[] = {\"自定义 \byte code disp_model1[] = {\"鲁菜 \byte code disp_model2[] = {\"川菜 \byte code disp_model3[] = {\"粤菜 \byte code disp_model4[] = {\"清真 \void displcd(void) { byte i; switch(fire_model) { case 0: LCD_WI(0X94); for(i=0;i<8;i++) LCD_WD(0x20); break; case 1: LCD_WI(0X94); for(i=0;i<8;i++) LCD_WD(disp_fire1[i]); break; case 2: LCD_WI(0X94); for(i=0;i<8;i++) LCD_WD(disp_fire2[i]); break; case 3: LCD_WI(0X94); for(i=0;i<8;i++) LCD_WD(disp_fire3[i]); break; case 4: LCD_WI(0X94); i = fire; LCD_WD(i+'0'); 40 / 46 文档可能无法思考全面,请浏览后下载! for(i=0;i<7;i++) LCD_WD(0x20); break; } switch(model) { case 0: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(0x20); break; case 1: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(disp_model1[i]); break; case 2: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(disp_model2[i]); break; case 3: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(disp_model3[i]); break; case 4: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(disp_model4[i]); break; case 10: LCD_WI(0X84); for(i=0;i<8;i++) LCD_WD(disp_manul[i]); break; } } void disptime(void) { byte i; LCD_WI(0X8c); i = book_hour/10; LCD_WD(i+'0'); i = book_hour%10; 41 / 46 文档可能无法思考全面,请浏览后下载! LCD_WD(i+'0'); LCD_WD(0x3A); i = book_min/10; LCD_WD(i+'0'); i = book_min%10; LCD_WD(i+'0'); LCD_WD(0x3A); i = book_sec/10; LCD_WD(i+'0'); i = book_sec%10; LCD_WD(i+'0'); // LCD_WI(0X0d); //显示器开(bit2)、光标关(bit1)、闪烁关(bit0) // wait1640us(); LCD_WI(0X9c); i = set_hour/10; LCD_WD(i+'0'); i = set_hour%10; LCD_WD(i+'0'); LCD_WD(0x3A); i = set_min/10; LCD_WD(i+'0'); i = set_min%10; LCD_WD(i+'0'); LCD_WD(0x3A); i = set_sec/10; LCD_WD(i+'0'); i = set_sec%10; LCD_WD(i+'0'); } //**************************************液晶显示子程序************************************* void wait1640us(void) { word ii; for(ii=0;ii<0x200;ii++); //200 } void LCD_WI(unsigned char lcddata) { byte i; RS = 0; RW = 0; //DELAY 200us for(i=0;i<0x10;i++); //40 DATABUS = lcddata; E = 0; for(i=0;i<0x04;i++); E = 1; 42 / 46 文档可能无法思考全面,请浏览后下载! DATABUS = 0XFF; //150us } void LCD_WD(unsigned char lcddata) { byte i; RS = 1; RW = 0; //DELAY 200us for(i=0;i<0x10;i++); DATABUS = lcddata; E = 0; for(i=0;i<0x04;i++); E = 1; DATABUS = 0XFF; } void displcdinit(void) { byte i; LCD_WI(0X30); //8位2行5X7点阵 wait1640us(); LCD_WI(0X0c); //显示器开(bit2)、光标关(bit1)、闪烁关(bit0) wait1640us(); LCD_WI(0X01); //清屏 wait1640us(); LCD_WI(0X06); //文字不动(bit0)、光标自动右移(bit1) wait1640us(); LCD_WI(0X80); for(i=0;i<16;i++) LCD_WD(disp_model[i]); LCD_WI(0X90); for(i=0;i<16;i++) LCD_WD(disp_firepower[i]); LCD_WI(0X88); for(i=0;i<16;i++) LCD_WD(disp_booktime[i]); LCD_WI(0X98); for(i=0;i<16;i++) LCD_WD(disp_worktime[i]); } void music(void) { } //**************************************键盘子程序****************************************** //-------------------------------------------------------------------------------------------------- // 函数名称: delays 43 / 46 文档可能无法思考全面,请浏览后下载! // 函数功能: 延时程序 //-------------------------------------------------------------------------------------------------- void delays(void) { byte i; for (i=0;i<200;i--); } //-------------------------------------------------------------------------------------------------- // 函数名称: kbscan 键盘扫描子程序 // 函数功能: 判断是否有键按下,有返回键值,没有返回0 // p2的高四位为列,低四位为行 p2.7 p2.6 p2.5 p2.4 p2.3 p2.2 p2.1 p2.0 // 列4 列3 列2 列1 行4 行3 行2 行1 // 过程:先根据列判断是否有键按下,没有返回0,有,则逐行扫描以确定按键所在的行,再确定按键所在列 // 从而最终确定该按键。 //-------------------------------------------------------------------------------------------------- byte kbscan(void) { byte sccode,recode; P2=0xf0; //置所有行为低电平,行扫描,列线输入(此时) if((P2&0xf0)!=0xf0) //判断是否有有键按下(读取列的真实状态,若第4列有键按下则P2的值会变成0111 0000),有往下执行 { delays(); //延时去抖动(10ms) if((P2&0xf0)!=0xf0) //再次判断列中是否是干扰信号,不是则向下执行 { sccode=0xFE; //逐行扫描初值(即先扫描第1行) while((sccode&0x10)!=0) //行扫描完成时(即4行已经全部扫描完成)sccode为1110 1111 停止while程序 { P2=sccode; //输出行扫描码 if ((P2&0xf0)!=0xf0) //本行有键按下(即P2(真实的状态)的高四位不全为1) { recode=(P2&0xf0)|0x0f; //列 return(sccode&recode); //返回行和列 } else //所扫描的行没有键按下,则扫描下一行,直到4行都扫描,此时sccode值为1110 1111 退出while程序 { sccode=(sccode<<1)|0x01;//行扫描码左移一位 } } } } else { return 0; //无键按下,返回0 44 / 46 文档可能无法思考全面,请浏览后下载! } } byte keyscan(void)//主程序 { byte key,keyout; key=kbscan(); // delays(); switch(key) { case 0xee: keyout=13;break; // 1110 1110 case 0xde: keyout=14;break; // 1101 1110 case 0xbe: keyout=15;break; // 1011 1110 case 0x7e: keyout=16;break; // 0111 1110 case 0xed: keyout=9;break; // 1110 1101 case 0xdd: keyout=10;break; // 1101 1101 case 0xbd: keyout=11;break; // 1011 1101 case 0x7d: keyout=12;break; // 0111 1101 case 0xeb: keyout=5;break; // 1110 1011 case 0xdb: keyout=6;break; // 1101 1011 case 0xbb: keyout=7;break; // 1011 1011 case 0x7b: keyout=8;break; // 0111 1011 case 0xe7: keyout=1;break; // 1110 0111 case 0xd7: keyout=2;break; // 1101 0111 case 0xb7: keyout=3;break; // 1011 0111 case 0x77: keyout=4;break; // 0111 0111 default: keyout=0xff,keydelay=0;break; } if(keyout!=0xfff) { if(keydelay!=0xfff) keydelay++; if(keydelay==8) keych = 1; else if(keydelay==0xfff) { if(keyout==11||keyout==15) { keych = 1;keydelay= 0xa00; } } } return(keyout); } 45 / 46 文档可能无法思考全面,请浏览后下载! 致谢 本设计是在我的指导教师刘炽辉老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从题目的选择、次设计的理论运用、电路原理图的设计、资料的查阅、数据测量与报告撰写到最终完成,刘炽辉老师都始终给予我细心的指导和不懈的支持。 感谢刘炽辉老师对我的帮助与支持,感谢所有在毕业设计过程中帮助过我的同学和朋友,没有你们,就没有我的毕业设计,谢谢! 46 / 46 因篇幅问题不能全部显示,请点此查看更多更全内容