仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【O06】
1.? 簡介
? 本文提出了一種基于51單片機的16路搶答器設計。該設計在硬件方面主要采用AT89C51單片機作為主控核心,結合獨立按鍵和矩陣鍵盤、數(shù)碼管、蜂鳴器。搶答限定時間為30S,在按下開始搶答后開始倒計時,當選手搶答后顯示對應的搶答選手編碼和倒計時時間,在開始搶答之前可以通過按鍵修改搶答倒計時。
2.? 主要功能
a.主持人按下?lián)尨痖_始按鍵,搶答者才可以開始搶答,搶答倒計時30S。
b.搶答者按下按鍵,數(shù)碼管顯示搶答者的編號倒計時時間。
c.在開始搶答之前可以通過按鍵修改搶答倒計時。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現(xiàn)程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換
#define uchar unsigned char; //定義數(shù)據(jù)類型 程序中遇到unsigned char 則用uchar替換
#define uint unsigned int; //定義數(shù)據(jù)類型 程序中遇到unsigned int 則用uint替換
sbit add=P2^0;
sbit jian=P2^1;
sbit beep=P2^2; //定義報警輸入端口
sbit start=P2^3;
sbit WEI=P2^7; //定義鎖存使能端口 位鎖存
sbit DUAN=P2^6; //定義鎖存使能端口 段鎖存
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit key9=P3^0;
sbit key10=P3^1;
sbit key11=P3^2;
sbit key12=P3^3;
sbit key13=P3^4;
sbit key14=P3^5;
sbit key15=P3^6;
sbit key16=P3^7;
uchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
uchar code dofly_WeiMa[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數(shù)碼管點亮,即位碼
uchar code table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar TempData[8]; //存儲顯示值的全局變量
//函數(shù)聲明
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void Delay(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void check1();
void check2();
void keyscan();
uchar n,m,num,t,time;
bit flag;
/*---------------------------------------------------
主函數(shù)
---------------------------------------------------*/
void main (void)
{
EA=1;
TMOD=0x11;
TH0=(65536-50000)/256;//這是50ms的
TL0=(65536-50000)%256;
ET0=1;
TR0=0;
TH1=(65536-50000)/256;//這是50ms的
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
time=30;
num=0;
flag=0;
while (1) //主循環(huán)
{
TempData[2]=dofly_DuanMa[time/10];//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[3]=dofly_DuanMa[time%10];
if(num!=0)
m=1;
if(start==0)
{
DelayMs(10);
if(start==0)
{
flag=1;
while(!start);
}
}
if(add==0)
{
DelayMs(10);
if(add==0)
{
time++;
while(!add);
}
}
if(jian==0)
{
DelayMs(10);
if(jian==0)
{
time--;
while(!jian);
}
}
if(time>=99)
time=99;
if(flag==0)
{
if(num!=0)
m=1;
keyscan();
check2();
}
if(flag==1)
{
TR0=1;
if(num!=0)
m=1;
keyscan();
check1();
}
//主循環(huán)中添加其他需要一直工作的程序
}
}
void timer_t0() interrupt 1
{
TH0=(65536-50000)/256;//這是50ms的
TL0=(65536-50000)%256;
t++;
//beep=0;
if(t==20)//設置為20,就是1s為高1s為低
{
//beep=1;
t=0;
time--;
TempData[2]=dofly_DuanMa[time/10];//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[3]=dofly_DuanMa[time%10];
if(time<=0)
{
time=0;
beep=1;
}
if(time<=5&&time>0)
{
beep=0;
DelayMs(10);
beep=1;
}
}
}
4.? 仿真proteus8.6
? 本設計采用proteus8.6軟件(內附安裝包)實現(xiàn)仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
選手搶答:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【O06】百度網(wǎng)盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集