仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):【O03】
1.? 簡(jiǎn)介
? 本文提出了一種基于51單片機(jī)的8路搶答器設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、數(shù)碼管、蜂鳴器。搶答限定時(shí)間為20S,在按下開(kāi)始搶答后開(kāi)始倒計(jì)時(shí),當(dāng)選手搶答后顯示對(duì)應(yīng)的搶答選手編碼,在按下答題計(jì)時(shí)鍵,選手在30S倒計(jì)時(shí)內(nèi)開(kāi)始答題。支持修改搶答時(shí)間和答題時(shí)間。
2.? 主要功能
a.主持人按下?lián)尨痖_(kāi)始按鍵,搶答者才可以開(kāi)始搶答,數(shù)碼管搶答倒計(jì)時(shí)20S。
b.搶答者按下按鍵,數(shù)碼管顯示搶答者的編號(hào)和剩余時(shí)間倒計(jì)時(shí)。
c.按下答題計(jì)時(shí)鍵,選手在30S倒計(jì)時(shí)內(nèi)開(kāi)始答題。
d.在開(kāi)始搶答之前可以通過(guò)按鍵修改搶答時(shí)間和答題時(shí)間。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開(kāi)程序,可自行通過(guò).c和.h文件新建工程即可。
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
char s;
uchar num=0;
char time=20; //搶答時(shí)間
char datitime=30; //答題限時(shí)時(shí)間
uint tt,t1; //T0,T1定時(shí)器定一秒時(shí)
bit flag,s_flag=1,b_flag,fall_flag; //標(biāo)志位
bit K_startcountflag,K_timecountflag; //時(shí)間調(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ì)時(shí)鍵
sbit K_startcount=P3^3; //開(kāi)始搶答時(shí)間加鍵
sbit K_startjian=P3^4; //開(kāi)始搶答時(shí)間減鍵
sbit K_timecount=P3^5; //答題計(jì)時(shí)時(shí)間加鍵
sbit K_timejian=P3^6; //答題計(jì)時(shí)時(shí)間減鍵
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) //開(kāi)始鍵掃描
{
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) //八路熱鍵掃描(哪個(gè)鍵先按下,哪個(gè)優(yōu)先級(jí)最高)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(!K1);
num=1; //數(shù)碼管顯示1號(hào)"1"
TR0=0; //關(guān)閉定時(shí)器0,時(shí)間停止
TR1=1; //打開(kāi)定時(shí)器1,使揚(yáng)聲器響一聲
s_flag=0; //關(guān)閉開(kāi)始鍵標(biāo)志位,使再按其他七個(gè)鍵不會(huì)響應(yīng)
}
}
if(K2==0) //下面七個(gè)鍵的處理同上
{
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軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開(kāi)文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
開(kāi)始倒計(jì)時(shí):
選手搶答:
答題計(jì)時(shí):
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤(pán)下載鏈接:【O03】百度網(wǎng)盤(pán)下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集