热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【单片机汇编实战】基于51单片机的抢答器设计

【汇编实战】基于51单片机的抢答器设计一、项目要求二、设计难点三、设计思路四、proteus设计图抢答器电路复位重启电路时钟振荡电路晶体管显示电路报警电路串口输入输出电路设置时间电

【汇编实战】基于51单片机的抢答器设计

      • 一、项目要求
      • 二、设计难点
      • 三、设计思路
      • 四、proteus设计图
          • 抢答器电路
          • 复位重启电路
          • 时钟振荡电路
          • 晶体管显示电路
          • 报警电路
          • 串口输入输出电路
          • 设置时间电路
      • 五、实验结果与性能指标
      • 六、源码(含.asm汇编代码和.DSN电路文件)



操作系统:Win10

设计软件:Keil5 + proteus

单片机选型:AT89C51

制作日期:2020.6.15

发布日期:2020.12.25

一、项目要求

(1)构建proteus仿真平台:包含抢答输入+串口+数码管

(2)通过串口设置计时器的开始,并把抢答结果通过串口输出

(3)数码管输出抢答结果+组号

(4)比赛结束,能发出报警声

二、设计难点

1、合理分配89C51的中断系统。计划将两个定时器中断分别运用于抢答倒计时和蜂鸣器发出警报的时长,将两个外部中断分别运用于自定义倒计时时长。

2、机器周期与现实时间的匹配、及定时器的初值设定问题。

3、系统的启动、抢答功能则利用程序结构,不断循环检测。

4、在中断用尽的情况下考虑如何设计抢答器的抢答模式和待机模式(可自定义时长)的设计。

5、在抢答器的抢答模式和待机模式中,分别考虑数码管显示和抢答的公平性,故决定循环如下:显示数码管十位->检测玩家一是否抢答->检测玩家二是否抢答->显示数码管个位->检测玩家三是否抢答->检测玩家四是否抢答。

6、数码管显示所须的BCD码与二进制的运算问题。

7、单片机的重启复位保护功能。

8、便于用户增设抢答人数的拓展功能。

三、设计思路

在这里插入图片描述
系统分为两个模式,等待模式和抢答模式。

默认状态下为等待模式,该状态下可调节倒计时时间和启动倒计时开始抢答。

抢答模式中,则开始倒计时,任意玩家按下抢答键,倒计时即刻停止,且蜂鸣器发出警报,晶体管显示抢答成功玩家的标号;若倒计时结束无玩家抢答,数码管显示0,且蜂鸣器发出警报。无论以何种方式结束,系统都将再次进入等待模式,倒计时时间将恢复。在抢答模式中,用户不能对倒计时时间进行操作。

为了打破抢答用户数量的限制且保证相对公平性,各抢答器将不使用外部中断功能触发(51单片机仅2个外部中断),而采用循环检索的方式,通常情况下单片机的指令周期为微妙级,在现实应用中可忽略其误差影响。

而倒计时时间设定模块对触发时效性要求不高,也可使用循环检索,但为了代码编写便利,我们将两个外部中断功能用于此处,恰好满足两位数的时间设定需求。

而单片机的两个定时器中断源将分别用于抢答倒计时(可调)和蜂鸣器及显示抢答成功用户(3s)。

四、proteus设计图

在这里插入图片描述
(1)核心元件在电路中的功能:
AT89C51作为控制芯片,完成运算控制、信号识别以及实现显示功能。

四位数码管前两位显示倒计时,第三位置空,最后一位显示抢答组号。

晶体振荡器产生稳定的时钟脉冲来控制振荡电路的输入和输出。

蜂鸣器在比赛结束时能发出报警声。

(2)主要功能在电路中是如何完成的:

抢答器电路

四个抢答器按钮分别接于P1.1到P1.4,用于识别抢答按键的先后,锁存第一位抢答者编号,使后按者无效,之后通过译码显示抢答者编号。

其中切换模式开关接于P1.0,用于启动抢答模式。

复位重启电路

复位电路接于RST口,用于抢答前和抢答后的复位与重启功能。

时钟振荡电路

时钟振荡电路接于XTAL1和XTAL2,用一个晶体振荡器产生稳定的时钟脉冲来控制振荡电路的输入和输出,用于提供精确的定时。为了仿真实验便于计算,设置晶振为12MHz。

晶体管显示电路

接于P0.0到P0.6和P2.0到P2.3,用来显示各提示信息。前两位显示倒计时时间,最后一位显示抢答用户的序号,若无人抢答,显示0。开机后倒计时默认10s。

报警电路

接于P1.6,当比赛结束时发出报警声。为了方便观测,串接小灯表示状态。

串口输入输出电路

接于P3.0和P3.1,当串口输入s启动,串口抢答结果输出为SUC:+编号 无人抢答输出NONE。

设置时间电路

两个按键分别独立控制个位和十位,分别从0-9循环。

五、实验结果与性能指标

1、定时器置数设置(定时器0和定时器1相同):

MOV TMOD,#01H;设置定时器0模式
MOV TL0,#0B0H;
MOV TH0,#3CH;设置定时器0的初值MOV 11H,#60;蜂鸣器持续3s,每1s为20个loop

仿真设置晶振为12MHz,使用16位计数器,每一秒设置20个循环,即赋值应为216-1/20·106=15536=3CB0 H

2、抢答模式中,对各个用户检测的公平性:

//循环顺序:显示数码管十位->检测玩家1->检测玩家2->显示数码管个位->检测玩家3->检测玩家4,交错执行使数码管视觉效果均匀,对玩家的识别也相对公平

将顺序平均分配,保证检测的相对公平。以12MHz振荡频率为例,一个机器周期为1us。根据代码,相邻用户检测间相差5us;显示一位数码管也为5us。即用户之间最多相差5us,对实际使用几乎不造成影响。

3、倒计时模式下的时间设定功能:
倒计时模式下,软件禁止外部中断功能,但计数器依然运行,因此按下后外部标志位会置1,但不运行中断。直到抢答模式结束,进入等待模式后,开启外部中断允许,倒计时时间设定改变。因此抢答过程中,时间设定不会对功能造成影响,抢答结束后数码管时间才会立即变化(一位)。

4、设定时间00s后启动抢答:
蜂鸣器会立即被触发,数码管显示结果0(无人抢答),再次进入等待,不会触发bug。

5、数码管、蜂鸣器、串口的计数器分配问题:
由于串口必须使用计数器T1,因此分配蜂鸣器为T2。数码管在倒计时时,串口不工作,使用T1的中断;数码管显示结果时,串口也须输出结果,蜂鸣器发出警报,因此数码管使用T0的中断。

6、时钟、复位的仿真问题:
在proteus软件中无法调试复位功能,但根据电路图,我们可以推断该复位短路基本正确,在现实中可以实现复位功能。

同时我们发现,改变晶振大小并不会使机器周期变化,默认为12MHz。对仿真过程没有大碍。

六、源码(含.asm汇编代码和.DSN电路文件)

点击此处下载

未经允许不得转载,不得作为商业用途。


推荐阅读
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • RMAN中的不完整恢复是指通过还原所有数据文件将整个数据库回退,然后执行不完全恢复的操作。不完整恢复的场景包括完整恢复不可行或故意要丢失数据。完整恢复需要备份后生成的所有归档日志和联机重做日志,而如果这些日志缺失或损坏,恢复将在该点停止。决定故意丢失数据是在用户错误发生后采取的行动,例如忘了where条件导致整个表受影响。对于已提交的事务来说,这样的更改是不可逆的。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • Oracle 和 mysql的9点区别【MySQL】
    数据库|mysql教程oracle,Oracle,money,mysql,coun数据库-mysql教程1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在o ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • wordpress的内页悬浮选项卡功能预览及使用方法介绍
    本文介绍了wordpress的内页悬浮选项卡功能,包括功能预览和使用方法。用户可以自定义切换按钮,设置锚点信息区域,灵活多变且无需代码编辑。文章可以统一设置按钮,也可以独立设置单篇文章的按钮,滚动模式下按钮以滑动形式展示,具有条理性和锚点属性,有利于SEO。滚动效果增加了网站的互动性,让用户参与互动,同时完全兼容手机,使信息展示更清晰。 ... [详细]
  • 人淋巴细胞活化基因3蛋白(LAG3)的性质、应用及相关研究
    本文介绍了人淋巴细胞活化基因3蛋白(LAG3)的性质,包括其化学性质、物种来源、重组蛋白序列和应用说明。该蛋白可通过MHC II信号传导激活抗原呈递细胞,促使抗原特异性T细胞反应。关于MHC II分子是否单独调控LAG-3的抑制功能存在争议。此外,本文还介绍了LAG3抗体的相关研究,包括抗体的类型和应用领域。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
author-avatar
浅蓝色shenjinjin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有