【51单片机系列】应用设计——8路抢答器的设计

51单片机应用——8路抢答器设计

文章设计文件及代码:资源链接。

文章目录

  • 要求:
  • 设计思路
  • 软件设计
  • 仿真结果

要求:

(1) 按下”开始“按键后才开始抢答,且抢答允许指示灯亮;

(2)按下“开始”键后如果有人抢答,则抢答指示灯灭,7段数码管显示抢答着编号。

设计思路

P3.0端口连接“开始”按键;P3.6端口连接一个LED,指示抢答允许;P0口接7段数码管,显示抢答者编号;P2口接8个独立式按键,依次编号为1~8;P1口接抢答者指示灯,当P2口的某一个独立按键按下后,对应的抢答者指示灯亮。

proteus设计原理电路图如下:

【51单片机系列】应用设计——8路抢答器的设计_第1张图片

软件设计

代码清单:

/*
	实现功能:8路抢答器设计。
						(1) 按下”开始“按键后才开始抢答,且抢答允许指示灯亮;

						(2)按下“开始”键后如果有人抢答,则抢答指示灯灭,7段数码管显示抢答者编号。
						
						P3.0端口连接“开始”按键;
						P3.6端口连接一个LED,指示抢答允许;
						P0口接7段数码管,显示抢答者编号;
						P2口接8个独立式按键,依次编号为1~8;
						P1口接抢答者指示灯,当P2口的某一个独立按键按下后,对应的抢答者指示灯亮;
						
						
	[2024-01-31] zoya
*/

#include 
#include 

typedef unsigned char uchar;

#define GPIO_SMG	P0  // 数码管
#define GPIO_LED	P1  // 抢答者指示灯
#define GPIO_BTN	P2  // 抢答者按键

unsigned char code smg[]={0x00, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 
	0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};

sbit START_BTN=P3^0;
sbit START=P3^2;
sbit START_LED=P3^6;
bit enStart=0;

uchar tmp;
uchar dispNum;
	
void delay(uchar c)
{
	uchar i,j;
	for(;c>0;c--)
	{
		for(i=0;i<142;i++)
			for(j=0;j<2;j++);
	}
}

void digProc(void)
{
	switch(tmp)
	{
		case 0xfe: dispNum=1; break;
		case 0xfd: dispNum=2; break;
		case 0xfb: dispNum=3; break;
		case 0xf7: dispNum=4; break;
		case 0xef: dispNum=5; break;
		case 0xdf: dispNum=6; break;
		case 0xbf: dispNum=7; break;
		case 0x7f: dispNum=8; break;
		default: dispNum=0; break;
	}
	
}

void main()
{
	EA=1;
	EX0=1;
	IT0=1;
	tmp=0xff;
	while(1)
	{
		if(0==START_BTN)  // 开始按键按下
		{
			delay(10);  // 开始按键消抖
			if(0==START_BTN)
			{
				START_LED=0;  // 点亮开始指示灯
				enStart=1;  // 指示可以开始抢答,当有抢答按键按下触发中断处理服务
				tmp=0xff;  // 初始化
			}
		}
		digProc();  // 处理数码管显示的数据
		GPIO_LED=tmp;  // 抢答指示灯按照抢答按键设置哪个灯亮
		GPIO_SMG=smg[dispNum];  // 数码管显示哪个抢答按键被按下
	}
}

void Int0() interrupt 0
{
	if(enStart)
	{
        enStart=0;  // 有抢答,再按其它抢答键无效
		EX0=0;
		delay(10);
		EX0=1;
		tmp=GPIO_BTN;
		START_LED=1;  // 有抢答,熄灭开始指示灯
	}
}

仿真结果

从结果可以看到:

  • 当没有按下开始按键时,按抢答按键是没有任何作用的;
  • 当按下开始按键后,按抢答按键,对应的指示灯会亮,且数码管中显示对应的编号,这时再按其他抢答键也是没有任何作用,即不会出现两个人都抢答的结果;
  • 当再次按开始按键,按键指示灯和数码管会恢复的系统运行的初始状态。

【51单片机系列】应用设计——8路抢答器的设计_第2张图片

你可能感兴趣的:(51单片机,51单片机,单片机,嵌入式硬件)