仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計(jì)編號(hào):【O04】
1.? 簡介
? 本文提出了一種基于51單片機(jī)的8路搶答器設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、LCD12864、蜂鳴器。搶答限定時(shí)間為10S,答題時(shí)間為15S,在按下開始搶答后開始倒計(jì)時(shí),當(dāng)選手搶答后顯示對應(yīng)的搶答選手編碼;在搶答結(jié)束后,選手須在15S內(nèi)答題,主持人根據(jù)答題結(jié)果予以加分減分。
2.? 主要功能
a.主持人按下?lián)尨痖_始按鍵,搶答者才可以開始搶答,搶答倒計(jì)時(shí)10S。
b.搶答者按下按鍵,LCD12864顯示搶答者的編號(hào)。
c.在搶答結(jié)束后,選手須在15S內(nèi)答題,主持人根據(jù)答題結(jié)果予以加分減分。
d.在開始搶答之前可以通過按鍵修改搶答時(shí)間和答題時(shí)間。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
uchar mode=0;//模式 0:停止 1:搶答 2:答題
uchar flag=0;//暫停模式
uchar time=0;//系統(tǒng)定時(shí)
uchar sec=0;//延時(shí)
uchar num=0;//選手編號(hào)
uchar miao1=0,miao=0;//倒計(jì)時(shí)
uchar shi1=0,shi2=0;//搶答+答題計(jì)時(shí)
uchar fen[]={10,10,10,10,10,10,10,10};//分?jǐn)?shù)
uchar cha=0;//查看模式
uchar beep_time=0;//蜂鳴器控制
//清空顯示
void clear()
{
lcd_clear(0); // 清屏
lcd_set_line(0); // 設(shè)置起始行為0
}
//顯示"歡迎使用搶答器"
void disp1()
{
display(0, 0 , str1);
display(0, 1 , str2);
display(0, 2 , str3);
display(0, 3 , str4);
display(0, 4 , str5);
display(0, 5 , str6);
display(0, 6 , str7);
}
//顯示比賽名稱和日期
void disp2()
{
display(0, 2 , str5);//搶答比賽
display(0, 3 , str6);
display(0, 4 , str10);
display(0, 5 , str11);
Ds1302ReadTime();//讀取時(shí)間
display_num(1,0,num2,num0);//年
find(ds1302_time[6]/10);qqq=ppp;
find(ds1302_time[6]%10);
display_num(1,1,qqq,ppp);
display(1, 2 , str12);
find(ds1302_time[4]/10);qqq=ppp;//月
find(ds1302_time[4]%10);
display_num(1,3,qqq,ppp);
display(1, 4 , str13);
find(ds1302_time[3]/10);qqq=ppp;//日
find(ds1302_time[3]%10);
display_num(1,5,qqq,ppp);
display(1, 6 , str14);
}
//顯示倒計(jì)時(shí)
void disp_time()
{
find(miao/10);qqq=ppp;
find(miao%10);
display_num(3,0,qqq,ppp);
display_num(3,1,char1,kong);
}
//顯示單人分?jǐn)?shù)
void disp_fen1()
{
display(3, 4 , str25);
display(3, 5 , str26);
display(3, 6 , mao);
find(fen[num-1]/10);qqq=ppp;
find(fen[num-1]%10);
display_num(3,7,qqq,ppp);
}
//顯示全部分?jǐn)?shù)
void disp_fen2()
{
uchar i;
for(i=0;i<4;i++)
{
find(i+1);
display_num(i,0,kong,ppp);
display(i, 1 , mao);
find(fen[i]/10);qqq=ppp;
find(fen[i]%10);
display_num(i,2,qqq,ppp);
}
for(i=0;i<8;i++)
{
find(i+1);
display_num(i,4,kong,ppp);
display(i, 5 , mao);
find(fen[i]/10);qqq=ppp;
find(fen[i]%10);
display_num(i,6,qqq,ppp);
}
}
//顯示“搶答超時(shí)”
void disp3()
{
disp2();
display(2, 2 , str5);
display(2, 3 , str6);
display(2, 4 , str8);
display(2, 5 , str9);
}
//顯示“答題超時(shí)”
void disp4()
{
disp2();
display(2, 2 , str6);
display(2, 3 , str15);
display(2, 4 , str8);
display(2, 5 , str9);
}
//顯示“搶答開始”
void disp5()
{
disp2();
display(2, 2 , str5);
display(2, 3 , str6);
display(2, 4 , str16);
display(2, 5 , str17);
disp_time();
}
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ì)時(shí):
選手搶答:
答題加減分:
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【O04】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集