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

(程序+proteus仿真+报告)

Proteus仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:Q006

这里写目录标题

  • 基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯仿真设计
    • 基本功能
    • 概述
      • 1.1 课程设计目的
      • 1.2 任务和要求
      • 1.3 系统结构图
    • 2理论分析与计算
    • 仿真图
    • 源码
      • 4.2 按键扫描子函数
      • 4.3显示子程序
      • 4.4蜂鸣器提示子函数
    • 资料清单

资料下载链接

基本功能

1、以单片机位核心,设计一个8位抢答器:同时供8名选手比赛,分别用6个按键表示;

2、无人抢答时,8个跑马灯循环点亮,数码管显示00;

3、设置一个系统清楚和抢答控制开关(开始抢答后才允许选手抢答),开关由主持人控制;

4、抢答器具有锁存和显示功能。选手在设定的时间内进行抢答,抢答有效,定时器停止工作,数码管显示选手编号和抢答时间,并保持到主持人将系统清除为止;

5、抢答器具有顶是抢答功能,且一次抢答的时间由主持人设定(如20s),由加减按键设定;

6、当主持人启动“开始”键后,定时器进行倒计时,同时扬声器发出短暂的声响,声响持续时间位0.5s左右;

7、如果定时器时间已到,无人抢答,本次抢答无效,该题作废,系统报警并禁止抢答,定时器显示器上显示00。

概述

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次。

仿真图

源码

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短暂提醒。

资料清单

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

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

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

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

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

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

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

  4. 基于51单片机的8八路抢答器设计

    基于51单片机的8路抢答器 具体功能: (1)主持人进行复位,依次显示8位选手的分数,8位选手分数显示结束后主持人方可按下开始按键: (2)主持人按下抢答开始按键,抢答者才可以开始抢答,数码管抢答倒计 ...

  5. 【单片机系列】基于51单片机的16路抢答器

     1.功能介绍    抢答器是一种应用非常广泛的设备,在各种竞赛.抢答场合中,它能迅速.客观的分辨出最先获得发言权的选手.早期的抢答器只有几个三极管.可控硅.发光管等组成,能通过发光管的指示辨认出选手 ...

  6. 基于51单片机的8路抢答器proteus仿真 汇编语言程序设计

    硬件设计 上一篇讲了基于C语言的抢答器,下边讲一下基于汇编语言的抢答器. 仿真图: 程序设计 OK EQU 20H ;抢答开始标志位RING EQU 22H ;响铃标志位 DATA0 EQU 36H ...

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

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

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

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

  9. 【041】基于51单片机的自动音乐播放器Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的自动音乐播放器系统proteus仿真设计一份: (2).基于51单片机的自动音乐播放器系统proteus仿真设计keli源代码一份: (3).基于51单片机 ...

最新文章

  1. 第五届合肥工业大学宣城校区程序设计大赛题解
  2. mysql savepoint 丢失_关于MySQL中savepoint语句使用时所出现的错误
  3. spring整合mybatis(入门级简单教程5)--使用mybatis的API
  4. 解决Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.
  5. VTK修炼之道69:体绘制讨论_颜色传输函数
  6. tar ------ linux解压 tar命令
  7. 用硬盘安装linux物理机,老爷机安装UBUNTU的悲剧之旅(附用GRUB2硬盘安装ubuntu教程)...
  8. vs2012中编译时出现程序集所使用的版本高于所引用的版本
  9. Atitit.识别损坏的图像
  10. 跨域通信——多窗口通信
  11. 戴尔r510服务器修复,DELL R510服务器宕机案例(1)
  12. 计算机老掉线 路由器网络,路由器无线掉线怎么办?
  13. 【mysql 练习题】查询和“01”号同学所学课程完全相同的其他同学的学号
  14. 跨时钟域问题(CDC)
  15. 图的单源最短路径算法
  16. linux逆向分析之ELF文件详解
  17. 关于嵌入式面试的一些题
  18. 【限时删】刘*55页ppt大瓜,比项*醒的还要精彩!
  19. brat报错:The server encountered a serious error, please contact the administrators at ____ and give th
  20. 骨传导耳机优缺点?哪些骨传导耳机值得推荐

热门文章

  1. 关于nohup重定向日志按日期区分文件(未解决)
  2. MSSQL日期按星期几汇总排序
  3. DoIP协议从入门到精通系列——车载网络拓扑
  4. 服务器内存与CPU的搭配
  5. 网页计数器---代码
  6. Java之利用FreeMarker导出Word实例
  7. 01.Java基础语法
  8. Y - 区域内点的个数
  9. html谷歌兼容代码,让网站变灰的css代码(支持IE、Firefox和Chrome)
  10. Python3 --- Tornado之模板