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

这篇具有很好参考价值的文章主要介绍了基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

(程序+proteus仿真+报告)

Proteus仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:Q006

资料下载链接

基本功能

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 系统结构图

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

图1 系统结构图

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

2理论分析与计算

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

仿真图

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

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

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

源码

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

4.1 主程序

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

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

主要(关键)代码:

	EA=1;
 	EX0=1;//外部中断0
	IT0=1;//设置下降沿触发中断0
	TMOD=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跑马灯文章来源地址https://www.toymoban.com/news/detail-487606.html

到了这里,关于基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C51】基于51单片机的多路抢答器的设计与制作

        随着社会的进步和科技的发展,当今社会活动对电子设备的使用也越发依赖,此时抢答器也作为一种答题方式所需要的设备应运而生。抢答器的适用方面广泛,可用在当下各种答题节目,知识竞赛等活动之中。但随之而来的也有很多问题,当今市面上有的抢答器使用线

    2024年02月03日
    浏览(48)
  • 51单片机8位抢答器程序设计与原理图搭建

    原理图整体 本设计利用51单片机中断函数来查询抢答位置,除了一般抢答器用到的基本元件外,还用到了74LS30(八路与非门)与74LS04(非门)。下面对原理图进行分块介绍 抢答按钮部分 (注意非门接到AT89C52的P3.3 INT1触发) led灯连接部分  (采用灌电流的形式,注意P0口上拉

    2024年02月08日
    浏览(43)
  • 单片机设计_8路抢答器(AT89C51)

    想要更多项目私wo!!!         此电路由AT89C51最小系统、四位数码管、蜂鸣器电路和按键模块组成。 运行原理:         该抢答器电路可同时进行八路优先抢答。按键按下后,蜂鸣器发声,同时数码管 显示优先抢答者的号码,抢答成功后,再按按键,显示不会改变,除非

    2024年02月11日
    浏览(49)
  • 基于单片机的八路抢答器的设计

    1.设计要求: 1.以单片机为核心,设计一个八位竞赛抢答器:同时供八名选手或八个代表队比赛,分别用八个按钮S0~S7表示。 2.设置一个系统清除和抢答控制开关S,开关由主持人控制。 3.抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号

    2024年02月07日
    浏览(41)
  • 基于单片机16路多路抢答器仿真系统设计

    ** 单片机设计介绍,基于单片机16路多路抢答器仿真系统设计   基于单片机16路多路抢答器仿真系统的设计概要主要涵盖硬件设计、软件编程以及功能实现等方面。以下是针对该设计的详细概述: 一、系统概述 该设计旨在开发一个基于单片机的16路多路抢答器仿真系统,能

    2024年04月27日
    浏览(38)
  • 基于C语言的单片机八路抢答器课程设计

    1 、系统总体方案设计 本系统由硬件系统和软件系统组成。 硬件系统包括按键控制模块、中央处理AT89C51系统、指示灯显示模块、LED数码管显示模块和扬声器提示模块。 软件系统包括主程序、定时器0中断服务程序、定时器1中断服务程序、延时程序、按键程序和显示程序。 为

    2024年02月04日
    浏览(48)
  • 基于AVR128单片机抢答器proteus仿真设计

    一、系统方案 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void timer0_init() //定时器初始化 { TCCR0=0x07; //普通模式,OC0不输出,1024分频 TCNT0=f_count; //初值,定时为10ms TIFR=0x01; //清中断标志位 TIMSK=0x01; //使能定时器0溢出中断 SREG|=0x80; //开启全局中断 }

    2024年02月11日
    浏览(47)
  • proteus 仿真 at89c51 单片机八位抢答器,文末附源文件

    在网上没能容易地直接找到仿真文件,所以我把这个上传,希望对各位有所帮助。 倒是有不少好心人给出了图文教学和源代码,对他们表示感谢。我也是用这位老哥的代码和电路稍作了修改,感谢分享。 起初 led 数码管是熄灭的,按下 P2.1 的按钮 会将它们点亮,开始抢答。

    2024年02月09日
    浏览(47)
  • 【单片机项目实训】八路抢答器

    将单片机项目实训——8路抢答器分享出来,如有不足,敬请指出。 【实验图片】  【实验视频】 【项目实训】8路抢答器 目录 一、设计要求 二、方案选择 三、硬件电路设计 五、其他图片 六、资料链接 七、关于作者 八、后记         设计一个共8名选手参加的8路抢答器。

    2024年02月11日
    浏览(42)
  • STM32单片机的抢答器设计

    一.硬件方案          以STM32单片机为核心的八路抢答器采用了数字显示器LCD1602,自动锁存显示结果设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LCD1602显示,即使两组的抢答时间相差几微秒,也可分

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包