51单片机实现数码管显示
本次的实现效果方式采用模拟进行,芯片为AT89C51,开发软件为keil5,proteus
上代码
代码如下:
#include <reg51.h>
void delay(unsigned int i);//延时函数
unsigned int i=0;
void main() {
unsigned char button=0,flag=0;
unsigned char digitCodes[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0xbf};
P0 = 0xff; // 初始化P0口为高电平,准备读取按键状态
P1 = digitCodes[8]; // 初始显示空格
while (1) {
if(flag==0)//如果没有其他的选手按下
{
button = P0; // 第一次读取按键状态
delay(1200); // 延时消抖
button = P0; // 第二次读取按键状态
if (button != 0xff) { // 如果有按键被按下
for (i = 0; i < 8; i++) {
if((button & (1 << i)) == 0)
{//检测是那一个按键按下,进行位比较
P1 = digitCodes[i]; // 显示对应的数字
flag=1;
}
}
}
}
}
}
void delay(unsigned int i) {
unsigned int k;
for (k = 0; k < i; k++);
}
效果展示
keil5开发界面
proteus界面:
介绍
一、系统概述
8路抢答器系统是一个用于竞赛或活动中的抢答环节的设备,能够准确、快速地判断哪位参赛者最先按下抢答按钮,并在数码管上显示该参赛者的编号。系统由输入电路、优先判断电路、编码与显示电路以及控制电路等组成。
二、硬件设计
- 输入电路设计:使用八个按钮作为八路输入,每个按钮连接到一个数字电路输入端。当参赛者按下按钮时,输入电路会检测到这个信号。
- 优先判断电路设计:设计一个优先编码器,用于检测并判断最先按下按钮的输入信号。优先编码器能够处理多个同时输入的信号,并输出最先到达信号的编码。
- 编码与显示电路设计:使用编码器对优先级信号进行编码,然后通过译码器解码并显示在数码管上。这样,观众和主持人都可以清晰地看到哪个参赛者最先抢答。
- 控制电路设计:设计一个控制电路,用于接收控制开关的信号,并根据信号控制抢答环节的启动、结束以及必要的控制操作。
三、程序设计
程序设计:程序主要实现以下功能:
1.检测并判断最先按下抢答按钮的选手编号。
2.将选手编号显示在数码管上。
3.控制抢答环节的启动和重新开始。
四、仿真过程
1 仿真软件选择:选用适合数字电路仿真的软件,本次实训选择Proteus进行仿真设计。
2 搭建仿真电路:在Proteus中搭建与数字电路设计相对应的仿真电路,包括输入电路、优先编码电路、锁存与显示电路以及控制电路(数码管,AT89C51芯片,电阻,按键,电容,晶振)。
3 设置仿真参数:根据设计需求,设置仿真参数,如输入信号的波形、频率等。
4运行仿真并观察结果:启动仿真,观察数码管的结果,选手是否抢答,按下是否能正确显示
5 Proteus模拟图片:
六、仿真结果分析
通过仿真,我们验证了8路抢答器系统的功能和性能。仿真结果表明,系统能够准确、快速地检测并显示最先按下抢答按钮的选手编号。同时,系统还具备复位按钮,当按下复位按钮KEY1时能重新开始新一轮的竞答。
-
仿真运行界面(等待抢答)
-
选手1号进行抢答:
七、优化与改进
根据仿真结果,我们对8路抢答器系统进行了优化和改进。例如,优化了优先编码电路的设计,提高了判断速度和准确性;改进了显示电路的设计,增强了显示效果和可读性;简化了控制电路的设计,将代码进行缩减。