AT89C51单片机8位竞赛抢答器_倒计时可调仿真设计

目录标题

  • AT89C51单片机8位竞赛抢答器_倒计时可调仿真设计
    • 概述
      • 1.1 课程设计目的
      • 1.2 任务和要求
      • 1.3 系统结构图
    • 2理论分析与计算
    • 3硬件设计
      • 3.1 AT89C51最小系统
      • 3.2 显示模块
      • 3.3键盘模块
      • 3.4蜂鸣器模块
    • 软件设计
      • 4.1 主程序
      • 4.2 按键扫描子函数
      • 4.3显示子程序
      • 4.4蜂鸣器提示子函数
      • 5.1 PROTEUS EDA仿真图绘制
      • 5.2 测试
    • 设计资料

(程序+proteus仿真+报告)

Proteus仿真版本:proteus7.8

程序编译器:keil4 / keil5

设计编号:Q005

资料下载链接

功能说明:

(1) 按键输入模块,包括主持人时间加,时间减,开始抢答,新一轮4个按键和选手一号到八号共抢8答按键;

(2) 显示模块,可以抢答实现倒计时和显示抢答选手编号;

(3) 蜂鸣器模块,用于倒计时提醒,倒计时开始后发出短暂的声响,声响持续的时间为0.5s左右。

概述

1.1 课程设计目的

(1) 综合所学的单片机原理及接口技术等课程的理论知识完成本课程设计;

(2) 学习并掌握基本电路设计与使用方法,单片机的编程与应用方法;

(3) 提高综合分析、解决实际问题的能力。

1.2 任务和要求

本设计是以抢答为出发点。考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,发光二极管和蜂鸣器发出提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;在软件中还应用了外部中断,通过中断解除抢答的锁存,似的设计更加灵活,实用性更强。

本设计主要设计指标:

(1) 按键输入模块,包括主持人时间加,时间减,开始抢答,新一轮4个按键和选手一号到八号共抢8答按键;

(2) 显示模块,可以抢答实现倒计时和显示抢答选手编号。

(3) 蜂鸣器模块,用于倒计时提醒,倒计时开始后发出短暂的声响,声响持续的时间为0.5s左右。

1.3 系统结构图

图1 系统结构图

主持人控制抢答器时间加减和开始,设置好时间或者使用默认时间后,按下开始按键即开始倒计时,每倒计时一秒蜂鸣器短暂鸣0.5提醒选手。选手在开始抢答后按下各自的按键抢答,一旦按下会显示选手编号。一轮抢答结束后,主持人按下新一轮即可进入下一轮的抢答。

2理论分析与计算

倒计时主要应用了51单片机的定时器,本设计应用定时器产生50ms定时。以12Mhz的晶振来说,机器周期是1us,计满TH0、TL0就需要216-1个数,再来一个数就“溢出”产生中断,一次溢出也就是65536us,约等于65.5ms,假若定时50ms需要一个预装值(初值),总值-需要值=预装值。预装后,定时器从预装值开始加值,定时器溢出中断后,会重新从预装值开始加值加到50ms就再产生中断,从而达到了定时的目的。如果要定时1s就可以让定时器中断1000ms/50ms=20次。

3硬件设计

根据系统结构图,系统由:AT89C51最小系统、显示模块、按键模块和蜂鸣器模块组成。

3.1 AT89C51最小系统

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器,期间采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C51单片机可灵活应用于各种控制领域。

AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

本系统中央控制器采用的单片机AT89C51,复位电路采用上电复位电路。外接的晶振为12MHz晶振。

图2 AT89C51最小系统

3.2 显示模块

本次设计采用八段数码管显示,是四位一体共阴极数码管,由四个八段数码管集成,高电平点亮。在显示上我们通常采用两种方法:一种是静态显示,一种是动态显示。

静态显示是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态显示的优点是编程简单,显示亮度高,缺点是占用I/O端口多,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态显示是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态显示。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但能够节省大量的I/O端口,而且功耗更低。故本次设计采用动态显示方法。其原理图如图3所示。

图3 显示模块

本设计使用74HC573来驱动四位一体数码管。74HC573的八个锁存器都是透明的D型锁存器,当使能(LE)为高时,Q输出将随数据(D)输入而变。当使能(LE)为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器.573工作电压在5V(VCC)左右最大7V最小2V,最大输出电流为20MA,可用来驱动发光二极管。

图4 显示电路驱动电路

3.3键盘模块

键盘是人机交互的接口,本设计中,我们采用独立键盘。按钮需要12个,分别为8位抢答按键、开始抢答键、新一轮按键、抢答时间加键和抢答时间减键。当按键按下,与主控芯片连接的端口被降为低电平,按键松开则也升为高电平。按键采用的是Tack Switch按钮开关,它具有自动恢复的功能。当我们按下按钮时,其中的接点接通,放开按钮后,接点恢复为切断。虽然Tack Switch有4个引脚,但实际上,其内部只有一对a接点,即其中两个引脚是内部相连通的,而另外两个引脚内部也是相连通的。

本设计中12个按键实现了抢答,时间调节等功能,独立按键的引入使得体现了本设计的人性化,智能化,功能的强大。其电路分为主持人部分和选手部分。分别实现了控制、调节功能和抢答功能。其电路图如图4所示。

图4 按键电路

3.4蜂鸣器模块

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

本设计采用电磁式蜂鸣器进行。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。因此需要一定的电流才能驱动它,单片机I/O引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。如蜂鸣器电路图5所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基极B经过限流电阻R3后由单片机的beep引脚控制,当beep输出低电平时,三级管QS截止,没有电流流过线圈,蜂鸣器不发声;当beep输出高电平时,三级管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制beep脚的电平来使蜂鸣器发出声音和关闭。其电路图如图5所示。

图5 蜂鸣器电路

软件设计

当接通电源开始工作后,单片机中的程序开始运行,将对程序进行初始化,以便和单片机芯片达成通信协议。完成初始化后,将进行键盘扫描,同时判断开始按键、调节按键是否按下。最后完成倒计时和选手号码的显示。系统流程图如图6所示。

图6 系统流程框图

根据系统软件设计要求将软件划分为:主程序、显示子程序、按键子程序、蜂鸣器子程序

4.1 主程序

主程序完成外部中断初始化、定时器初始化、蜂鸣器模块初始化。主程序扫描主持人不断扫描按键,进行对应的操作。

进入主程序后,显示显示预设的倒计时数字20,程序扫描主持人按键倒计时加减键和开始按键。按下开始按键后,倒计时开始工作,实时刷新倒计时数字,每倒计时1秒蜂鸣器beep引脚拉低0.5秒,蜂鸣器短鸣0.5秒。在扫描到选手按下按键后,倒计时定时器停止工作,显示选手编号和按下抢答键的时间。

主要(关键)代码:

 EA=1;EX0=1;//外部中断0IT0=1;//设置下降沿触发中断0TMOD=0x11;TH0=(65536-50000)/256;//这是50ms的TL0=(65536-50000)%256;ET0=1;TR0=0; TH1=(65536-50000)/256;//这是50ms的TL1=(65536-50000)%256;ET1=1;TR1=1; time=20; //定时时间num=0; //选手编号flag=0; //抢答模式标志位beep=0;//蜂鸣器为0 不响

此段程序是完成外部中断初始化、定时器初始化、蜂鸣器模块初始化。完成后进入大循环。

TempData[2]=dofly_DuanMa[time/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  TempData[3]=dofly_DuanMa[time%10];if(num!=0)m=1;
if(start==0){DelayMs(10); if(start==0){ flag=1;while(!start);}}

这段函数完成了倒计时的显示和扫描是否开始倒计时。在没有开始抢答时,选手按下按键会显示选手编号和清零时间,一起防止选手抢答。开始抢答后,标志位flag变为1。开始执行按键扫描函数check2();

void check1()
{if(num==1){TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  TempData[1]=dofly_DuanMa[num%10];beep=0;Display(0,8); //数码管显示函数TR0=0; while(m);}

假如按键1按下,会显示选手编号。同时程序会卡在while(m);循环。此时除了新一轮按键之外的任何按键都系统没有任何变化。

oid restart() interrupt 0//按键中断处理函数 新一轮
{m = 0;num = 0;TR0 = 0;flag = 0;time = 23;TempData[0] = 0;TempData[1] = 0;TempData[2] = 0;TempData[3] = 0;
}

新一轮按键是外部中断0,即使程序一直在执行while(m)循环,按下按键后,程序会执行一次中断函数,将变量清零,函数重新执行按键扫描。

4.2 按键扫描子函数

关键代码介绍

 if(key1==0){DelayMs(10); if(key1==0){   num=1;while(!key1);}}

程序一直判断按键引脚电压,按下按键电压为0。按键会产生抖动,需要进行消抖处理,演示10毫秒后,如果按键电压还是0,令按键数目num为1。表示按下的按键是按键1。供主函数处理按键消息。

4.3显示子程序

关键代码介绍

/*------------------------------------------------显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{unsigned char i;for(i=0;i<Num;i++){ DataPort=0;   //清空数据,防止有交替重影DUAN=1;     //段锁存DUAN=0;DataPort=dofly_WeiMa[i+FirstBit]; //取位码 WEI=1;     //位锁存WEI=0;DataPort=TempData[i]; //取显示数据,段码DUAN=1;     //段锁存DUAN=0;DelayMs(2); // 扫描间隙延时,时间太长会闪烁,太短会造成重影}
}

该函数用于动态扫描数码管。输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示,如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2。显示主要控制74HC573锁存数据。先清除数据,清段锁存。然后选择位码。开位锁存将数据存在位锁存器,选择到了需要显示的数码管。位锁存完成后将数据写进段锁存数据,将需要显示的数据写到数码管中。

4.4蜂鸣器提示子函数

蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基极B经过限流电阻R3后由单片机的beep引脚控制,当beep输出低电平时,三级管QS截止,没有电流流过线圈,蜂鸣器不发声;当beep输出高电平时,三级管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制beep脚的电平来使蜂鸣器发出声音和关闭。

void timer_t0() interrupt 1
{TH0=(65536-50000)/256;//这是50ms的TL0=(65536-50000)%256;t++;beep=0;if(t==20)//设置为20,就是1s为高1s为低{beep=1;t=0;time--;TempData[2]=dofly_DuanMa[time/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  TempData[3]=dofly_DuanMa[time%10];if(time<=0){time=0;            }           }
}

在50ms一次的定时器0中断中,每10次中断令蜂鸣器置零。第20次中断令蜂鸣器置一。以此产生0.5s短暂提醒。

5 PROTEUS EDA仿真测试

5.1 PROTEUS EDA仿真图绘制

图 7仿真图

5.2 测试

1.初始化。

​ 图8 初始化

2.未按下开始抢答键,选手抢答无效。

图9 抢答无效

3.按下开始抢答键,进入抢答倒计时。

图10 抢答倒计时

3.有选手按下抢答键,显示选手号码及剩余时间。

图11 抢答成功

6 总结以及展望

在硬件电路焊接和软件程序设计分别完成的基础之上,进行软硬件的结合与调试。通过下载将在电脑上已完成的程序下载到单片机芯片中。在调试中发现软件中存在的问题,及时解决问题,确保系统能正常工作并达到设计要求。通过反复的调试与实验,可以证明该系统能够较好地完成设计所需的基本要求。即能够正确的完成抢答器预期功能。

在完成系统时我们遇到了很多困难,从一开始电路设计不够优化导致蜂鸣器不能正常发声,到后来查阅资料一点点丰富我们的设计。在整个设计过程中,我们充分发挥团队精神,分工合作,发挥人的主观能动性,自主学习,学到了许多没学到的知识,较好的完成了作品。相互学习、相互讨论研究,共同进步,完了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一个脚印。此次比赛也练就了我们的耐心,让我们认识到了学习基础知识的重要性,当设计完整的系统时,要考虑到硬件和软件两者的结合,有时硬件的不足,我们可以用软件程序来弥补,从而节约硬件成本,在设计软件程序时要模块化,可以提高程序的可读性。总之,通过此次单片机课程设计我们的能力得到了全方位的提高。

设计资料

资料下载链接见文章开头

AT89C51单片机8位竞赛抢答器_倒计时可调仿真设计相关推荐

  1. 基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯

    基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯仿真设计 (程序+proteus仿真+报告) Proteus仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C ...

  2. c语言六位抢答器课程设计,基于c语言单片机8位竞赛抢答器设计课程设计.docx

    基于c语言单片机8位竞赛抢答器设计课程设计 课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12月25 ...

  3. 基于51单片机的4位竞赛抢答器的设计

    设计编号:Q001 资料下载 功能要求: 以单片机为核心,设计一个4位竞赛抢答器:同时供4名选手或4个代表队比赛,分别用4个按钮S0-S4表示. 1.设置一个系统清除和抢答控制开关S,开关由主持人控制 ...

  4. c51的八位智力抢答器C语言编程,基于AT89C51单片机的八位智力抢答器设计.doc

    基于AT89C51单片机的八位智力抢答器设计 江 西 理 工 大 学 南 昌 校 区 毕 业 设 计(论文) 题 目:八位智力抢答器 系 :信息工程系 专 业:应用电子技术 班 级: 学 生: 学 号 ...

  5. 基于51单片机的八路竞赛抢答器设计

    目录 基于51单片机的八路抢答器设计 1.主要功能 2.仿真图 3.测试图 4.程序源码 5.资源获取 基于51单片机的八路抢答器设计 1.主要功能 利用STC89C52单片机及外围接口实现的抢答系统 ...

  6. 智力竞赛抢答器 Verilog HDL 建模

    设计题目: 智力竞赛抢答器 Verilog HDL 建模 设计要求: 1. 5 组参赛者进行抢答: 2. 当抢先者按下按钮时,抢答器能准确判断,并以声.光标志(模拟).要求声响.光亮时间为 3s 后自 ...

  7. 八人抢答器讲解_八人智力竞赛抢答器

    1 摘 要 本报告设计的八路智力竞赛抢答器电路主要采由 74 系列常用集成电路组成,涉及到触 发器.编码器.加法器.译码器和 RC 电路组成的多谐振荡电路.该抢答器具有基本的抢答 功能, 通过共阴极数 ...

  8. 在设计四人抢答器中灯全亮_四路竞赛抢答器的设计

    1设计要求与方案论证 1.1设计要求 利用基本逻辑门电路.组合逻辑电路和触发器,设计一个四人抢答器,要求: ①每个参加者控制一个按键,用其发出抢答信号. ②主持人有一个控制按键,用于将电路复位. ③开 ...

  9. 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...

    哥,你还有AT89C51单片机8路抢答器的资料吗 哥,你还有AT89C51单片机8路抢答器的资料吗 AT89C51单片机8路抢答器的资料 源程序如下 #include #define uchar un ...

  10. 【毕业设计】65-基于单片机的智能抢答器系统设计(原理图工程+仿真工程+源代码+答辩论文+visio流程图+实物图)

    typora-root-url: ./ [毕业设计]65-基于单片机的智能抢答器系统设计(原理图工程+仿真工程+源代码+答辩论文+visio流程图+实物图) 文章目录 typora-root-url: ...

最新文章

  1. 编写linux下跑马灯应用程序,01 arm11 led 跑马灯程序
  2. 《MySQL DBA修炼之道》——2.3 其他MySQL分支的安装
  3. HTML data属性简介以及低版本浏览器兼容算法
  4. android 进度条 代码,Android进度条ProgressBar的实现代码
  5. 将Quartz与Spring集成
  6. 记一次 IIS 7.0 身份验证相关的问题解决
  7. 怎么在pptv里下载电视剧
  8. mysql5.6 python_Centos-6.5 + python3 + mysql5.6 环境搭建
  9. 抄袭、借鉴与创新,有什么区别?
  10. QQ资料清空php源码,[php源码][QQ玫瑰小镇]一键收铲种,php网页版
  11. 强的离谱!串烧70+个Transformer模型,涵盖CV、NLP、金融、隐私计算...
  12. Kubernetes可以代替Docker,可笑
  13. Microsoft Store 微软商店中 APP 独立安装包下载方法
  14. 如何形象的理解泰勒展开
  15. C语言递归问题【青蛙跳台阶】和【汉诺塔】
  16. snownlp对天猫商品评论数据进行情感分析(附源码)
  17. CSDN写作表情emoji大全
  18. 执行npm出现“Error:Cannot find module ‘fs/promises”的问题
  19. JavaScript 去除数组中重复的元素 得到新数组
  20. 二维数组(矩阵)顺时针旋转90°

热门文章

  1. mappedBy作用
  2. oracle10非正常删除卸载干净,Oracle 10g卸载干净
  3. cad修改快捷键_CAD自定义修改快捷键
  4. mac 版 idea 破解
  5. 热力地图高德_HeatMap丨丨基于高德地图API制作热力图。
  6. get方法和post方法的区别和联系
  7. 远程桌面连接下拉框IP地址删除
  8. Mac下载m3u8视频
  9. 手机论文查重软件哪个好?
  10. Flash遮罩做地球旋转效果