找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24834|回复: 19
收起左侧

八位竞赛抢答器的单片机课程设计 仿真+源码+论文

  [复制链接]
ID:253682 发表于 2017-11-26 10:21 | 显示全部楼层 |阅读模式
Keilc课程设计

成绩评定表
学生姓名
贾超
班级学号
140302*
专  业
测控
课程设计题目
八位竞赛抢答器的设计



组长签字:

成绩

日期

             2017年  月  日


课程设计任务书
学  院
自动化与电气工程
专 业
测控技术与仪器
学生姓名
贾超
班级学号
1403020313
课程设计题目
八位竞赛抢答器的设计

实践教学要求与任务:
通过本课程设计使学生进一步巩固《KeilC程序设计》的基本概念、理论、分析方法和实现方法;增强学生软件编程实现能力和解决实际问题的能力。
1、熟悉所确定的题目从问题需求,数据结构,程序结构,难点及关键技术等方面进行分析,形成系统的设计方案;
2、根据方案设计硬件电路;
3、软件编程并调试;
4、完成文档整理,按照软件工程的要求完成设计论文;
5、通过答辩的形式对程序的功能进行评价与验收。


工作计划与进度安排:

第18周(12月26日-1月4日):布置设计任务,查资料,完成总体设计框架,完善设计内容,系统调试,验收答辩。



指导教师:
   2017年  月  日
专业负责人:
2017 年  月  日
学院教学副院长:
2017 年  月  日


Keilc课程设计
目录
引言
1  设计背景
1.1课题背景
1.2设计要求
2  8位竞赛抢答器系统简介
2.1系统设计原理
2.2系统组成
3  系统硬件设计
3.1主控制器选择
3.2 数码管动态显示电路
3.3 8位竞赛抢答器与单片机的接口电路图
3.4时钟电路
3.5复位电路
3.6系统总体电路图
4  程序设计
4.1系统运行结果
4.2系统分析
附录:源程序代码            
参考文献

引言

单片机的出现方便了人们的生活,所以单片机的使用也使抢答器电路更加简单和实用。但是传统抢答器具有以下问题有待解决:

  • 有的传统抢答器由数字电路组成,在使用现场会有多名选手或代表团参加比赛,所以会造成布线繁琐麻烦,现场不美观等问题;
  • 由于传统抢答器由电子元器件集成制作而成,所以会造成可靠性低,元器件集成工艺复杂,花费比较高等麻烦;

    3、由于传统抢答器由数字电路构成,所以可能造成抢答时控制不精确,功能单一等缺陷。

随着科学技术的发展和普及,各种各样的竞赛越来越多, 其中抢答器的作用也就显而易见。因此设计一种更易于使用和区分度高的抢答器成了非常迫切的任务。 现在单片机已进入各个领域,以其功耗小、智能化而著称。所以来利用单片机来设计抢答器便使以上问题得以解决。针对以上情况, 本课程通过Keilc软件编程,Protues软件仿真,设计出以AT89C51单片机为核心的八位抢答器,与晶振、数码管、蜂鸣器等通过外围接口实现的八路抢答器,利用单片机的延时电路、按键复位电路、时钟电路、定时器/计数器等,设计八路抢答器不仅具有实时显示选手的号码和抢答时间的功能,同时还利用汇编语言,使其实现复位,定时和报警功能。本次设计的系统实用性强,操作简单,扩展功能强。


1  设计背景1.1课题背景

各种知识竞赛、文娱活动的广泛开展,使抢答器成了必不可少的电子设备,它为参赛选手提供了公正、客观、快速的裁决,已逐渐发展成为一种成型的电子产品,但市面上所售抢答器价格一般较贵且多为小规模集成电路构成,其性能单一,工作起来不够理想。本文介绍了通过Keilc软件编程,及Protues软件仿真,模拟出一种以AT89C51单片机为核心的智能抢答器,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、成本较低的特点。它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过液晶显示屏显示相应的路数和答题时间等。

1.2设计要求

本设计主要是介绍了单片机控制下的八路智能抢答器系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:

    (1)同时供8名选手或8个代表队比赛,分别用8个按钮表示。

(2)设置系统清除开关S和抢答控制开关S,该开关由主持人控制。

(3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在数码管上显示选手号码。并且优先抢答选手的编号一直保持到主持人将系统清除为止。

    (4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定。

    (5)当主持人启动“开始”键后,定时器进行减计时。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。如果定时时间已到,无人抢答,本次抢答无效,定时显示器上显示00。


2  8位竞赛抢答器系统简介

2.1系统设计原理

该抢答器系统的硬件设计是以单片机为中心控制模块,采用模块化设计的八路抢答器,具有四个模块,分别为:按键输入模块、显示模块、时钟与复位模块、核心控制模块。

2.2系统组成

按键输入模块共有10个按键,分为抢答按键和控制按键。抢答按键共有八个,分别为S0―S7,供抢答选手进行抢答使用,P1.0-P1.7口为八个按键抢答信号的输入口,低电平有效。控制按键有2个,分别为S8与S9,S8和S9分别为“清除/设置时间”和“开始键”, 其对应的I∕O接口分P2.0与P2.1
    显示模块本系统采用七段数码管显示抢答选手及时间。

时钟与复位模块包括时钟电路和复位电路,单片机的最小系统就是由时钟电路、复位电路、电源电路及单片机构成。单片机的时钟信号用来提供单片机片内各种操作的时间基准,单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。根据应用的要求,复位操作通常有两种基本形式:上电复位或开关复位。当5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。
    核心控制模块就是人们所谓的CPU,它是整个系统的总控制部分,本系统的核心控制模块为51系列的单片机,只有我们通过软件程序的编写,并将程序写入单片机,该系统才会正确的工作。

3  系统硬件设计3.1主控制器选择

主控制器选择即为单片机的选择,单片机实际上就是把CPU、RAM、ROM、定时器/计数器、I/O接口电路等微型机的主要部件集成在一块芯片上,因此称之为单片机。   

AT89C51单片机简介:

AT89C51单片机主要有以下部件构成:八位微处理器CPU、振荡电路、总线控制部件、中断控制部件、片内Flash存储器、片内RAM、并行I/O接口、定时器和串行I/O接口。AT89C51单片机内部由CPU、4KB的FPEROM ,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成。单片微机内部最核心的部分是CPU,CPU按其功能可分为运算器和控制器两部分。控制器由程序计数器PC、指令储存器、指令译码器、实时控制与条件转移逻辑电路等组成。它的功能是对来自存储器中的指令进行译码,通过实时控制电路,在规定的时刻发出各种操作所需的内部和外部的控制信号,使各部分协调工作,完成指令所规定的操作。运算器由算术逻辑器部件ALU、累加器ACC、暂存器、程序状态字寄存器PSW,BCD码运算调整电路等组成。为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻辑电路的功能。

AT89C51引脚图如图3-1所示。

图3-1 引脚图


P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
    P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
    P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
    P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号。
    RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
    ALE∕P:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。
    PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
EA/VPP:当保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA/VPP将内部锁定为RESET;当EA/VPP端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
    XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
    XTAL2:来自反向振荡器的输出。

3.2 数码管动态显示电路

在单片机的应用系统中,显示器是最常见的输出设备,也是人机对话必不可少的部分。显示器按其显示形式分为分段式显示器、点阵式显示器和条图(光柱)式显示器。显示器可用于数字、符号、文字、图形和光柱显示。七段数码管显示器是单片机开发中常用的输出器件。它是由若干个发光二极管组成的,当发光二极管导通时,相应的一个点或一个笔画发亮。控制不同组合的二极管导通,就能显示出各种字符。 常用的LED显示屏有7段式和“米”字段之分,7字段单个数码管内共有八只发光二极管,7只为字段,可组成字形,第八个为小数点。故单个管有人称为7段数码管显示,也有人称为8段显示。7段数码显示管内部结构如图3-2所示。

图3-2 内部结构图
显示屏外形尺寸如图3-3所示。

图3-3显示屏的外形尺寸

显示模块电路连接图如图3-4所示:



图3-4显示模块电路连接图

3.3 8位竞赛抢答器与单片机的接口电路图

    AT89C51单片机P1.0~P1.7端口分别与S0~S7按钮相连对应8个不同的选手的抢答按键。选手通过抢答按键进行抢答,单片机接收信号后内部进行处理并在显示屏上显示选手编号。内部进行锁存。如图3-5所示。

图3-5 8位竞赛抢答器与单片机的接口电路图

3.4时钟电路

单片机必须在时钟的驱动下才能工作。AT89C51单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。无论何种形式,都需要外部附加电路,产生时钟脉冲。
    外部时钟方式就是直接将外部的振荡脉冲通过XTALl或XTAL2接入单片机,外部时钟方式多用于多机系统,以便各个单片机能够同时工作。对外部震荡信号无特殊要求,但需保证脉冲宽度不小于20ns,且频率应低于单片机所支持的最高频率。
    内部时钟方式就是利用单片机芯片内部的振荡器,通过在引脚XTALl和XTAL2两端跨接晶体振荡器,构成稳定的自激振荡器的方法,再由获得的自激振荡器发出稳定的脉冲,直接送入芯片内部的时钟电路的方式。跨接的晶体振荡器如果已经起振,则会向XTAL2引脚上输出一定幅值的正弦波。自激振荡器的频率取决于晶体振荡器的频率,常见的晶体振荡器频率有6MHz和12MHz。AT89C52单片机的时钟频率最高可为24Mz。
   本系统中采用的是内部时钟方式。时钟电路如图3-6所示。

图3-6时钟电路图

从时钟电路的示意图中可以看到,单片机所跨接的晶体振荡器旁边还有两个电容器C8和C9。C8和C9被称为谐振电容,主要作用有两点:一是可以促使单片机系统快速起振;二是C8、C9具有对频率进行微调作用,有利于单片机系统振荡频率的稳定,维持单片机的正常运行。谐振电容的容值选择,与所用的晶体振荡器的频率值有关。晶体振荡器的振荡频率越高,相应的谐振电容的容值也要提高。二者如果配合的好,可以发挥谐振电容的积极作用。反之,自激振荡器频率的稳定性将受到影响。经过大量的实际应用,晶体振荡器的频率与谐振电容的容值之间形成了一定的固定搭配。例如:当晶体振荡器的频率为12MHz时,谐振电容的容值一般为30pF左右。
    确定系统中晶体振荡器的频率,我认为与具体的应用有关。理论上当然希望单片机的运算速度越快越好,即晶体振荡器的频率越高越好。但是,在有些情况下,单片机的外围设备的速度无法匹配单片机的运行速度。为了节约成本,可以选择振荡频率较低的晶体振荡器。基于这种考虑,本文中的晶体振荡频率设计为12MHz,谐振电容的容值选定为30pF。
    单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用T=1/fosc表示。图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号。
    为了减小寄生电容,更好地保证振荡器稳定、可靠地工作。在设计电路板时,晶体振荡器和谐振电容的位置应尽可能地靠近单片机的XTALl和XTAL2引脚 。

3.5复位电路

使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。单片机本身不能自动进行复位,必须配合相应的外部复位电路才能实现。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。
硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。
    软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。
    单片机系统在启动运行时,首先完成的复位操作,即上电复位。其目的是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。复位很重要,单片机有多种复位方式。这里仅介绍上电复位和按键复位这两种常用的复位方式。
    上电复位常用的方法是使用电容器。利用电容器的充电特性达到满足接通电源后,单片机实现自动复位的要求。
    单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图3-7所示。



                                 图3-7复位电路

在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(3.5V),需要的时间是10K*10uF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0-3.5V增加。这个时候10K电阻两端的电压为从5-1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V-1.5V。在5V正常工作的52单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。
    在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。
    复位电路的原理是单片机RST引脚接收到2uS以上的电平信号,只要保证电容的充放电时间大于2uS,即可实现复位,所以电路中的电容值是可以改变的。值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

3.6系统总体电路图
    系统总体电路图如图3-8所示。

    本设计主要是介绍了单片机控制下的8路竞赛抢答器系统,同时供8名选手或8个代表队比赛,分别用8个按钮S0~ S7表示。设置一个系统清楚和抢答控制开关S,该开关由主持人控制。抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在数码管上显示选手号码。并且优先抢答选手的编号一直保持到主持人将系统清除为止。抢答器具有定时抢答功能,且一次抢答的时间由主持人设定。(如本次试验设定为50s)当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。


图3-8系统总体电路图

4  程序设计

4.1系统运行结果

8位竞赛抢答器在正常工作的情况下,首先对控制系统进行初始化,然后进行键盘扫描,判断主持人是否按下了“开始抢答”按键,如果按键没有按下,则选手无法抢答;如果“开始抢答”按键按下则执行倒计时子程序和显示子程序,并调正常抢答处理子程序,如果。其中倒计时程序包括抢答倒计时和回答倒计时。涉及的程序框图如图4-1,4-2,4-3所示。



    图4-1 主程序流程图
    定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。其流程图如下:

     图4-2 倒计时中断流程图

图4-3主程序流程图详细介绍


4.2系统分析

由于这次的课设我们选择了用AT89C51单片机来设计设计抢答器,很多东西都是临时学的,像Proteus仿真软件的使用以及keil软件的使用,还有各种硬件的选择和区分。我通过查资料和搜集有关的文献,学习使用各种软件及焊接电路板,培养了自学能力和动手能力。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过课程设计,我们学会了如何将学到的知识转化为自己的东西,并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。

对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现自己的很多不足之处。在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的学习中得到改善。我的设计也还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请老师批评指正。这次设计也让我懂得细节决定成败,在以后的设计中我会严格吸取教训,做的更好!


单片机源程序如下:
  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  2. #define  TIMEQIANG  50

  3. sbit CHN_0  = P1^0;
  4. sbit CHN_1  = P1^1;
  5. sbit CHN_2  = P1^2;
  6. sbit CHN_3  = P1^3;
  7. sbit CHN_4  = P1^4;
  8. sbit CHN_5  = P1^5;
  9. sbit CHN_6  = P1^6;
  10. sbit CHN_7  = P1^7;

  11. sbit START_BUT  = P2^1;
  12. sbit CLEAR_BUT  = P2^0;
  13. sbit BEEP  = P3^7;
  14. //显示
  15. sbit SMG_0  = P2^2;
  16. sbit SMG_1  = P2^3;
  17. sbit SMG_2  = P2^4;
  18. sbit SMG_3  = P2^5;
  19. #define SMG_PORT   P0
  20. Unsigned char code Dofly_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7c,0x39,0x5e,0x79,0x71};

  21. unsigned char ucCon_Page = 0;//显示的界面控制


  22. void  Dis_Play(unsigned char uiDis_NumHigh,unsigned char uiDis_NumLow)
  23. {
  24. static unsigned char ucStep = 0;
  25. unsigned char ucDis_Dat = 0;
  26. switch(ucStep)
  27. {
  28. //2345  11
  29.    case 0 :               //主频
  30.               SMG_PORT = 0XFF;
  31.               P3&=0Xf0;
  32.               ucDis_Dat = uiDis_NumHigh/10;
  33.               SMG_PORT = Dofly_table[ucDis_Dat];
  34.               P3 |=0X01;
  35.               ucStep++;
  36.               break;

  37.               case 1 :
  38.               SMG_PORT = 0XFF;
  39.               P3&=0Xf0;
  40.               ucDis_Dat = uiDis_NumHigh%10;
  41.               SMG_PORT = Dofly_table[ucDis_Dat];
  42.               P3 |=0X02;
  43.               ucStep++;
  44.               break;

  45.               case 2 :
  46.               SMG_PORT = 0XFF;
  47.               P3&=0Xf0;
  48.               ucDis_Dat = uiDis_NumLow/10;
  49.               SMG_PORT = Dofly_table[ucDis_Dat];
  50.               P3 |=0X04;
  51.               ucStep++;
  52.               break;

  53.               case 3 :
  54.               SMG_PORT = 0XFF;
  55.               P3&=0Xf0; ;
  56.               ucDis_Dat = uiDis_NumLow%10;
  57.               SMG_PORT = Dofly_table[ucDis_Dat];
  58.               //////////////
  59.               P3 |=0X08;
  60.     ucStep = 0;
  61.     break;
  62.   default: break;
  63. }
  64. }

  65. void DelayUs2x(unsigned char t)
  66. {  
  67. while(--t);
  68. }
  69. /*------------------------------------------------
  70. mS延时函数,含有输入参数 unsigned char t,无返回值
  71. unsigned char 是定义无符号字符变量,其值的范围是
  72. 0~255 这里使用晶振12M,精确延时请使用汇编
  73. ------------------------------------------------*/
  74. void DelayMs(unsigned char t)
  75. {

  76. while(t--)
  77. {
  78.      //大致延时1mS
  79.      DelayUs2x(245);
  80.               DelayUs2x(245);
  81. }
  82. }


  83. /*------------------------------------------------
  84.                     主函数
  85. ------------------------------------------------*/

  86. void Init_Timer0(void)
  87. {
  88.               TMOD |= 0x01;                //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                                
  89.               TH0=(65536-2000)/256;                              //重新赋值 2ms
  90.               TL0=(65536-2000)%256;
  91.               EA=1;            //总中断打开
  92.               ET0=1;           //定时器中断打开
  93.               TR0=1;           //定时器开关打开
  94.               PT1 = 1;
  95. }
  96.   char Start_Flag = 0;
  97. unsigned char Time_Use = 0;
  98. unsigned int uiDis_1S = 0;
  99. unsigned char ucTime = TIMEQIANG ;
  100. char  Beep = 6;
  101. unsigned char Beep_Time = 0;
  102. void main (void)
  103. {

  104.     unsigned char  ucChn_Num = 0;
  105.               BEEP = 1;
  106.               Init_Timer0();        //定时器0初始化


  107. while (1)           //主循环
  108.   {                 
  109.   ////////////////////
  110.   if(Start_Flag == 1)//可以抢答
  111.   {
  112.                 if(CHN_0 == 0)
  113.                 {
  114.                  DelayMs(10);//去抖动
  115.                  if(CHN_0 == 0)
  116.                   
  117. ……………………

  118. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

完整的Word格式论文51黑下载地址(附仿真+程序源码):
八路抢答器.rar (743.67 KB, 下载次数: 711)

评分

参与人数 2黑币 +51 收起 理由
347642831Q + 1 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:357642 发表于 2018-6-25 09:38 来自手机 | 显示全部楼层
仿真图上没有喇叭啊
回复

使用道具 举报

ID:452950 发表于 2018-12-23 22:24 | 显示全部楼层
很好很强大
回复

使用道具 举报

ID:454036 发表于 2018-12-25 09:16 | 显示全部楼层
系统图没有喇叭啊
回复

使用道具 举报

ID:493224 发表于 2019-3-18 15:27 | 显示全部楼层
为什么有两个显示数码管
回复

使用道具 举报

ID:568181 发表于 2019-6-20 20:37 | 显示全部楼层
好好,功能强大
回复

使用道具 举报

ID:569489 发表于 2019-6-22 14:54 | 显示全部楼层
写的太好了  谢谢楼主
回复

使用道具 举报

ID:572202 发表于 2019-6-27 08:19 | 显示全部楼层
非常感谢楼主,我原本还一时想不出来没有锁存器怎么有锁存功能。
回复

使用道具 举报

ID:514064 发表于 2019-7-8 10:30 | 显示全部楼层
很好,非常有帮助
回复

使用道具 举报

ID:660094 发表于 2019-12-9 22:10 | 显示全部楼层
大佬就是大佬
回复

使用道具 举报

ID:659106 发表于 2019-12-10 14:52 | 显示全部楼层
太强了
回复

使用道具 举报

ID:762374 发表于 2020-5-27 16:17 | 显示全部楼层
真的很优秀。
回复

使用道具 举报

ID:772490 发表于 2020-6-8 10:10 | 显示全部楼层
谢谢楼主大大
回复

使用道具 举报

ID:775155 发表于 2020-6-10 15:41 | 显示全部楼层
感谢楼主!
回复

使用道具 举报

ID:774488 发表于 2020-6-11 21:53 | 显示全部楼层
为什么打不开啊
回复

使用道具 举报

ID:779046 发表于 2020-6-14 15:55 | 显示全部楼层
Eason张 发表于 2018-6-25 09:38
仿真图上没有喇叭啊

感谢楼主
回复

使用道具 举报

ID:785615 发表于 2020-6-21 10:38 | 显示全部楼层
太强大了
回复

使用道具 举报

ID:784492 发表于 2020-6-21 13:03 | 显示全部楼层
很不错
回复

使用道具 举报

ID:752658 发表于 2020-7-13 15:38 | 显示全部楼层
太棒了,对我来说太有用了
回复

使用道具 举报

ID:840812 发表于 2020-11-10 12:09 | 显示全部楼层
时隔多年依旧有用,谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表