目錄
一、主要功能
二、使用步驟
三、硬件資源
四、軟件設計
五、實驗現象
一、主要功能
1、數碼管顯示
2、主持人按下開始,8位選手開始搶答
3、第一次使用要設置搶答時間,支持掉電存儲
4、選手搶答成功,數碼管會顯示其號碼
5、按下主持人按鍵進入新一輪
二、使用步驟
基于51單片機的八路搶答器數碼管系統設計主要包含硬件電路搭建和軟件編程兩部分,核心功能是通過數碼管顯示搶答選手編號及倒計時信息。
三、硬件資源
1、51單片機核心模塊
2、按鍵模塊
3、數碼管顯示模塊
4、蜂鳴器模塊
5、指示燈模塊
?
四、軟件設計
#include<reg52.h>?? ??? ? ? //頭文件
#include<SMG.h>
#include<EEPROM.h>
#include<INTERRUPT.h>
#define uchar unsigned char//宏定義
#define uint unsigned int
/**********************引腳定義************************/
sbit key_zhu=P2^2;?? ? ? //主持人鍵
sbit key_jia=P2^1;?? ? ? //加鍵
sbit key_jian=P2^0;?? ? ? //減鍵
sbit key_1=P1^1;?? ? ? //八位選手按鍵定義
sbit key_2=P1^3;
sbit key_3=P1^5;
sbit key_4=P1^7;
sbit key_5=P3^1;
sbit key_6=P3^3;
sbit key_7=P3^5;
sbit key_8=P3^7;
sbit led_1=P1^0;?? ? ? //八位LED燈按鍵定義
sbit led_2=P1^2;
sbit led_3=P1^4;
sbit led_4=P1^6;
sbit led_5=P3^0;
sbit led_6=P3^2;
sbit led_7=P3^4;
sbit led_8=P3^6;
/**********************變量定義************************/
uchar zhu_f=0;?? ??? ? ? //比賽進行階段標記位,=0表示沒有按。=1表示在設置倒計時的時間。=2表示開始搶答
uchar qiang_f=0;?? ? ? //搶答犯規標記,=0沒有犯規。=1表示有人犯規
uchar wan_f=0;?? ??? ? ? //搶答完成標記,=0搶答沒完成后還沒有開始。=1表示搶答完成
uchar time=30;?? ??? ? ? //倒計時時間
uchar T0_num;?? ??? ? ? //定時器0計數
uchar number;?? ??? ? ? //搶答成功選手的編號,或犯規選手的編號。=0的時候表示沒有
/********************************************************
函數名稱:void delayms(uint ms)
函數作用:毫秒延時函數
參數說明:
********************************************************/?
void delayms(uint ms)
{
?? ?unsigned char i=100,j;
?? ?for(;ms;ms--)
?? ?{
?? ??? ?while(--i)
?? ??? ?{
?? ??? ??? ?j=10;
?? ??? ??? ?while(--j);
?? ??? ?}
?? ?}
}
/********************************************************
函數名稱:void bajing()
函數作用:搶答犯規報警提示
參數說明:
********************************************************/?
void bajing()
{
?? ?buzz=0;?? ??? ? ? //開蜂鳴器
?? ?delayms(10);
?? ?buzz=1;?? ??? ? ? //關蜂鳴器
?? ?delayms(10);
}
/********************************************************
函數名稱:uchar qianda()
函數作用:搶答按鍵檢測,返回搶答編號
參數說明:
********************************************************/
uchar qianda()
{
?? ?uchar temp=0;
?? ?if(key_1==0)?? ??? ??? ??? ? ?//一號犯規,下同
?? ??? ?temp=1;?? ??? ??? ? ?//記錄1號
?? ?else
?? ??? ?if(key_2==0)
?? ??? ??? ?temp=2;
?? ??? ?else
?? ??? ??? ?if(key_3==0)
?? ??? ??? ??? ?temp=3;
?? ??? ??? ?else
?? ??? ??? ??? ?if(key_4==0)
?? ??? ??? ??? ??? ?temp=4;
?? ??? ??? ??? ?else
?? ??? ??? ??? ??? ?if(key_5==0)
?? ??? ??? ??? ??? ??? ?temp=5;
?? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ?if(key_6==0)
?? ??? ??? ??? ??? ??? ??? ?temp=6;
?? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ??? ?if(key_7==0)
?? ??? ??? ??? ??? ??? ??? ??? ?temp=7;
?? ??? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ??? ??? ?if(key_8==0)
?? ??? ??? ??? ??? ??? ??? ??? ??? ?temp=8;?? ?
?? ?return temp;?? ?
}
五、實驗現象
演示視頻: