仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【D04】
1.? 簡介
? 本文介紹一種用AT89C51作為核心部件進行邏輯控制及信號產(chǎn)生的單片機技術和C語言編程設計的籃球比賽計時器。此籃球計時計分器在硬件方面主要采用AT89C51單片機作為主控核心,由獨立按鍵、蜂鳴器、LCD1602顯示屏顯示。具有靈活方便、適用范圍廣的特點,基本能夠滿足實踐需求。
2.? 主要功能
a.支持按鍵設置開始、暫停、24S倒計時復位、甲隊加分、乙隊加分。
b.支持LCD1602顯示甲隊、乙隊分數(shù)、比賽時間、24S倒計時。
c.支持比賽結束后蜂鳴器告警。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現(xiàn)程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include<reg51.h>//51單片機頭文件
typedef unsigned char uchar;
typedef unsigned int uint;
sbit K1=P3^2;//比賽倒計時開始/暫停
sbit K2=P3^3;//24s倒計時重新開始
sbit K3=P1^3;//甲隊+1按鍵
sbit K4=P1^4;//甲隊+2按鍵
sbit K8=P1^5;//乙隊+3按鍵
sbit K5=P1^0;//乙隊+1按鍵
sbit K6=P1^1;//乙隊+2按鍵
sbit K7=P1^2;//甲隊+3按鍵
sbit beep=P2^0;//蜂鳴器接口
sbit RS=P2^7;
sbit E=P2^5;
char miao,fen,num,time,aa;
uchar bb,cc;
uchar code table1[]={"H.T 000:000 R.T "};
uchar code table2[]={"12:00 SEC-1 24"};
//延時子函數(shù)
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//LCD1602液晶寫指令子函數(shù)
void write_com(uchar com)
{
RS=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
//LCD1602液晶寫數(shù)據(jù)子函數(shù)
void write_date(uchar date)
{
RS=1;
P0=date;
delay(5);
E=1;
delay(5);
E=0;
}
//LCD1602液晶初始化子函數(shù)
void LCD1602_init()
{
uchar i;
bb=0; //H.T分數(shù)初始化
cc=0; //R.T分數(shù)初始化
time=0;
TMOD=0x10; //定時器1初始化
TL1=0x00;
TH1=0x4c;
EA=1; //開總中斷
ET1=1; //開定時器1
TR1=0; //定時器1不工作
EX0=1; //開中斷0
EX1=1; //開中斷1
IT0=1; //中斷0為邊沿觸發(fā)
IT1=1; //中斷1為邊沿觸發(fā)
E=0;
beep=0;
miao=0;
fen=12;
num=1;
aa=24;
write_com(0x38); //LCD設置初始化
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80); //LCD顯示初始化
for(i=0;i<16;i++)
{
write_date(table1[i]);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(table2[i]);
}
}
//分數(shù)更新子函數(shù)
void point_lcd(uchar add,uchar dat)
{
write_com(0x80+add);
write_date(0x30+dat/100);
write_date(0x30+(dat%100)/10);
write_date(0x30+dat%10);
write_com(0x80+add);
}
//按鍵掃描子函數(shù)
void keyscan()
{
if(K3==0) //K3按下H.T分數(shù)加一
{
while(K3==0);
bb++;
point_lcd(0x04,bb); //分數(shù)顯示更新
if(K3==0) //松手檢測
{
while(K3==0);
delay(20);
}
}
else if(K4==0) //S4按下H.T分數(shù)加二
{
while(K4==0);
bb=bb+2;
point_lcd(0x04,bb);
if(K4==0)
{
while(K4==0);
delay(20);
}
}
else if(K7==0) //S4按下H.T分數(shù)加二
{
while(K7==0);
bb=bb+3;
point_lcd(0x04,bb);
if(K7==0)
{
while(K7==0);
delay(20);
}
}
else if(K5==0) //S5按下R.T分數(shù)加一
{
while(K5==0);
cc++;
point_lcd(0x08,cc);
if(K5==0)
{
while(K5==0);
delay(20);
}
}
else if(K6==0) //S6按下R.T分數(shù)加2
{
while(K6==0);
cc=cc+2;
point_lcd(0x08,cc);
if(K6==0)
{
while(K6==0);
delay(20);
}
}
else if(K8==0) //S6按下R.T分數(shù)加2
{
while(K8==0);
cc=cc+3;
point_lcd(0x08,cc);
if(K8==0)
{
while(K8==0);
delay(20);
}
}
}
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)盤下載鏈接:【D04】百度網(wǎng)盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集