当前位置: 首页 > article >正文

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

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

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

文章目录

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

要求:

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

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

设计思路

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

proteus设计原理电路图如下:

8路抢答器原理电路图

软件设计

代码清单:

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

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

#include <reg51.h>
#include <intrins.h>

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;  // 有抢答,熄灭开始指示灯
	}
}

仿真结果

从结果可以看到:

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

8路抢答器仿真结果


http://www.kler.cn/a/227643.html

相关文章:

  • 算法训练营day21,回溯1
  • 反洗钱_4_反洗钱工作主要内容(重点)
  • android tv开发-1,leanback 2
  • CSC联合培养博士申请亲历|联系外导的详细过程
  • 新版MQL语言程序设计:代理模式的原理、应用及代码实现
  • Postgresql数据库存储过程中的事务处理
  • 代码随想录刷题笔记 DAY 21 | 二叉搜索树的最小绝对值差值 No.530 | 二叉搜索树中的众数 No.501 | 二叉树的最近公共祖先 No.236
  • 全自动网页生成系统重构版源码
  • Cox等级资料是个坑
  • 九、开发进度月报
  • React从 EMAScript5编程规范到 EMAScript6编程规范过程中的几点改变
  • 使用最大边界相关算法处理文章自动摘要
  • 自动驾驶:Apollo如何塑造人类的未来出行
  • pgsql中in 和 join 怎么选
  • 缓存的概念
  • 【QT+QGIS跨平台编译】之二十一:【freetype+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • 记录首次使用yolov8-obb
  • week03day03(文件操作、正则表达式1)
  • 【C++入门学习指南】:函数重载提升代码清晰度与灵活性
  • 小程序中封装下拉选择框