《593638891毕业设计(论文)基于单片机的微波炉控制器.doc》由会员分享,可在线阅读,更多相关《593638891毕业设计(论文)基于单片机的微波炉控制器.doc(45页珍藏版)》请在三一办公上搜索。
1、基于单片机的微波炉控制器摘 要随着社会的快速发展,人们的生活节奏逐渐加快,微波炉方便快捷的烹饪特点为现代人的生活提供了便利,在现代家庭中,微波炉已成为必备的烹饪工具之一。通过制作微波炉控制器,更充分了解微波炉的结构特点和工作原理。本文介绍了微波炉控制器的设计、调试与实现。本设计中的微波炉控制器以AT89C52单片机为核心,由矩阵键盘、时间显示、控制输出等模块组成。并且能够实现大、中、小火力选择以及启动、停止和时间重设功能。其中初始时间由矩阵键盘输入设置,火力大小通过发光二极管来表示、电机的转速表示在加热中。微波炉控制器工作时,将按照设定的时间进行加热并倒计时,等时间到后报警提示、火力指示灯熄灭
2、、转盘停止运转。关键词: 微波炉;单片机AT89C52;控制器The microwaveovencontroller based on MCUAbstractWith the rapid development of our society and the gradually speeding steps of our life, the convenient and efficient cooking features of microwave oven have provided us great help and make it an indispensable cooking tool
3、 in our modern life.Through the making of the microwave oven controller, I have a better understanding of its structural features and working principles. This article introduces the design, debugging and implementation of microwave oven controller. With the SCM AT89C52 at the core, it is made up of
4、modules of matrix keyboard, time display and control outputs and etc. Whats more, you can choose a max, mid or min power and make it work or stop or even time resetting at your will. And the initial time is set by matrix keyboard; the power size is shown by light-emitting diodes; the spinning of the
5、 motor shows its working. When it works, it heats according to the setting time and countdowns until the alarming system ringing, the power indicator light packing up and the turntable stopping.Keyword: microwave oven;SCM AT89c52;controller目 录1.绪 论11.1微波炉的背景资料11.2微波炉的工作原理11.3使用微波炉时的注意事项21.4微波炉控制器总体设
6、计思路22.系统总体方案.32.1系统总体设计32.2单片机的结构和接口的基本介绍42.2.1单片机的基本组成42.2.2单片机的内部结构52.2.3部分关键的程序存储单元62.2.4中断62.3显示驱动芯片7447/7448的简介72.3.1认识7447/744882.3.2引脚说明82.4高耐压、大电流达林顿陈列ULN200392.4.1概述与特点92.4.2方框图92.4.3 极限值92.4.4 电特性 102.5 LM7805稳压芯片介绍.102.5.1 概述 102.5.2 主要特点 102.5.3 外形图及引脚排列 112.5.4 功能框图 112.6三极管9013 123.硬件电
7、路与实现133.1微波炉控制器的总体硬件设计133.2矩阵键盘及器应用133.2.1矩阵键盘的结构与工作原理133.2.2矩阵式键盘的按键识别方法143.2.3矩阵式键盘的按键的例子153.2.4去抖处理153.3四位数码管原理及应用163.4步进电机控制电路173.4.1 步进电机工作原理173.4.2步进电机控制系统原理183.5 蜂鸣器控制电路194.控制程序设计与仿真204.1键盘扫描及显示程序设计204.1.1键盘扫描流程图204.1.2键盘扫描仿真电路214.1.3键盘扫描和显示输出的程序214.2倒计时程序设计.234.2.1倒计时流程图234.2.2倒计时仿真电路244.2.3
8、倒计时程序244.3步进电机控制程序设计264.3.1步进电机流程图264.3.2步进电机仿真电路274.3.3步进电机转动程序274.4 总体程序设计294.4.1总体设计流程图294.4.2总体设计仿真电路304.3.3总体设计程序305.电路制作与系统调试 356.总结与展望36致 谢37参考文献38附 录39附录一:微波炉控制器实体图片39附录二:微波炉控制器硬件连接电路40附录三:微波炉控制器PCB板 411 绪 论1.1微波炉的背景资料微波炉已经有50多年的发展历史,时至今日,微波炉已实现了高度工业化规模的生产。主要生产为日本、韩国以及欧洲的一些发达国家。我国自80年代开始小规模生
9、产微波炉,发展至今,已具有相当的生产能力,成为该行业不可小视的生力军。微波炉在世界上发达国家的家庭普及率很高。美国是微波炉最大的消费市场。中国老百姓也已经开始认识和接受微波炉。可以预见,中国也将成为一个巨大的微波炉市场。 随着科技的发展,生活水平的提高,人们对微波炉的要求也越来越高。未来的发展趋势将以智能、信息为主流,使微波炉的发展更人性化。因此基于单片机的微波炉控制系统的开发有利于推动微波炉市场的发展,使老百姓能用上更优秀的微波炉。1.2微波炉的工作原理微波炉,顾名思义,就是用微波来煮饭烧菜的。微波炉是一种用微波加热食品的现代化烹调工具。微波是一种电磁波。这种电磁波的能量不仅比通常的无线电波
10、大得多,而且还很有个性,微波一碰到金属就发生反射,金属根本没有办法吸收或传导它;微波可以穿过玻璃、陶瓷、塑料等绝缘材料,但不会消耗能量;而含有水分的食物,微波不但不能透过,其能量反而会被吸收。微波是指波长为0011米的无线电波,其对应的频率为30000兆赫到300兆赫。为了不干扰雷达和其他通信系统,微波炉的工作频率多选用915兆赫或2450兆赫。微波炉由电源,磁控管,控制电路和烹调腔等部分组成。电源向磁控管提供大约4000伏高压,磁控管在电源激励下,连续产生微波,再经过波导系统,耦合到烹调腔内。在烹调腔的进口处附近,有一个可旋转的搅拌器,因为搅拌器是风扇状的金属,旋转起来以后对微波具有各个方向
11、的反射,所以能够把微波能量均匀地分布在烹调腔内。微波炉的功率范围一般为5001000瓦。微波加热的原理简单说来是:当微波辐射到食品上时,食品中总是含有一定量的水分,而水是由极性分子(分子的正负电荷中心,即使在外电场不存在时也是不重合的)组成的,这种极性分子的取向将随微波场而变动。由于食品中水的极性分子的这种运动。以及相邻分子间的相互作用,产生了类似摩擦的现象,使水温升高,因此,食品的温度也就上升了。用微波加热的食品,因其内部也同时被加热,使整个物体受热均匀,升温速度也快。1.3使用微波炉时的注意事项微波遇到金属物体,如银、铜、铝等会像镜子反射可见光一样被反射。常用金属隔离微波,不能使用金属器皿
12、加热食物。金属在微波加热的情况下还会产生火花,特别是较尖锐的金属制品如:叉。因此在使用微波烹调中,不得使用密闭的金属容器或金属网状容器来装载事物,以免发生意外事故。不要用一般普通塑料容器放入微波炉加热。虽然塑料自身不被加热,但热的食物会使容器变得很烫。这些塑料容器在高温下可能放出毒素,染污食物。使用微波炉时,应注意至少离炉0.5米以上,眼睛不要看着炉门,不可在炉前久站。食物从炉中取出后,最好先放几分钟再吃。1.4微波炉控制器总体设计思路通过对微波炉的了解,本设计采用89C52单片机作为设计的核心,由矩阵键盘、时间显示、控制输出等模块组成。由矩阵键盘模块来实现时间的设置,火力大、中、小的选择以及
13、启动、停止和时间重设功能;时间显示模块由七段数码管来实现,其中初始时间由矩阵键盘输入;火力大小通过发光二极管来表示,红、绿、黄三种灯分别表示大力大、中、小,默认为中火力;启动加热后,步进电机开始转动,七段数码管按照设定的时间进行倒计时,等时间快到零时报警提示、等于零时火力指示灯熄灭、转盘停止运转,工作结束。2系统总体方案2.1系统总体设计本设计采用AT89C52单片机作为设计的核心,由矩阵键盘、时间显示、控制输出等模块组成。由矩阵键盘模块来实现时间的设置,火力大、中、小的选择以及启动、停止和时间重设功能;时间显示模块由七段数码管来实现,其中初始时间由矩阵键盘输入;火力大小通过发光二极管来表示,
14、红、绿、黄三种灯分别表示大力大、中、小,默认为中火力;启动加热后,步进电机开始转动,七段数码管按照设定的时间进行倒计时,等时间快到零时报警提示、等于零时火力指示灯熄灭、转盘停止运转,工作结束。表 2-1 元件清单元件清单:元件清单数量AT89C521ULN2003174LS481LM78051LED4三极管90135四位数码管1步进电机1蜂鸣器1自锁开关1轻触开关16220欧电阻1610千欧电阻110k*8排阻130p电容210u电容1100u电容212MHZ晶振1USB接口116p插槽240p插槽1排针102.2单片机的结构和接口的基本介绍2.2.1单片机的基本组成 1CPU系统l 1个8位
15、微处理器CPU l 内部时钟电路l 总线控制逻辑 2内部存储器l 4KB的片内程序存储器(ROM/EPROM/Flash)l 128B数据存储器(RAM)和128B特殊功能寄存器SFR(80C51只用到其中21B) 3I/O接口及中断定时功能l 4个8位可编程的I/O(输入/输出)并行接口l 5个中断源的中断控制系统,可编程为2个优先级l 2个16位定时/计数器,既可以定时,又可以对外部事件进行计数l 1个全双工的串行I/O接口,用于数据的串行通信所有这些都通过单片机内部的总线相连接。 下图所示为80C51单片机的基本组成,可以看出在该芯片上集成了一个微型计算机图2-1 80C51单片机的基本
16、组成2.2.2单片机的内部结构1.中央处理器CPU CPU是80C51内部的1个字长为8位的中央处理单元,它由运算器、控制器两部分组成。实际上构成了单片机的核心。 (1)运算器l 以算术逻辑单元ALU(Arithmetic Logic Unit)为核心,还包括累加器A、程序状态字寄存器PSW(Program Status Word)、B寄存器、两个8位暂存器 TMP1和TMP2等部件。l 可以进行加、减、乘、除、加1、减1、BCD数十进制调整、比较等算术运算;l 也可以进行与、或、非、异或等逻辑运算;2.存储器 (1)片内ROM是程序存储器; (2)片内RAM,可用于存放输入、输出数据和中间计
17、算结果,或作为数据堆栈区。3I/O口 (1) 并行口 有4个8位并行I/O口P0P3,均可并行输入输出8位数据。 (2)串行口 有1个串行I/O口,用于数据的串行输入输出4定时器/计数器 (1)产生定时脉冲,实现单片机的定时控制; (2)用于计数方式,记录外部事件的脉冲个数。 图2-2单片机的内部结构2.2.3部分关键的程序存储单元在程序存储器中,某些单元保留给系统使用,见下表: 表2-2中断入口存储器单元保留单元的作用0000H0002H复位后初始化引导程序入口0003H000AH外部中断0入口000BH0012H定时器0溢出中断入口0013H001AH外部中断1入口001BH0022H定时
18、器1溢出中断入口0023H002AH串行口中断入口002BH定时器2溢出中断入口注:标注灰色背景的存储空间为增强型芯片所独有 2.2.4中断1、中断源 51单片机有5个中断源:两个外部中断、两个计数/定时器中断和一个串行口中断。2、中断响应步骤:(1)保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。(2)寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。(3)执行中断服务程序,用中断服务程序处理需要改变的变量或者事件。(4)中断返回,执行完中断服务程序后,从中断断点处返回主程序,继续执行主程序。3、中断的实现寄存器IE、IP、TCON和SCON来控制中断
19、申请、中断的开关和各种中断源的优先级确定。(1)中断方式和标志位单片机的中断标志位和方式的选择是通过TCON达到低4位控制字实现的。TCON中的低4位用于外部中断的控制,高4位是T0、T1控制字。控制字如下:表2-3 TCON中的控制字TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0TF1TR1TF0TR0IE1IT1IE0IT0外部中断请求源IT0-INT0触发方式控制位,可由软件进行置位和复位.IT0=0,INT0为低电平触发方式;IT0=1,INT0为负跳变触发方式.IE0-INT0中断请求标志位.当有外部的中断请求时,这位就会置1(这由软
20、件来完成),在CPU响应中断后,由硬件将IE0清0.内部中断请求源TF0-定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0.当CPU响应中断后,再由硬件TF0清0.TR0-定时器T0的中断允许.(2)中断允许寄存器IE表2-4中断允许寄存器IEIE.7IE.6IE.5IE.4IE.3IE.2IE.1IE.0EAXXESET1EX1ET0EX0其中: EA:总开关,如果它等于0,则所有中断都不允许。 ES:串行口中断允许。 ET1:定时器1中断允许。 EX1:外中断1中断允许。 ET0:定时器0中断允许。 EX0:外中断0中断允许。(3)5个中断源的优先级单片机的中断服务入口地址
21、如下,它们的自然优先级由高到低排列。外中断0:0003H定时器0:000BH外中断1:0013H定时器1:001BH串口:0023H开机时,每个中断都处于低优先级,我们可以用指令对优先级进行设置,中断优先级由中断优先级寄存器IP来设置,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。表2-5中断优先级寄存器IP-IP.4IP.3IP.2IP.1IP.0EAXXPSPT1PX1PT0PX02.3显示驱动芯片7447/7448的简介2.3.1认识7447/7448BCD码转换成7段LED数码管的译码驱动IC,首推7447系列,包括7446、7447、7448、74LS49,其中7446
22、及7447输出低电平驱动的显示码,用以推动共阳极的7段LED数码管;而7448及74LS49输出高电平驱动的显示码,用以推动共阴极7段LED数码管。7446、7447与7448的引角相同(双并排16Pins),74LS49为双并排14Pins,如图所示。 图2-3 7446、7447、7448/74LS49引脚图2.3.2引脚说明D、C、B、A:BCD码输入引脚。a、b、c.g:7段LED数码管输出引脚。Lamp Test:本引脚为测试引脚,简称为LT引脚。当本引脚输入低电平时,所连接的7段LED数码管全亮。正常显示下,本引脚应输入高电平。RBI:本引脚为涟波淹没输入引脚(ripple-bla
23、nking input),正常显示下,本引脚应输入高电平。若本引脚输入低电平(即0),且D、C、B、A引脚输入为0,则该位数不显示,这项功能称为消除前置0(leading zero suppression)或消除尾端0(trailing zero suppression)BI/RBO:本引脚为淹没输入或涟波淹没输出引脚(blanking in and/or ripple-blanking output)。正常显示下,本引脚输入高电平或空接。若本引脚连接低电平(0),则该位数将不显示。当该位数不显示时,本引脚将输出低电平,以串接到前一个位数的RBI引脚,作为消除前置0(leading zero
24、suppression)或消除尾端0(trailing zero suppression)之用。这4个IC都是开集极式输出,对于开集极式输出所连接的负载,其所连接的电源电压也有些差异,如下表所示。表2-6最大负载电压、最大吸入电流对照表最大负载电压最大吸入电流744630V40mA744715V40mA74485.5V6.4mA74LS495.5V8mA 2.4高耐压、大电流达林顿陈列ULN20032.4.1 概述与特点ULN2003 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。该电路的特点如下:ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它
25、能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。ULN2003 采用DIP16 或SOP16 塑料封装。2.4.2 ULN2003方框图图2-4 ULN2003内部框图表2-7 ULM2003极限值2.4.3 极限值(若无其他规定,Tamb=25)表2-8 ULM2003电特性2.4.4 电特性(若无其它规定, Tamb=25)2.5 LM7805稳压芯片介绍2.5.1 概述7805系列为3端正稳压电路,TO-220封装,能提供
26、多种固定的输出电压,应用范围广。内含过流,过热和过载保护电路。带散热片时,输出电流可达1A,虽然时固定稳压电路,但使用外接元件,可获得不同的电压和电流。2.5.2 主要特点输出电流可达1A输出电压有:5V过热保护短路保护输出晶体管SOA保护2.5.3 外形图及引脚排列图2-5 LM7805外形图2.5.4 功能框图图2-6 LM7805功能框图2.6三极管9013 三极管9013 9013是一种NPN型硅小功率的三极管它是非常常见的晶体三极管,在收音机以及各种放大电路中经常看到它,应用范围很广,它是npn型小功率三极管。 集电极电流Ic:Max 500mA 工作温度:-55 to +150 集
27、电极-基极电压Vcbo:40V 主要用途: 放大电路图2-7 9013管脚图3硬件电路与实现3.1微波炉控制器的总体硬件设计图3-1 微波炉控制器硬件连接电路3.2矩阵键盘及其应用3.2.1矩阵键盘的结构与工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如下图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比
28、较多时,采用矩阵法来做键盘是合理的。图3-2矩阵键盘矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。3.2.2矩阵式键盘的按键识别方法确定矩阵式键盘上何键被按下,介绍一种“行扫描法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下:判断键盘中有无键按下 将全部行线
29、Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。3.2.3矩阵式键盘的按键的例子图仍如上所示。AT89S52单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位
30、。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出: 一 二 三 四P1.7 1 1 1 0P1.6 1 1 0 1P1.5 1 0 1 1P1.4
31、0 1 1 1在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。3.2.4去抖处理 按键的抖动时间一般为5-10ms,抖动可能造成一次按键的多次处理问题。当采取措施消除抖动的影响。消除的办法有多种,常采用软件延时10ms的方法。 在按键较少时,常采用硬件去抖电路。 当按键较多时,常采用软件延时的办法。当单片机检测到有键按下时,先延时10ms,然后再检测按键的状态,若仍是闭合状态,则认为真正有键
32、按下。当检测到按键释放时,亦需要做同样的处理。3.3四位数码管原理及应用单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路。LED的发光原理,我们在这里不做介绍。七段LED的数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出他们的电极,点亮相应的点划来显示0-9的数字。将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阳式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然。LED的电流通常较少,一般均需在回路中接上限流电阻。假如我们将“b”和“c”段接上正电源,其它端接地或悬空,那么“b”和“
33、c”段发光,此时,数码管显示将显示数字“1”。而将“a ”、“b、“d”、“e”和“g”段都接上正电源,其他引脚悬空,此时数码管将显示“2”,其他字符的显示原理类同。图3-3四位数码管实物图图3-5 四位数码管实物引脚图 图3-4四位数码管内部逻辑图管脚顺序:从数码管的正面看,以第一脚位起点,管脚的顺序是逆时针方向排列:12-9-8-6 公共端D5-3 D6-3A-11 B-7 C-4 D-2 E-1 F-10 G-5 DP-3 DP5-3 DP6-3 四位数码管连接图图3-6 四位数码管连接图3.4步进电机控制电路3.4.1 步进电机工作原理图3-7 步进电机原理图1.步进电机(1)是一个数
34、字角度转换器,也是一个串行的数模转换器。 (2)是过程控制及仪表中的主要控制元件。(3)广泛用于定位系统2. 概念:(1)步进电机旋转的根本原因:错齿;(2)术语:齿距角、步距角;(3)通电一周,转子转过一个齿距角,N 为几,一个齿距角分几步走完。 3.4.2 步进电机控制系统原理图3-8步进电机控制系统的组成 用微型机控制步进电机原理系统图 图3-9 用微型机控制步进电机原理系统图 步进电机连接图图3-10 步进电机连接图3.5蜂鸣器控制电路蜂鸣器分有源蜂鸣器和无源蜂鸣器,这里的“源”不是指电源,而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所
35、以如果用直流信号无法令其鸣叫。必须用2K5K的方波去驱动它。 图3-12 蜂鸣器驱动电路图3-11 蜂鸣器实物图 4控制程序设计与仿真4.1键盘扫描及显示程序设计4.1.1键盘扫描流程图键盘扫描有键闭合延时去抖动扫描键盘找到闭合键计算键值建立有效标志返回建立无效标志闭合键释放图4-1微波炉控制器的键盘扫描方式流程图4.1.2矩阵键盘仿真电路图4-2 矩阵扫描显示电路4.1.3键盘扫描和显示输出的程序:#include#includechar TAB10=0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9;char disp4=0x8f,0x4f,
36、0x2f,0x1f; /数码管控制显示unsigned int digit=1234; /按键输入的数值char dig4; /声明led数码管显示的数字void debouncer(void); /声明防抖动函数void scanner(void); /声明扫描函数#define TH_M1 (65536-500)/256#define TL_M1 (65536-500)%256#define rowkey() (P1)&0x0f /读入p1低四位(列按键值)宏main()EA=1;ET1=1;TMOD=0X10; /定时器1,模式1TH1=TH_M1;TL1=TL_M1; TR1=1;wh
37、ile(1) scanner();void debouncer(void) /延时程序 int i; for(i=0;i3600;i+); /约30ms延时 void scanner(void) /扫描函数 char col,row; /声明行和列 char scan,keyin,kcode; /声明扫描信号,列按键值,扫描码 scan=0xef; for(col=0;col4;col+) P1=scan; /P1按键扫描 keyin=rowkey(); /读入第col行的列按键值_nop_(); /三个_nop_();作用为让 P1 口的状态稳定_nop_();_nop_(); if(key
38、in!=0) /若有按键按下 for(row=0;row3;row+) if(keyin=(0x01row) kcode=row+3*col; /计算出按键码 digit=digit*10+kcode; /扫描码写入七段数码管数组 digit=digit%1000; /取输入的后四位,输入不够四位高位为零 break; /离开第row列扫描 while(rowkey()!=0)/等按键放开debouncer(); /防抖动函数scan=(scan1)|0x01; /产生左一位扫描信号 char m=0;void T1_100us(void)interrupt 3 /T1中断子程序开始,显示四位
39、数码管 TH1=TH_M1;TL1=TL_M1;dig0=digit%10;dig1=(digit%100)/10;dig2=(digit%1000)/100;dig3=digit/1000;P2=TABdigm & dispm;m=(m3)? m+1:0; 4.2倒计时程序设计4.2.1倒计时流程图图4-3倒计时程序流程图 开始计数值初值计数值输出延时1s上次计数值取出计数值减1判断是否为0倒数结束 4.2.2倒计时仿真电路图4-4 倒计时显示电路4.2.3倒计时程序:#includechar TAB10=0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf
40、8,0xf9;char disp4=0x8f,0x4f,0x2f,0x1f; /数码管控制显示unsigned int digit=4321;/数值显示char dig4;#define TH0_M0 (65536-20000)/256#define TL0_M0 (65536-20000)%256#define TH1_M1 (65536-1000)/256#define TL1_M1 (65536-1000)%256main()TMOD=0x01; /定时器0,模式1TH0=TH0_M0;TL0=TH0_M0;IE= 0x82; /打开中断TR0=1; /启动计数器TR0EA=1;ET1=1;TMOD=0X10; /定时器1,模式1TH1=TH1_M1;TL1=TL1_M1;TR1=1;while(1);/*/* 定时中断 */*/int m0=50;void t0_1s(void)interrupt 1 /定时中断TR0TH0=TH0_M0;TL0=TH0_M0;m0-;if(m0=0)digit=(digit0)? digit-1:4321;m0=50;char m1=0;void T1_100us(void)interrupt 3/T1中断子程序开