基于51单片机的八路抢答器Proteus仿真设计

基于51单片机的八路抢答器Proteus仿真设计
仿真图proteus 8.6
程序编译器:keil 4/keil 5
编程语言:C语言
涉及知识点:按键扫描,定时器,数码管,蜂鸣器。
出售仿真图和源码。

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

显示函数:

/*------------------------------------------------
 显示函数,用于动态扫描数码管
 输入参数 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); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

	}
}  

中断处理

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

}

基于51单片机的八路抢答器Proteus仿真设计_第1张图片
基于51单片机的八路抢答器Proteus仿真设计_第2张图片
基于51单片机的八路抢答器Proteus仿真设计_第3张图片
基于51单片机的八路抢答器Proteus仿真设计_第4张图片需要源码和仿真可私聊 QQ2142686503

你可能感兴趣的:(抢答器,单片机,c语言)