仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計(jì)編號:【O03】
1.? 簡介
? 本文提出了一種基于51單片機(jī)的8路搶答器設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、數(shù)碼管、蜂鳴器。搶答限定時間為20S,在按下開始搶答后開始倒計(jì)時,當(dāng)選手搶答后顯示對應(yīng)的搶答選手編碼,在按下答題計(jì)時鍵,選手在30S倒計(jì)時內(nèi)開始答題。支持修改搶答時間和答題時間。
2.? 主要功能
a.主持人按下?lián)尨痖_始按鍵,搶答者才可以開始搶答,數(shù)碼管搶答倒計(jì)時20S。
b.搶答者按下按鍵,數(shù)碼管顯示搶答者的編號和剩余時間倒計(jì)時。
c.按下答題計(jì)時鍵,選手在30S倒計(jì)時內(nèi)開始答題。
d.在開始搶答之前可以通過按鍵修改搶答時間和答題時間。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用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; //標(biāo)志位
bit K_startcountflag,K_timecountflag; //時間調(diào)整標(biā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; //答題計(jì)時鍵
sbit K_startcount=P3^3; //開始搶答時間加鍵
sbit K_startjian=P3^4; //開始搶答時間減鍵
sbit K_timecount=P3^5; //答題計(jì)時時間加鍵
sbit K_timejian=P3^6; //答題計(jì)時時間減鍵
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ī)標(biāo)志位
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,使揚(yáng)聲器響一聲
s_flag=0; //關(guān)閉開始鍵標(biāo)志位,使再按其他七個鍵不會響應(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è)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
開始倒計(jì)時:
選手搶答:
答題計(jì)時:
5.? 設(shè)計(jì)報告
設(shè)計(jì)報告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【O03】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集