加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

【普中開發(fā)板】基于51單片機(jī)的籃球計分器液晶LCD1602顯示( proteus仿真+設(shè)計報告)

11/05 09:07
1343
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
    • 1.主要功能:
    • 講解視頻:
    • 2.仿真
    • 3. 程序代碼
    • 4. 設(shè)計報告
    • 5. 設(shè)計資料內(nèi)容清單&&下載鏈接
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的籃球計分器液晶LCD1602顯示( proteus仿真+程序+設(shè)計報告+實物仿真講解視頻)

仿真圖proteus8.16(有低版本)

程序編譯器:keil 4/keil 5

編程語言:C語言

設(shè)計編號:P09

1.主要功能:

基于51單片機(jī)AT89C51/52(與AT89S51/52、AT89C51/52、STC89C51/52等51內(nèi)核單片機(jī)通用)

基于51單片機(jī)的籃球計分器液晶LCD1602顯示

設(shè)計內(nèi)容:

1、設(shè)計LCD顯示籃球比賽計時計分牌。

2、通過加分按鈕可以給A隊或B隊加分。

3、設(shè)計對調(diào)功能,A隊和B隊分?jǐn)?shù)互換,意味著中場交換場地。

4、顯示比賽倒計時功能。

5、創(chuàng)新內(nèi)容:

如顯示第幾小節(jié)。

可以通過按鍵完成+1、+2、+3、-1操作。

籃球比賽24秒進(jìn)攻倒計時功能

(目前僅完全適配普中開發(fā)板A234,其他普中開發(fā)板型號可能需要做代碼修改或接線)

需注意仿真中51單片機(jī)芯片是兼容的,AT89C51,AT89C52是51單片機(jī)的具體型號,內(nèi)核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機(jī)芯片。

以下為本設(shè)計資料展示圖:

講解視頻:

仿真講解+代碼講解

img

2.仿真

開始仿真

打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。

以上仿真結(jié)果均符合設(shè)計要求。

img

3. 程序代碼

使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合報告理解代碼含義。

img

主要代碼


//延時子函數(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;
	RW=0;//寫入
	P0=com;
	delay(5);
	E=1;
	delay(5);
	E=0;
}
//LCD1602液晶寫數(shù)據(jù)子函數(shù)
void write_date(uchar date)
{
	RS=1;
	RW=0;//寫入
	P0=date;
	delay(5);
	E=1;
	delay(5);
	E=0;
}
LCD1602液晶設(shè)置當(dāng)前行
//void write_sfm(uchar hang,uchar add)
//{
//	if(hang==1)   			   //設(shè)置當(dāng)前行
//		write_com(0x80+add);
//	else
//		write_com(0x80+0x40+add);	
//}

/********************************************************************
* 名稱 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
	 	 write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
		while(1)
		{
			if(*p == '?')  break;
			write_date(*p);
			p++;
		}	
}

//LCD1602液晶初始化子函數(shù)
void LCD1602_init()
{
	uchar i;
	a_team=0;    //H.T分?jǐn)?shù)初始化
	b_team=0;    //R.T分?jǐn)?shù)初始化
	time=0;
	TMOD=0x10;    //定時器1初始化 
	TL1=0x00;
	TH1=0x4c;  //設(shè)置定時器初值 定時器50ms一次中斷
	EA=1;     //開總中斷
	ET1=1;     //開定時器1
	TR1=0;     //定時器1不工作

	E=0; 
	miao=0;
	fen=12;//默認(rèn)單節(jié)比賽時間(單位分鐘)
	num=1;
	sec_24=24;
	change_flag = 0;
	write_com(0x38);  //LCD設(shè)置初始化
	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]);
	}
}
//分?jǐn)?shù)更新子函數(shù)
void point_lcd(uchar add,uchar dat)
{
	write_com(0x80);  //LCD顯示初始化

	if(change_flag){
		write_string(1,2,"B");
		write_string(1,8,"A");

	}else{
		write_string(1,2,"A");
		write_string(1,8,"B");
	}
	if(change_flag){
		if(add == 0x04){
			add = 0x0A;
		}else if(add == 0x0A){
			add = 0x04;
		}
	}
	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()
{
	uchar i=0;
	i=Matrix_buttons_scan();//按鍵檢測

	if(i==1)     //A分?jǐn)?shù)加一
	{
		if(a_team<1000)a_team++;
  		point_lcd(0x04,a_team);  	
	}
	else if(i==2)    //A分?jǐn)?shù)加二
	{
		if(a_team<1000)a_team=a_team+2;
  		point_lcd(0x04,a_team);
	}
	else if(i==3)    //A分?jǐn)?shù)加三
	{
		if(a_team<1000)a_team=a_team+3;
  		point_lcd(0x04,a_team);
	}
	else if(i==4)    //A分?jǐn)?shù)減一
	{
		if(a_team>=1)a_team=a_team-1;
  		point_lcd(0x04,a_team);
	}
	else if(i==5)    //B分?jǐn)?shù)加一
	{
		if(b_team<1000)b_team++;
  		point_lcd(0x0A,b_team);
	}
	else if(i==6)    //B分?jǐn)?shù)加二
	{
		if(b_team<1000)b_team=b_team+2;
		point_lcd(0x0A,b_team);
	}
	else if(i==7)    //B分?jǐn)?shù)加三
	{
		if(b_team<1000)b_team=b_team+3;
		point_lcd(0x0A,b_team);
	}
	else if(i==8)    //B分?jǐn)?shù)減一
	{
		if(b_team>=1)b_team=b_team-1;
		point_lcd(0x0A,b_team);
	}
	else if(i==9)    //交換
	{

		if(change_flag){
			change_flag = 0;
		}else{
			change_flag = 1;
		}
		point_lcd(0x04,a_team);
		point_lcd(0x0A,b_team);		
	}
	else if(i==10)    //
	{
		TR1=~TR1;     //定時器1工作/暫停
		if(TR1==1)  //當(dāng)?shù)褂嫊r工作時,S1按下定時器立即停止工作
		{
	  		PT1=0;//取消定時器1優(yōu)先級最高
		}
		else   //倒計時不工作時,S1按下倒計時立即工作
		{
	  		PT1=1;//定時器1優(yōu)先級最高
		}	
	}
	else if(i==11)    //
	{
		sec_24=24;
		write_com(0x80+0x4e);	//24s倒計時顯示
		write_date(0x30+sec_24/10); //更新倒計時時間
		write_date(0x30+sec_24%10);
		write_com(0x80+0x4e);
	}
	
	
}
//比賽倒計時/24s倒計時
void counter_down()
{

	if(time>=20)     //每1s倒計時做減一操作
	{
  		miao--;
  		sec_24--;
  		write_com(0x80+0x4e);  //24s倒計時顯示
  		write_date(0x30+sec_24/10);
  		write_date(0x30+sec_24%10);
		write_com(0x80+0x4e);
  		if(sec_24==0)    //24s結(jié)束
  		{
   			sec_24=24;
			TR1=0;     //定時器1暫停
  		}
  		if((miao==0)&&(fen==0))  //檢測一節(jié)比賽是否結(jié)束
  		{
   			TR1=0;     //定時器1暫停
   			write_com(0x80+0x44);
   			write_date(0x30);
   			num++;
   			sec_24=24;    //24s計時復(fù)位
   			write_com(0x80+0x4e);  //24s倒計時顯示
   			write_date(0x30+sec_24/10);
   			write_date(0x30+sec_24%10);
			write_com(0x80+0x4e);

			write_com(0x80+0x4b); //更新"SEC-?"
			write_date(0x30+num);
			write_com(0x80+0x4b);
			miao=0;     //倒計時復(fù)位
			fen=12;
  		}
  		if(miao==-1)
  		{
   			miao=59;
   			fen--;
  		}
  		write_com(0x80+0x40);  //更新倒計時顯示
  		write_date(0x30+fen/10);
  		write_date(0x30+fen%10);
  		write_com(0x80+0x43);
  		write_date(0x30+miao/10);
  		write_date(0x30+miao%10);
		write_com(0x80+0x43);
  		time=0;
	}
}
//主函數(shù)
void main()
{
	LCD1602_init();
	while(1)
	{
  		keyscan();  //分?jǐn)?shù)按鍵檢測
	}
}

4. 設(shè)計報告

9978字設(shè)計報告,內(nèi)容包括摘要,硬件設(shè)計、軟件設(shè)計、軟硬件框圖、調(diào)試、結(jié)論等

img

5. 設(shè)計資料內(nèi)容清單&&下載鏈接

資料設(shè)計資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計報告、軟硬件設(shè)計框圖等。

0、常見使用問題及解決方法–必讀?。。。?/p>

1、仿真圖

2、程序源碼注釋

3、功能要求

4、開題報告

5、設(shè)計報告

6、軟硬件流程框圖

7、燒錄工具

8、講解視頻

Altium Designer 安裝破解

filename.bat

KEIL+proteus 單片機(jī)仿真設(shè)計教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡易使用教程

單片機(jī)學(xué)習(xí)資料

普中-2&普中-3&普中-4開發(fā)板原理圖.pdf

相關(guān)數(shù)據(jù)手冊

答辯技巧

設(shè)計報告常用描述

鼠標(biāo)雙擊打開查找嘉盛單片機(jī)51 STM32單片機(jī)課程畢業(yè)設(shè)計.url

資料下載鏈接(可點擊):

  • 設(shè)計資料獲取聯(lián)系方式.doc

相關(guān)推薦

電子產(chǎn)業(yè)圖譜