仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【O03】
1.? 簡介
? 本文提出了一種基于51單片機的8路搶答器設(shè)計。該設(shè)計在硬件方面主要采用AT89C51單片機作為主控核心,結(jié)合獨立按鍵、數(shù)碼管、蜂鳴器。搶答限定時間為20S,在按下開始搶答后開始倒計時,當(dāng)選手搶答后顯示對應(yīng)的搶答選手編碼,在按下答題計時鍵,選手在30S倒計時內(nèi)開始答題。支持修改搶答時間和答題時間。
2.? 主要功能
a.主持人按下?lián)尨痖_始按鍵,搶答者才可以開始搶答,數(shù)碼管搶答倒計時20S。
b.搶答者按下按鍵,數(shù)碼管顯示搶答者的編號和剩余時間倒計時。
c.按下答題計時鍵,選手在30S倒計時內(nèi)開始答題。
d.在開始搶答之前可以通過按鍵修改搶答時間和答題時間。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
char s;
uchar num=0;
char time=20; //搶答時間
char datitime=30; //答題限時時間
uint tt,t1; //T0,T1定時器定一秒時
bit flag,s_flag=1,b_flag,fall_flag; //標志位
bit K_startcountflag,K_timecountflag; //時間調(diào)整標志位
sbit K0=P3^0;
sbit beep=P3^7; //蜂鳴器輸出口
sbit rled=P3^1; //指示燈輸出口
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
sbit K_Time=P3^2; //答題計時鍵
sbit K_startcount=P3^3; //開始搶答時間加鍵
sbit K_startjian=P3^4; //開始搶答時間減鍵
sbit K_timecount=P3^5; //答題計時時間加鍵
sbit K_timejian=P3^6; //答題計時時間減鍵
void delay(uchar ms)
{
uchar y;
for(;ms>0;ms--)
for(y=120;y>0;y--);
}
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x40};
uchar code tablewe[]={0XFE,0XFD,0XFB,0XF7};
void T0_Init(void)
{
TMOD=0X01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0;
}
void Key_Scan(void) //開始鍵掃描
{
if(K0==0)
{
delay(10);
if(K0==0)
{
while(!K0);
TR0=1;
s=time;
tt=0;
flag=1;
s_flag=1;
b_flag=1;
num=0;
beep=1;
rled=1;
fall_flag=0; //清除違規(guī)標志位
K_startcountflag=0;
K_timecountflag=0;
}
}
}
void Scan(void) //八路熱鍵掃描(哪個鍵先按下,哪個優(yōu)先級最高)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(!K1);
num=1; //數(shù)碼管顯示1號"1"
TR0=0; //關(guān)閉定時器0,時間停止
TR1=1; //打開定時器1,使揚聲器響一聲
s_flag=0; //關(guān)閉開始鍵標志位,使再按其他七個鍵不會響應(yīng)
}
}
if(K2==0) //下面七個鍵的處理同上
{
delay(10);
if(K2==0)
{
while(!K2);
num=2;
TR0=0;
TR1=1;
s_flag=0; //重要
}
}
if(K3==0)
{
delay(10);
if(K3==0)
{
while(!K3);
num=3;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K4==0)
{
delay(10);
if(K4==0)
{
while(!K4);
num=4;
TR0=0;
TR1=1;
s_flag=0;
}
}
if(K5==0)
{
delay(10);
if(K5==0)
{
while(!K5);
num=5;
TR0=0;
TR1=1;
s_flag=0;
}
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
開始倒計時:
選手搶答:
答題計時:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【O03】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集