2013年6位抢答器单片机实训报告 - 图文

更新时间:2024-05-31 11:23:01 阅读量: 综合文库 文档下载

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

电气工程及自动化学院 单片机原理及应用实训报告

题 目 : 六位抢答器 学 院 : 电气工程及自动化 班 级 : XXXXXXXXX 姓 名 : XXXX 学 号 : XXXXXX 专 业 : 电气工程及其自动化 指导老师 : XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX

日 期 : 2013年12月20日

摘 要

随着科学技术的发展和普及,单片机的应用越来越广泛,其中抢答器的作用也越来越重要。本组设计出以单片机为核心的六路抢答器,采用了液晶与数码管结合显示,声光报警,并手动复位的设计思想。当主持人按下按键,允许抢答,此时定时器10秒倒计时,一旦有选手按键抢答,它能根据不同的抢答输入信号,经过单片机的控制处理并产生与输入信号相对应的输出信号,通过LCD1602液晶显示相应的路数,然后蜂鸣器报警、点亮对应LED灯并等待主持人发出答题信号,其他抢答者即使按下按键也将无效,主持人再次按键允许答题后,该抢答者将有10秒时间答题,此时单片机倒计时,直至倒计时结束,整个抢答、答题环节结束,充分利用了单片机系统结构简单、功能强大、可靠性好、实用性强的特点。

本设计是以抢答为出发点。考虑到依需设定限时回答的功能,利用51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示倒计时间。用开关做键盘输出,蜂鸣器发生提示。同时系统能够实现:在抢答中,只有按下开始键后抢答才有效,如果在开始抢答前抢答为无效;满时后系统计时自动复位及主控强制复位。

关键词:六路 定时 显示 报警

- 1 -

Abstract

With the development of science and technology and popularization, all kinds of competitions, including contest is more and more the role of more and more important. This paper designed STC89C52 as the core, with digital display direct instructions, automatic latch showed results, and automatic reset design ideas, it can according to different contest input signal by MCU control, handle and produce different with the input signal corresponding output signal, finally LED digital pipe display by the corresponding points, even if the two groups of vies differs a few microseconds, also time can distinguish which group of priority press buttons, fully utilize the single-chip microcomputer system structure is simple, powerful, good reliability and practicability strong characteristic. This design is for the starting point. Responder Considering the set limit to answer in 89C52 single-chip microcomputer and function, use of peripheral interfaces, scare-answering system of the micro controller timer/counter timing and numeration principle, software and hardware organically, and makes the system can correctly to the time, at the same time making digital tube can properly show time. With a switch do keyboard output, the speaker happens hints. And the system can realize: in the contest, only after beginning vies to effective, if at the start of the contest for the invalid; former contest Full automatic reset and clock after the system master mandatory reset; Key lock, in effective condition, buttons invalid illegal.

Keywords:6-wire timing counting alarming

- 2 -

目录

第1章 绪论 ……………………………………………………………… 4

1.1 设计目的与意义…………………………………………………………………...4 1.2 课题要求 ……………………………………………..…………………………… 4 1.3 主要问题………………………………………..………………………..………4 1.4 设计所达到的要求………………………..………………………..………4 第2章 设计方案……………………………………………..………………….. 5

2.1 总体方案介绍 …………………………………..………………………….…5 2.2 方案分析比较………… ……………………………..………………………….…7 第3章 详细设计……………………………………………………..……………….. 8 3.1硬件电路的设计………………………………………..………………………….…8 3.1.1总电路原理…………………………………………..………………………….…8

3.1.2 时钟频率电路的设计………………………………..………………………….…8 3.1.3 LCD显示电路的设计………………………………..………………………….…9 3.1.4数码管显示电路………………………………………..…………………………. 8 3.1.5 报警模块的设计 …………………………………………..………………….…10 3.1.6 电源电路设计……………………………………………..………………10

3.2软件设计…………………………………………………..………………….…10 3.2.1软件任务分析…………………………………..………………………….11 3.2.2系统程序设计………………………………………..……………………….…13第4章 设计结果及分析………………………………………..…….……………….. 13

4.1 设计结果 …………………………………….………………………………..….13 4.2 设计分析 ….…………………………………………..………………………….14 第5章 总 结 ……..……………………………………………..………………………….14 致谢……………………………………………………..………………………15 参考文献……………………………………………..………………………15 附录1 电路总图………...………………… …..…..…………………………….……… ..16

- 3 -

第1章 绪论

通过这次设计,掌握MCU-51单片机的原理,简单了解多功能抢答器组成原理,初

1.1 设计目的与意义

步掌握多功能抢答器的调整及测试方法。同时通过本课题设计与装配、调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解多功能抢答器各单元电路之间的关系及相互影响,从而能正确设计、计算定时计数的各个单元电路。初步掌握多功能抢答器的调整及测试方法,提高动手能力和排除故障的能力。

1.2 课题要求

1. 每名选手有一个抢答按钮,按钮的编号与选手的编号对应; 2. 设置一个系统清除和抢答控制开关S,该开关由主持人控制; 3. 抢答器具有锁存与显示功能;

4. 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如10秒); 5. 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示 ,选手的编号和抢答的时间,并保持到主持人将系统清除为止。 6.如果无人抢答,抢答器倒计时结束后报警。

1.3主要问题

1. 硬件电路及参数的选择 2. 程序的简洁性

3. 定时及按钮扫描的精确性 4. 人机交互的完善程度 5. 程序执行的可靠性 6. 系统抗干扰性

- 4 -

1.4设计所达到的要求

1. 单片机最小系统板较完整,包括复位、振荡、上拉电阻、排针扩展等电路; 2. 系统配套220V交流转5V直流电源;

3. 锁存、液晶和LED数码管显示功能,蜂鸣器报警功能; 4. 定时器计时功能,一次抢答倒计时的时间由软件设置。

第2章 设计方案简述

2.1总体方案介绍

根据目前市场上抢答器的种类,抢答器的种类可以大体分为三种,以下我们对这三种进行详细比较。 方案一:

抢答器系统的各部分均采用中小规模集成数字电路,利用硬件电子元器件实现,用机械开关按钮作为控制开关,完成抢答输入信号的触发。如采用74LS148优先编码器来实现抢答功能等。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,没有软件的设计部分,不需要编程,但是电路结构复杂,调试困难,涉及到的外围元器件很多,造成抢答器的成本较高,并且制作过程工序比较烦琐,不便于安装与调试,给实际操作带来很大的麻烦。

方案二:

系统设计主要基于可编程的PLC设计,系统包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。

方案三:

系统采用MCS-51系列单片机作为控制核心,其片内带有4KflashROM,128的RAM,以及4个并行I/O口,能满足设计要求。该系统可以完成运算控制、信号识别以及显示

- 5 -

功能的实现。利用单片机程序判断选手按键是否有效,但是选手违规抢答,利用简答程序显示,启动蜂鸣器报警,告诉主持人有人违规操作,抢答无效。给出相应的延时,选手按正常的操作抢答,软件倒计时,利用STC89C52控制液晶显示各个环节,数码管显示实现倒计时时间显示,到相应时间提醒选手时间到了,停止作答,并启动蜂鸣器。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改性。

单片机特点如下:

(1)高集成度,体积小,高可靠性。

单片机将各功能部件集成在一块晶体芯片上,集成度很高,体积自然也是最小的。芯片本身是按工业测控环境要求设计的,内部布线很短,其抗工业噪音性能优于一般通用的CPU。单片机程序指令,常数及表格等固化在ROM中不易破坏,许多信号通道均在一个芯片内,故可靠性高。

(2)控制功能强:

为了满足对对象的控制要求,单片机的指令系统均有极丰富的条件:分支转移能力,I/O口的逻辑操作及位处理能力,非常适用于专门的控制功能。

(3)低电压,低功耗,便于生产便携式产品:

为了满足广泛使用于便携式系统,许多单片机内的工作电压仅为1.8V~3.6V,而工作电流仅为数百微安。

(4)易扩展:

片内具有计算机正常运行所必需的部件。芯片外部有许多供扩展用的三总线及并行、串行输入/输出管脚,很容易构成各种规模的计算机应用系统。

(5)优异的性能价格比:

单片机的性能极高。为了提高速度和运行效率,单片机已开始使用RISC流水线和DSP等技术。单片机的寻址能力也已突破64KB的限制,有的已可达到1MB和16MB,片内的

- 6 -

ROM容量可达62MB,RAM容量则可达2MB。由于单片机的广泛使用,因而销量极大,各大公司的商业竞争更使其价格十分低廉,其性能价格比极高。

2.2方案比较分析

从第一个方案我们可以看出,这个抢答器是由抢答电路,定时电路,报警电路,时序控制电路四个关键电路部分组成。扩展电路是由秒钟脉冲信号产生电路,译码电路,显示电路等,它的功能很齐全,设计的电路也很稳定。但是它的造价却很高,仅仅是集成电路他就用了八个,这个跟我们当初的设计理念是相冲突的。我们要的是功能齐全,但是造价比较低的设计。所以我们放弃这个方案。

而方案二采用可编程PLC设计实现的抢答器,但该系统的投入成本过于高昂,软件编程过于繁琐,对编程的语言掌握程度要求很高,而且其PLC在该领域的应用很少,普通人对PLC的理解及掌握都不是很深入,鉴于通用性和节省的原则,我们依然不采用该方案。

方案三采用单片机为核心器件,外围电路采用集成芯片,其可靠性好,结构简单,不但从性能上优于方案一和方案二,而且在使用上及其功能的实现上都较其他方案简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。该模式充分体现了原有系统性能的改进,功能的扩展及其他同类系统的不同之处,它包括硬件逻辑图与软件流程图,比较经济实用,所以我们选用单片机的方案。

- 7 -

第3章 详细设计

3.1硬件电路的设计

3.1.1 总电路原理

为使硬件电路设计尽可能合理,应注意以下几方面:

(1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。

(2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

(3) 程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C51单片机。 (4) RAM空间,MCU51内部RAM不多,当要增强软件数据处理功能时,往往觉得不足。如果系统配置了外部RAM,则建议多留一些空间。如选用8155作I/O接口,就可以增强256字节RAM.如果有大批数据需要处理,则应配置足够的RAM,如6264,62256等。随着软件设计水平的提高,往往只要改变或增加软件中的数据处理算法,就可以使系统功能提高很多,而系统的硬件不必做任何更换就使系统升级换代。只要在硬件电路设计初期考虑到这一点,就应该为系统将来升级留足够的RAM空间,哪怕多设计一个RAM的插座,暂不插芯片也好。

3.1.2 时钟频率电路的设计

图1 振荡电路

时钟电路是计算机的心脏,它控制着计算机的工作节奏。51单片机允许的时钟频率是因型号而异的。

- 8 -

晶振的选择: 6MHz的晶振,其机器周期是2us。 12MHz的晶振,其机器周期是1us, 也就是说在执行同一条指令时用6MHz的晶振所用的时间是12MHz晶振的两倍。为了提高整个系统的性能我选择了12MHz的晶振。

振荡方式的选择: 内部振荡方式,MCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。这样就构成了内部振荡方式 外部振荡方式是把已有的时钟信号引入单片机内。这种方式适合用来使单片机的时钟与外部信号一致。 在我的这个设计中没有也无需与外部时钟信号一致,所以我选择了内部振荡方式,由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。

3.1.3显示电路的设计

显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。 在这里我们使用的是LCD602液晶显示器显示,+3.3V电压,对比度可调,内含复位电路,提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 。有80字节显示数据存储器DDRAM ,内建有192个5X7点阵的字型的字符发生器CGROM ,8个可由用户自定义的5X7的字符发生器CGRAM 。

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵

字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一 图2 LCD液晶 个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,

正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

- 9 -

3.1.4数码管显示电路

倒计时显示采用数码管,驱动用P1口, 数码管采用动态显示。P3.0口控制74HC573锁存端,当开启锁存口时,P1口送高电平则能驱动数码管使其显示,P3.0置低电平锁存数据。在P1口高电平电压下接510欧的电阻,保证正常驱动。

图3 锁存器 图4数码管

3.1.5 报警模块设计

在单片机应用系统中,一般的工作状态可以通过指示灯或数码显示来指示,供操作人员参考了解系统的工作状况。但对于某些紧急状态,比如系统检测到的错误状态等,为了使操作人员不至于忽视,及时采取措施,往往还需要有某种更能引人注意提起警觉的报警信号。

这种报警信号通常有三种类型:

一是闪光报警,因为闪动的指示灯更能提醒人们注意。

二是鸣音报警发出特定的音响作用于人的听觉器官,易于引起和加强警觉。

前两种报警装置因硬件结构简单,软件编程方

便,常常在单片机应用系统中使用,而语音报警 图5 报警电路 虽然警报信息较直接,但硬件成本高。结构较复杂, 软件量也增加,下面主要介绍鸣音报警。

鸣音报警有两种方法,单频音报警和音乐声报警。实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加315V直流工作电压,

- 10 -

就能产生3KHz左右的蜂鸣振荡音响。压电式蜂鸣器结构简单、耗电少,更适于在单片机系统中应用。压电式蜂鸣器,约需 10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动。

3.1.6 5V直流电源设计

本次实训设计了一个220v交流转5v直流稳压电源,目的是为了在无USB供电的情况下,可通过日常用电提供电源,直流电源部分包括变压器、整流器、滤波电容、7805稳压模块等组成。

图6 直流电源

3.2 软件设计

3.2.1 软件任务分析

软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。

软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据

- 11 -

类型问题也一并规划好。各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难了。

软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系 统和外部中断(如掉电中断)。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。

开始

出现违规抢答 液晶显示,等待按键 允许抢答N Y

抢答 倒计时开启 N Y 显示选手编号号

程序设计流程图结束 内作答 N 主持人允许答题 Y 倒计时开启,选手10s - 12 -

3.2.2系统程序设计

本系统由于较简单,程序内容相对较少,本着简单易懂的原则,所以采用汇编语言实现其软件的设计。 进行汇编语言程序的编写应遵循以下四个步骤:

构思:其主要工作是分析题意,制作程序流程图。流程图的逻辑必须符合题意要求。 布局:其主要工作是分配单片机资源,包括程序地址分配,片内储存单元分配。如确定个程序段起始地址,确定某一片内RAM单元作为数组指针等。

编写:根据布局安排,将程序流程图转换为单片机指令。做到在流程图各环节相应指令对应的同时,提高运用指令的技巧性。

调试:对程序进行编译和试运行。如果运行不正确的话,一定要找出其中的差异来。要知道,编写程序就是不断的尝试错误,在调试中不断修改,提供程序的可靠性欲程序结构的合理性。

该系统应用程序由主程序和子程序模块组成。系统应用程序采用结构化模块设计,从功能上看,主要包括:主程序、电源检测程序、报警程序、控制程序等。

第4章 设计结果及分析

4.1 设计结果

在设计初期出现了一系列问题如焊接问题,程序问题等。在经过一系列努力后,我们成功实现了预期目标:设计好的6位抢答器可同时供6名选手比赛。分别用6个按钮S0--S5表示,有一个系统清除和抢答控制开关S1、S2开关由主持人控制。抢答器具有锁存与显示功能,即选手按按钮锁存相应的编号并在优先抢答选手的编号一直保持到主持人将系统清除为止。抢答器具有定时抢答功能,且一次抢答的时间由主持人设定如10秒。当主持人启动“开始”键后定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。参赛选手在设定的时间内进行抢答,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。如果定时时间已到无人抢答,本次抢答无效系统报警并禁止抢答定时显示器上显示。

- 13 -

4.2设计分析:

然而这次的设计并不是完美无缺的,它仍然存在着一些不足之处: 1、计时部分不够精确。 2、元件排布并不是最合理的。

3、最基本的部分完成不错,但是缺少创新,缺少发挥。

第5章 总结

本文研究与设计的八路多功能抢答器采用了通用的电子元器件,利用单片机及外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来。整体性好,人性化强、可靠性高,实现了数字显示控制的智能化,是各个需要显示数字或广告宣传的有力工具。

通过查资料和搜集有关的文献,培养了自学能力和动手能力。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过这次设计,我们学会了如何将学到的知识转化为自己的东西,并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。 整个设计通过了软件和硬件上的设计。我想这对于自己以后的学习和工作都会有很大的帮助的。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。

对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。 生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然这只是一次小小设计,可是我的确在其过程中学会了不少东西,明白了许多的道理,这也许就是长大的表现。 当然,通过这次设计我也发现自己的很多不足之处。在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的工作和学习中得到改善。

- 14 -

我的设计也还存在着一些缺陷,有待于在将来设计中进一步提高。这次设计也让我懂得细节决定成败,在以后的设计中我会严格吸取教训,做的更好!通过这次设计,我不仅加深了对知识的理解,将理论很好地应用到实际当中去,学会了怎么更好的处理知识和实践相结合的问题,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事,使之不断地战胜别人,超越前人。

同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃,把握重点、攻克难关,学到用到、活学活用。在以后的工作中、学习中、生活中,我会严格要求自己,追求完美。胜利的钟声也就一定会为我们而敲响。我懂得了学习的重要性,学会了坚持和努力,这将为以后的学习做出了最好的榜样!挫折是一份财富,经历是一份拥有。这次设计必将成为我人生旅途上一个非常美好的回忆!

致谢

本实训小组在此特别感谢学院组织这次单片机实训活动,感谢专业课老师这些天对学生的辛勤教导,同时,也感谢周围同学对该设计的大力帮助,在实训期间,小组不断遇到问题,每当向同学请教问题,周围的同学们都会热情的帮助我们解决各种难题,再次表示最诚挚的谢意!

参考文献

[1] 张鑫.单片机原理及应用(第2版)[M].北京:电子工业出版社,2010

[2] 李朝青.单片机原理及接口技术(第3版)[M].北京:北京航空航天大学出版社 2002

[3] 胡伟.单片机C程序设计及应用实例[M].北京:人民邮电出版社,2003

[4] 冯育长.单片机系统设计与实例指导[M].北京:西安电子科技大学出版社,2007 [5] 高伟.AT89单片机原理及应用[M].北京:国防工业出版社,2008

- 15 -

附录1

Protel绘制电路图如下:

- 16 -

Proteus仿真电路如下

- 17 -

附录2

汇编程序如下:

RS EQU P2.7 ;宏定义 ; RW EQU P3.6 EN EQU P2.6 LCDDATA EQU P0

D1 EQU P1.7 ;LED D2 EQU P1.0 D3 EQU P1.1 D4 EQU P1.2 D5 EQU P1.3 D6 EQU P1.4 D7 EQU P1.5 D8 EQU P1.6

WEI EQU P3.0 KEY1 EQU P2.0 KEY2 EQU P2.1 KEY3 EQU P2.2 KEY4 EQU P2.3 KEY5 EQU P2.4 KEY6 EQU P2.5

KEY00 EQU P3.4 ; KEY11 EQU P3.5

BEEP EQU P3.6 ORG 0000H LJMP START ORG 000BH LJMP TIME0 ORG 0030H

START: MOV SP,#60H MOV P1,#0FFH

MOV P2,#0FFH MOV P3,#0FFH SETB KEY00

MOV R3,#00H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 MAIN: CLR WEI

MOV P1,#00H LCALL KEY_DEL INIT: MOV LCDDATA,#01H 数码管锁存wei

键盘初始置1,按下置0 开始键或者3.5 蜂鸣器 ;P2键盘口置1 定时器程序内使用 定时器0方式1 ;延时一段时间

;写指令01H,清屏, 通过P0送出 - 18 - ; ; ; ; ;

LCALL ENABLE

MOV LCDDATA,#38H ;写指令38H,设定LCD为16*2显示,5*7 点阵,8位数据接口 LCALL ENABLE

MOV LCDDATA,#0FH ;写指令0FH,显示ON,光标ON,闪烁ON LCALL ENABLE

MOV LCDDATA,#06H ;写指令06H,光标输入方式增量移位 LCALL ENABLE

MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10H LCALL ENABLE

MOV DPTR,#TABLE5 ;第一行显示字符表头地址 显示WAIT! LCALL DISP ;显示第一行数据 MOV P2,#0FFH

;--------------------------------------------------- WAIT: MOV A,P2

CJNE A,#0FFH,ALARM AJMP KEEP

ALARM: MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE

MOV DPTR,#TABLE8 ;第一行显示字符表头地址 显示ERROR LCALL DISP ;显示第一行数据 CLR BEEP

LCALL DELAY_1S SETB BEEP LJMP START

KEEP: JB KEY00,WAIT ;按下Start LCALL KEY_DEL ;扫描 JB KEY00,WAIT

MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE

MOV DPTR,#TABLE6 ;第一行显示字符表头地址 显示START! LCALL DISP ;显示第一行数据

;--------------------------------------------------- MOV DPTR,#TABLE ;显示段码 SETB TR0 ;开定时器 CLR BEEP

LCALL DELAY_1S SETB BEEP

SETB WEI ;开锁存器

WAIT1: MOV A,#0FFH

- 19 -

ANL A,P2 ;扫描按键 CJNE A,#0FFH,CHANGE LJMP WAIT1

;--------------------------------------------------- CHANGE: CLR WEI ;定时10s内可以抢答 K1: JB KEY1,K2 LJMP SCAN_KEY1 K2: JB KEY2,K3 LJMP SCAN_KEY2 K3: JB KEY3,K4 LJMP SCAN_KEY3 K4: JB KEY4,K5 LJMP SCAN_KEY4 K5: JB KEY5,K6 LJMP SCAN_KEY5 K6: JB KEY6,WAIT LJMP SCAN_KEY6

;--------------------------------------------------- SCAN_KEY1: CLR WEI LCALL KEY_DEL

JB KEY1,NEXT1 MOV P1,#0FFH

CLR D1

MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10

LCALL ENABLE

MOV DPTR,#TABLE0 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 MOV R1,#1

MOV LCDDATA,#0C7H ;第二行起始字符地址 LCALL ENABLE

MOV DPTR,#TABLE1 ;第二行显示字符表头地址 LCALL DISP ;显示第二行数 CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ ;答题倒计时 LCALL KEY_DEL JB KEY11,$

LCALL QUESTION NEXT1: LCALL WAIT SCAN_KEY2: CLR WEI

LCALL KEY_DEL

- 20 - 显示Number

JB KEY2,NEXT2 MOV P1,#0FFH CLR D2

MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1

MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE2 LCALL DISP CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT2: LCALL WAIT SCAN_KEY3: CLR WEI

LCALL KEY_DEL JB KEY3,NEXT3 MOV P1,#0FFH CLR D3

MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1

MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE3 LCALL DISP CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT3: LCALL WAIT

;第一行起始字符地址

;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据

;答题倒计时

;第一行起始字符地址

;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据

;答题倒计时

- 21 - 显示Number

显示Number

SCAN_KEY4: CLR WEI

LCALL KEY_DEL JB KEY4,NEXT4 MOV P1,#0FFH CLR D4

MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1

MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE4 LCALL DISP CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT4: LCALL WAIT SCAN_KEY5: CLR WEI

LCALL KEY_DEL JB KEY5,NEXT5 MOV P1,#0FFH CLR D5

MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1

MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE45 LCALL DISP CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ LCALL KEY_DEL JB KEY11,$

;第一行起始字符地址

;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据

;答题倒计时

;第一行起始字符地址

;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据

;答题倒计时

- 22 - 显示Number

显示Number

LCALL QUESTION NEXT5: LCALL WAIT SCAN_KEY6: CLR WEI

LCALL KEY_DEL

JB KEY6,NEXT6 MOV P1,#0FFH CLR D6

MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE

MOV DPTR,#TABLE0 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 MOV R1,#1

MOV LCDDATA,#0C7H ;第二行起始字符地址 LCALL ENABLE

MOV DPTR,#TABLE46 ;第二行显示字符表头地址 LCALL DISP ;显示第二行数据 CLR BEEP

LCALL DELAY_1S SETB BEEP

JB KEY11,$ ;答题倒计时 LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT6: LCALL WAIT

;--------------------------------------------------- TIME0: INC R3 MOV A,R3

CJNE A,#20,TT2 TT1: CLR A

MOV R3,#00H MOVC A,@A+DPTR MOV P1,A INC DPTR

CJNE A,#3FH,TT2 LJMP OVER TT2: MOV TH0,#3CH ;0.05s MOV TL0,#0B0H SETB TR0

MOV A,#0FFH

ANL A,P2 ;扫描按键 CJNE A,#0FFH,CHANGE1 SJMP LOO CHANGE1:CLR WEI

- 23 - 显示Number

CLR TR0 LOO: RETI

;--------------------------------------------------- ENABLE: CLR RS ;写指令子程序 ; CLR RW CLR EN

LCALL KEY_DEL SETB EN RET

;------------------------------------- QUESTION: MOV DPTR,#TABLE SETB WEI SETB TR0 SJMP $

;------------------------------------- DISP: ;PUSH ACC

MOV A,#00H ;将ACC清零

MOVC A,@A+DPTR ;查表取得要显示的数据 LCALL DISP1 ;写入一个数据

INC DPTR ;数据表指针加1,准备取下一个数据 DJNZ R1,DISP ;一行没有显示完就继续 ;POP ACC RET

;-----------------

DISP1: MOV LCDDATA,A ;写1字节数据到显示端口 SETB RS ; CLR RW CLR EN

LCALL DELAY SETB EN RET

;-----------------

DELAY: MOV R7,#50 ;延时子程序 E1: MOV R6,#50 E2: DJNZ R6,E2 DJNZ R7,E1 RET

KEY_DEL: MOV R7,#50 ;按键消抖程序 E3: MOV R6,#100 E4: DJNZ R6,E4 DJNZ R7,E3 RET

DELAY_1S: MOV R5,#8

E7: MOV R7,#200 ;延时子程序

- 24 -

E5: MOV R6,#200 E6: DJNZ R6,E6 DJNZ R7,E5 DJNZ R5,E7 RET

TABLE0: DB \TABLE1: DB \TABLE2: DB \TABLE3: DB \TABLE4: DB \TABLE45:DB \TABLE46:DB \

TABLE5: DB \TABLE6: DB \TABLE7: DB \TABLE8: DB \

TABLE:DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ;3FH,06H,5BH 4FH,66H,6DH 7DH 07H,7FH,6FH,00H OVER: MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE

MOV DPTR,#TABLE7 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 CLR BEEP

LCALL DELAY_1S SETB BEEP SJMP $ END

- 25 - 显示Number

E5: MOV R6,#200 E6: DJNZ R6,E6 DJNZ R7,E5 DJNZ R5,E7 RET

TABLE0: DB \TABLE1: DB \TABLE2: DB \TABLE3: DB \TABLE4: DB \TABLE45:DB \TABLE46:DB \

TABLE5: DB \TABLE6: DB \TABLE7: DB \TABLE8: DB \

TABLE:DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ;3FH,06H,5BH 4FH,66H,6DH 7DH 07H,7FH,6FH,00H OVER: MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE

MOV DPTR,#TABLE7 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 CLR BEEP

LCALL DELAY_1S SETB BEEP SJMP $ END

- 25 - 显示Number

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

Top