毕业设计——基于单片机的数字抢答器设计.doc

上传人:文库蛋蛋多 文档编号:3975585 上传时间:2023-03-30 格式:DOC 页数:22 大小:917KB
返回 下载 相关 举报
毕业设计——基于单片机的数字抢答器设计.doc_第1页
第1页 / 共22页
毕业设计——基于单片机的数字抢答器设计.doc_第2页
第2页 / 共22页
毕业设计——基于单片机的数字抢答器设计.doc_第3页
第3页 / 共22页
毕业设计——基于单片机的数字抢答器设计.doc_第4页
第4页 / 共22页
毕业设计——基于单片机的数字抢答器设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《毕业设计——基于单片机的数字抢答器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计——基于单片机的数字抢答器设计.doc(22页珍藏版)》请在三一办公上搜索。

1、题目名称 基于单片机的数字抢答器设计 摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色

2、。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。关键字: 单片机 抢答电路 显示电路 报警电路 目 录一 数字抢答器的概述及制作要求1.1 数字抢答器的概述 1.2 设计任务与要求 二 单片机芯片的选择及抢答器方案 2.1 单片机芯片的选择 2.2 模块性能分析 三 硬件电路设计3.1 总体设计3.2 单片机最小系统电路3.3 显示电路的设计 3.4 抢答电路的设计 3.5 报警电路的设计 四 系统软件设计4.1 抢答器流程图4.

3、2 中断程序 4.3 按键模块的程序设计 4.4 显示模块的程序设计五 结束语 六 参考文献 基于单片机的数字抢答器设计引言:单片机的发展史单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。 1.SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌式系统独立发展道路上,Intel公司功不可没。 2.MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要

4、求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。 3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着

5、微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。 单片机的发展单片机作为微型计算机的一个重要分支,应用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。 绪论1.1 单片机抢答器的背景二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一

6、片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先

7、抢答到题,必须要有一个系统来完成这个任务。若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。1.2 单片机抢答器的意义本系统采用单片机作为整个控制核心。控制系统的四个模块为:显示模块、存储模块、语音模块、抢答开关模块。该系统通过开关电路四个按键输入抢答信号;利用一个数码管来完成显示功能;用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。在知识比赛中

8、, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。系统工作原理本系统采用89c52单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答开关模块。该抢答器系统通过开关电路四个按键输入抢答信号; 利用一个数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号,单片机控

9、制的智能抢答器设计。1.3 抢答器的应用随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。因此我们设计了以单片机为核心的新型智能的抢答器,在保留了原始抢答器的基本功能的同时又增加一系列的实用功能并简化其电路结构。抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺活动等场合。传统普通抢答器主要存在以下缺陷:(1)、在一次抢答过程中,当出现超前违规抢答时,只能处理违规抢答信号,而对没有违规的有效抢答信号不能

10、进行处理,因而使该次抢答过程变为无效。(2)、当有多个违规抢答时,普通抢答器或采用优先编码电路选择其中一个,或利用抢答电路电子元件的“竞争”选择其中一个。对于后者由于抢答电路制作完毕后电子元件被固定。各路抢答信号的“竞争”能力也被固定,因而本质上也有优先权。普通抢答器存在不公平性。(4)、当有多个违规抢答时,普通抢答器只能“抓住”其中一个而出现“漏洞”一 数字抢答器的概述及制作要求1.1 数字抢答器的概述对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个

11、起跑线上,体现了公平公正的原则。1.2 设计任务与要求(1)给主持人设置一个开关,用来控制系统的清零(显示按键编号的数码管熄灭)和抢答器的开始。(2)抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答器按钮,按键编号立即锁存,并在数码管上显示选手的编号(即按键编号),同时扬声器发出声响提示(即报警)。此外,要封锁输入电路,禁止其他选手抢答。(3)抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即减计时,并显示在数码管上。(4)参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,

12、并保持到主持人将系统清零为止。(5)如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。(6)选手如果在主持人按开始键之前违规抢答,系统报警,数码管上显示违规选手号码(即按键编号),直到主持人将系统清零为止。注:系统每次报警后,均在3s后停止发出声响。二 单片机芯片的选择及抢答器方案2.1单片机芯片的选择单片机选用的是STC公司推出的STC89C52RC40C,它的机器周期的时钟可选:12时钟/机器周期、6时钟/机器周期;工作电压范围:3.4V-5.5V;工作频率范围:040MHz,相当于普通8051单片机的080MH

13、z;用户程序空间:根据单片机型号配置不同的用户程序空间,有4KB、8KB、13KB、20KB、32KB、64KB等;片内集成RAM :有1280字节和512字节两种;通用I/O口:相比传统的8051单片机增加了一个P4口;ISP(在系统编程)和IAP(在应用编程)功能:无需专用编程器/仿真器,可通过单片机串口直接下载用户程序,8KB程序3秒即可完成;有EEPROM功能;有看门狗定功能;内部集成MAX810专用复位电路,外部晶体20M以下时,可省外部复位电路;共有3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用,外部中断4路,下降沿中断或低电平触发中断,PowerDown模式可

14、由外部中断低电平触发中断方式唤醒;通用异步串行口(UART),还可用定时器软件实现多个UART;工作温度范围:有075和-4085两种(1)单片机管脚说明 Vcc:供电电压。 GND:接地。 P0口:P9口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在Flash编程时,P0口作为原码输入口,当Flash进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供的上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内

15、部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故,。在Flash编程和校验时,P1作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在Flash编程和校验

16、时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,如下表所示:P3口功能引脚简介P3口引脚 第二功能P3.0 RXD(串行口输入)P3.1 TXD(串行口输出)P3.2 INT0(外部中断0输入)P3.3 INT1(外部中断1输入)P3.4 T0(定时器0外部脉冲输入)P3.5 T1(定时器1外部脉冲输入)P3.6 WR(外部数据存储器写脉冲输出)P

17、3.7 RD(外部数据存储器读脉冲输出)P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/RPOG:当访问外部存储器时,地址锁存允许的输出电平由于锁存地址的地位字节。在Flash编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳出一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外该

18、引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在Flash编程期间,此引脚也用于施加12V编程电源(VPP)。11 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。12 XTAL2:来自反向振荡器的输

19、出。2.2模块性能分析模块部分主要分为STC89C52芯片、矩阵式键盘、LED数码管显示部分,下面对这后两部分进行介绍,其中对LED七段数码管显示器做详细介绍,并根据实际工作情况采用合适的工作方式。(1)矩阵式键盘利用矩阵式按钮开关S1S16组成抢答器的输入电路。S1S16为自复式常开按钮开关,分别作为选手抢答按钮,利用行线与列线分别扫描,扫描值相或来确定是几号按键按下,锁存器的输入端为低电平。矩阵式按键主要的一个特点就是,提高单片机IO端口的利用率,以少量的IO端口控制多个按键。当程序执行时,按下按键,七段数码管显示器上即显示相应的是哪个组按下抢答。(2)LED数码管显示译码器的逻辑功能是将

20、每一个输入的二进制代码译成对应的输出高、低电平信号,是编码器的反操作。数码管可以用TTL或CMOS集成电路直接驱动,所以使用译码器将BCD编码译成数码管所需要的驱动信号,以便使数码管用十进制数字显示出BCD编码表示的数值。七段数码管的段排列和内部结构如图所示七段数码管的段排列和内部部结构应根据实际情况决定究竟采用共阳还是共阴方式,其基本原则是:若单片机口线直接驱动数码管各段,最好采用共阳极数码管,因为8051系列单片机口线输出高电平时,输出的电流很小,数码管不会太亮。若数码管通过驱动芯片与单片机相连,就要看驱动芯片对数码管极性的要求了点亮显示器分为静态和动态显示两种方法。所谓静态显示,就是当显

21、示器显示某一字符时,相应的发光二极管恒定的导通或是截止。例如,其段数码管的a、b、c、d、e、f、导通,g截止,则显示0.这对这种显示方式每一位都要有一个8位输出口控制,所占硬件较多,一般用于显示位数较少(很少)的场合。当位数较多时,用静态显示所需的I/O过多,一般采用动态显示方法。所谓动态显示,就是逐位地轮流点亮各位显示器(扫描),对于每一位显示器而言,每个一段时间点亮一次。显示器的点亮既与点亮时的导通电流有关,也与点亮时间和间隔时间比例有关。调整电流和时间参数,可是实现亮度较高、较为稳定的显示,同时可减少工作电流。三极管中的COM是选通位,对于共阳极数码管,当a、b、c、d、e、f、g、h

22、端接低电平时,COM位高电平,数码管各段全部点亮。例如,想让数码管显示“1”,就必须使数码管的b、c段点亮,其它段熄灭;所以使b、c段为低电平,其它各引脚均为高电平。在设计电路时,可将这几位分别接到单片机的引脚上,还要加上限流电阻,这样就可由程序控制数码管的工作情况了。但是如果用一个端口驱动一个数码管,四位数码管就需要四个空闲端口,而在许多系统中并无四个端口可用。此外,使用四个端口往往使得每一个数字都需要独立驱动(缓冲)电路和排阻,这将大大增加系统的成本。最常见的解决方案是采用多路复用显示。这是指对于每一个显示只驱动1/4时间。只要在20Hz-50Hz之间循环所有显示,由于人眼存在视觉残留,在

23、这样的显示方式下,数码管看起来时同时点亮的。在这次课程设计中根据实际需要采用了七段数码管共阳极和静态显示方式。抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。于是,我想到了用单片机实现。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”

24、入单片机内。 在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil 进行仿真。三 硬件电路设计3.1总体设计根据抢答器的基本功能,可以设计出如下的单片机外围电路。(详细电路图见附件1)硬件电路设计主要由我的搭档汪姗完成,在这里只展示电路图。3.2 单片机最小系统电路:3.3 显示电路的设计:3.4 抢答电路的设计:3.5 报警电

25、路的设计:四 系统软件设计4.1 抢答器流程图流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。为便于识别,绘制流程图的习惯做法是:方框表示:要执行的处理(Process)平行四边型表示:代表资料输入(Input

26、) 不规则图形代表资料输出(Output)或报表输出(Print) 菱形表示:决策或判断(例如:If.Then.Else)我们组所设计的抢答器的程序采用的是C程序设计,C语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。抢答器主程序流程图如下:4.2 中断程序(1) 什么是中断中断是指由于某种随机事件的发生,计算

27、机暂停现行的程序的运行,转去执行另一个程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。有五种中断源:外部中断0、外部中断1、定时器中断0、定时器中断1、串行中断。它们的描述如下图所示:中断源符号名称终端引起的原因中断矢量地址INT0外部中断0由P3.2低电平或下降沿信号0003HT0定时器中断0定时/计数器0回零溢出P3.40013HINT1外部中断1由P3.3低电平或下降沿信号000BHT1定时器中断1定时/计数器1回零溢出P3.5001BHTI/RI串行中断串行口接收或发送完帧数据引起的中断0023H(2) 中断所用到的寄存器介绍定时器/计数器中所介绍的寄存器:、定时器/计

28、数器控制寄存器TCONTCON的作用是控制定时器的启动停止,标志定时器的溢出和中断情况;、中断允许控制寄存器IE对中断源的开放或屏蔽是由中断寄存器IE控制的,地址为0A8H,即可以按字节寻址,也可以按位寻址。当单片机复位时,IE被清零。、串行控制寄存器SCON定时/计数器的控制方法:在启动定时/计数器工作之前CPU必须将一些命令(称为控制字)写入定时/计数器中,这个过程称为定时/计数的初始化。(定时/计数器的初始化通过定时/计数器的方式寄存器TMOD和控制寄存器TCON来完成。定时/计数器方式寄存器TMODGATEC/TM1M0GATEC/TM1M0定时器1 定时器0M1M0工作方式功能说明0

29、0方式013位计数器01方式116位计数器10方式2自动再装入8位计数器11方式3定时器0:分成两个8位计数器;定时器1:停止计数(3)中断程序的编写的步骤:、根据要求设置IE(中断允许寄存器)的对应位EA(EA总中断允许位 EA=1开放所有的中断;EA=0禁止所有的中断),某个中断源还有相应的中断允许位a、当=1时:允许相应中断源的中断;b、当=0时:禁止相应中断源的中断;、INT0、INT1设定触发方式IT0(外部中断触发方式控制位)当为0时:低电平触发;当为1时:下降沿触发;、返回值是Void中断函数名() interrupt()(4) 为什么采用中断控制方式CPU与外部设备的数据传送方

30、式:无条件传送方式 CPU总认为外设处于准备好的状态,外设比较简单程序查询传送方式 外设有一个状态(状态存储在寄存器内)缺点:CPU工作效率低,CPU处于等待的状态,为解决此缺点便出现了第三种传送方式中断传送方式中断是指由于某种随机事件的发生,计算机暂停现行的程序,转去执行另一程序以处理发生的 事件,处理完毕后又自动返回原来的程序继续运行。优点:a.实现分时操作 CPU分为多个I/O设备服务,提高计算机的利用率(提前安排好 的函数而中断不同);b.实时响应 CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;c.可靠性高 CPU具有处理设备故障及掉电等突发性事件的能力,从而使系统的可靠

31、性提高。下图是中断服务程序流程图:中断服务程序具体如下:if(f20ms = 1)f20ms = 0;unsigned char key;unsigned char xiang = 3;unsigned int daojishu = 30;unsigned char start = 0; /1表示抢答开始;0表示抢答没有开始unsigned char kg1 = 0 /0表示蜂鸣器不响,1表示蜂鸣器响按键按下,才控制unsigned char kg2 = 0; /0表示蜂鸣器不响,1表示蜂鸣器响30秒到了,才控制unsigned char kg3 = 0; /系统清零标志unsigned ch

32、ar kg4 = 0;key = get_key();switch(key)case KEY1:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 1;else if(start = 0 & kg4 = 0)kg1 = 1;buffer3 = 1;shanshuo3 = 1;xiang = 3;break;case KEY2:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 2;else if(start = 0 & kg4 =

33、0)kg1 = 1;kg3 = 1;buffer3 = 2;shanshuo3 = 1;xiang = 3;break;case KEY3:if(start = 1 & kg3 = 0) kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 3;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 3;shanshuo3 = 1;xiang = 3;break;case KEY4:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3

34、 = 4;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 4;shanshuo3 = 1;xiang = 3;break;case KEY5:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 5;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 5;shanshuo3 = 1;xiang = 3;break;case KEY6:if(start = 1 & kg3 = 0)kg1 = 1;kg3

35、 = 1;kg4 = 1;start = 0;buffer3 = 6;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 6;shanshuo3 = 1;xiang = 3;break;case KEY7:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 7;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 7;shanshuo3 = 1;xiang = 3;break;case KEY8:if(s

36、tart = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 8;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 8;shanshuo3 = 1;xiang = 3;break;case KEY9:if(start = 1 & kg3 = 0)kg1 = 1;kg3 = 1;kg4 = 1;start = 0;buffer3 = 9;else if(start = 0 & kg4 = 0)kg1 = 1;kg3 = 1;buffer3 = 9;shanshuo3 = 1;

37、xiang = 3;break;case KEY0:if(start = 0 & kg3 = 0)start = 1;else if(start = 0 & kg3 = 1)kg3 = 0;kg4 = 0;xiang = 3;daojishu = 30;buffer3 = 0;break;case KEY_ADD:if(start = 0 & kg3 = 0)if(daojishu 30)daojishu -;buffer0 = daojishu%10;buffer1 = daojishu/10;break;default:/buffer7+;break;4.3按键模块的程序设计(1)按键识别

38、本次设计采用的是矩阵式按键,则要对按键分别进行列扫描和行扫描。首先将行线至于高电位,列线至于低电位,再读取行线的电位变化并记录;然后再将列线至于高电位,行线至于低电位,再读取列线的电位变化并记录。最后将两者的值相或来确定第几个按键按下,具体程序如下:unsigned char read_key()unsigned char hang = 0, lie = 0;unsigned char i;P3 = 0xF0;/ P3.0P3.3列线输出低,P3.4P3.7行线上拉输入。for(i = 0; i 10; i+);/ 延时hang = (P3 & 0xF0) 0xF0;/ 读行线,并高4位取反,

39、为1表示按下for(i = 0; i 10; i+);/ 延时P3 = 0x0F;/ P3.4P3.7行线输出低,P3.0P3.3列线上拉输入。for(i = 0; i 10; i+);/ 延时lie = (P3 & 0x0F) 0x0F;/ 读列线,并低4位取反,为1表示按下return hang | lie;(2)按键消抖我们知道,理想的按键按下的电位变化和实际的按键按下的电位变化是不同的,所以我们要进行消抖处理。于是我们采用单片机在一定的时间t内不断读取IO电位变化来清除消抖。经计算t=20ms。每20ms调用1次,如有按键返回按键编号,没有按键返回0unsigned char get_

40、key()static unsigned char old_key = 0;static unsigned char is_old = 0;unsigned char key;key = read_key();if(key = 0 | key != old_key)is_old = 0;old_key = key;elseif(is_old = 0)is_old = 1;return key;return 0;4.4显示模块的程序设计我们采用的是七段数码管来作为显示数字,在驱动数码管显示则用动态扫描方式。将要显示的数字放到一个数组中,在执行程序是只需从数组调取就行了。显示buffer数组中的内容,buffer中的值变化,数码管显示内容即发声变化。该函数必须2ms执行1次,以完成动态扫描任务unsigned char zixingma = 0x3f, 0x06,0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f;unsigned char weiduanma = 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f;unsigned char buffer8;unsigned char shanshuo8;void dis

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号