基于51单片机的抢答器设计(仿真)

        基于51单片机的抢答器设计,利用AT89C51作为系统主控,数码管进行显示倒计时,独立按键作为主持人按钮,同时为了抢答及时,采用外部中断扩展的方式进行抢答按键的设计,同时为了节省IO的,利用74HC595进行设计,如下图:

一、硬件设计

1、显示器件

        本次使用三个二位数码管进行显示,显示的内容分别是抢答倒计时、抢答选手号、回答倒计时三个数据,数码管的选型为共阴型,即低电平选中。

2、外部中断扩展

        由于抢答有时效性的要求,如果使用简单的循环扫描按键,这势必会导致有时候抢答不及时,甚至抢答卡顿,影响抢答额的公平性,但是AT89C51有且只有两个外部中断,于是需要使用外部中断扩展来实现功能,如下图,每个按键按下的时候都会触发INT0中断,而INT0刚好有最高优先级,且在外部中断引脚处各自连接了一个二极管,目的是为了防止除低电平以外的信号输入在外部中断上。

3、74HC595

        74HC595是一种串转并的芯片,它可以将输入的字节信号转换为八位电平信号,通过该方式,用三根数据线实现八个IO口的控制,大大节省了IO口,针对本次设计IO口紧张的情况是效果显著的。

二、软件设计

1、数码管驱动

        本次设计的数码管是共饮数码管了,因此首先需要获取到共阴数码管的段码表并用数组存储起来,方便日后进行显示,同时共阴数码管是低电平选中,在程序中也是要体现的。

#include <REGX52.H>
#include "74HC595.h"

//10在Data[]里的索引是空0x00
unsigned char nixie_Buf[9]={0,16,16,16,16,16,16,16,16};
unsigned char Data[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x40};

//将需要显示的值传递进来
void nixie(unsigned char Location,number)
{
	//把数组nixie_Buf的Location位换成number
	nixie_Buf[Location]=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值