基于51单片机篮球控制器12864显示仿真及源程序

一、系统方案

1、本设计采用51单片机作为主控器。

2、比分液晶12864显示。

3、主客队加减分、节数、24秒、复位等功能。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

void Timer_0()interrupt 1

{

TL0 = 0x00;

TH0 = 0xDC;

Count++;

if(Count100)
{
Count=0;
Attack_Time--;
Time_sec--;
if(Attack_Time0)

{

if(BF_flag==0){BF();BF();BF();BF();BF();}

		Attack_Time=24;
		BF_flag=0;
	}
	if(Time_sec==0)
	{
		
		Time_sec=59;
		Time_min--;
		if(Time_min==0)
		{
			Time_min=11;
		}
	}
}

}

2、液晶显示程序

void busy12864()

{

lcdDat=0xff; //口线置1,防止干扰

rs=0; rw=1; //置"命令、读"模式

//en=1; while(lcdDat&0x80); en=0;//忙等待

}

/** 写命令 参数:comDat为要发送的命令 /
void WriteCom(uchar comDat)
{
busy12864(); //忙,则等待
rs=0;rw=0; //置"命令、写"模式
lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
}
/
写数据 参数:dat为要发送的数据 **/

void WriteDat(uchar dat){

busy12864(); //忙,则等待

rs=1;rw=0; //置"数据、写"模式

lcdDat=dat;en=1;en=0; //送出数据,并使之有效

}

/******** 任意尺寸点阵显示函数 ***********|

|参数:显示位置:row页数,col列号, |

| 字符大小:x横向像素,y纵向页数 |

| 显示内容:tab字模表 *****/
void showXY(uchar row,uchar col,uchar x,uchar y,uchar tab){
uchar i,j;
bit right;
if(col<64){right=0;}
else {col-=64;right=1;}
for(i=0;i<y;i++){
if(right)cs1=1,cs2=0;
else cs1=0,cs2=1;
WriteCom(addX0+row+i);
WriteCom(addY0+col);
for(j=0;j<x;j++){
if(col+j<64)WriteDat(tab[i
x+j]);
else if(right==0)
{
cs1=1,cs2=0;
WriteCom(addX0+row+i);
WriteCom(addY0+(col+j-64));
WriteDat(tab[i
x+j]);

}

}

}

}

/* 返回一个8*16字符索引位置 /
uchar enN(uchar s){
uchar i;
for(i=0;zm8x16_index[i]!=0;i++)
if(zm8x16_index[i]==s[0])break;
return i;
}
/
返回一个16
16字符索引位置 /
uchar cnN(uchar s){
uchar i;
for(i=0;zm16x16_index[i]!=0;i+=2)
if(zm16x16_index[i]*s&&zm16x16_index[i+1]
(s+1))break ;
return i/2;
}
/
显示中英文字符串 */

void showStr(uchar row,uchar col,uchar *s)

{

uchar i;

for(i=0;s[i]!=0;i++){

if(s[i]<0x80){

showXY(row,col,8,2,zm8x16_Table[enN(&s[i])]);

col+=8;

}else{

showXY(row,col,16,2,zm16x16_Table[cnN(&s[i])]);

col+=16;i+=1;

}

if(col>120)

{

col=0;

row+=2;

}

}

}

3、按键程序

void Select()

{

if(K10)
{
delay_ms(5);
if(K10)

{

while(!K1);

BF_flag++;

A_Team++;

if(A_Team==999)

{

A_Team=0;

}

BF();

}

}

if(K2==0)
{
	delay_ms(5);
	if(K2==0)
	{
		while(!K2);
		
		A_Team--;
		if(A_Team==0)
		{
			A_Team=999;
		}
		BF();
	}
}

if(K3==0)
{
	delay_ms(5);
	if(K3==0)
	{
		while(!K3); 
		BF_flag++;
		B_Team++;	
		if(B_Team==999)
		{
			B_Team=0;
		}
		BF();
	}
}	

if(K4==0)
{
	delay_ms(5);
	if(K4==0)
	{
		while(!K4); 
		B_Team--;
		if(B_Team==0)
		{
			B_Team=999;
		}
		BF();
	}
}	

if(K5==0)
{
	delay_ms(5);
	if(K5==0)
	{
		while(!K5); 
		TR0=0;BF();
		A_Team=0,B_Team=0;BF_flag=0;
		Time_min=12,Time_sec=0;
		Screenings=1;
		Attack_Time=24;
		Display();
		
	}
}	

if(K6==0)
{
	delay_ms(5);
	if(K6==0)
	{
		while(!K6);	BF();
		Attack_Time=24;BF_flag=0;
	}
}	
if(K7==0)
{
	delay_ms(5);
	if(K7==0)
	{
		while(!K7); BF();
		Screenings++;
		Attack_Time=24;BF_flag=0;
		Time_min=11,Time_sec=59;
		if(Screenings==5)
		{
			Screenings=1;	
		}
	}
}		
if(K8==0)
{
	delay_ms(5);
	if(K8==0)
	{
		BF();
		while(!K8);
		BF_flag=0;
		T_Count++;
		if(T_Count==1)
		{
			Time_min=11;Attack_Time=23;
			Time_sec=59;			
			TR0=1;	
			T_Count=2;
		}
		if(T_Count==3)
		{
			TR0=0;	
		
		}
		if(T_Count==4)
		{
			TR0=1;	
			T_Count=2;
		}
	}
}

}

4、核心算法程序

void main()

{

Init12864();//初始化
EA=1;ET0=1;
Timer0Init();
while(1)
{
	
	Select();
	Display();
	if(Time_min==0&&Time_sec==0&&Screenings==4&&Attack_Time==0)//比赛打完
	{ 
		BF();BF();BF();BF();BF();BF();BF();BF();
	}
}

}

四、 proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
redcocal8 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计11 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
夜间去看海11 小时前
基于51单片机的自动清洗系统(自动洗衣机)
嵌入式硬件·51单片机·proteus·洗衣机
yrx02030711 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
YHPsophie13 小时前
ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块应用领域
经验分享·笔记·单片机·信息与通信·交通物流
Archie_IT14 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计14 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器
wmkswd14 小时前
CAN总线-STM32上CAN外设
stm32·单片机·嵌入式硬件
Ruohongxu14 小时前
LAN8720A-CP-TR-ABC QFN-24 以太网收发器芯片
单片机