51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)

51单片机的篮球计分器液晶LCD1602显示

51单片机的篮球计分器液晶LCD1602显示

( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0058

📑1.主要功能:

基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)

基于51单片机的篮球计分器液晶LCD1602显示

设计内容:

1、设计LCD显示篮球比赛计时计分牌。

2、通过加分按钮可以给A队或B队加分。

3、设计对调功能,A队和B队分数互换,意味着中场交换场地。

4、显示比赛倒计时功能。

5、创新内容:

如显示第几小节。

单节比赛或全场比赛结束后有蜂鸣器提醒。

可以通过按键完成+1、+2、+3操作。

篮球比赛24秒进攻倒计时功能

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

📑讲解视频:

仿真讲解+代码讲解

51单片机篮球计分器LCD1602液晶(仿真+代码+报告+原理图+PCB+讲解)

📑2.仿真

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

📑3. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

⚓️LCD1602液晶初始化子函数:

cpp 复制代码
//LCD1602液晶初始化子函数
void LCD1602_init()
{
	uchar i;
	bb=0;    //H.T分数初始化
	cc=0;    //R.T分数初始化
	time=0;
	TMOD=0x10;    //定时器1初始化 
	TL1=0x00;
	TH1=0x4c;  //设置定时器初值 定时器50ms一次中断
	EA=1;     //开总中断
	ET1=1;     //开定时器1
	TR1=0;     //定时器1不工作
	EX0=1;     //开中断0
	EX1=1;     //开中断1
	IT0=1;     //中断0为边沿触发
	IT1=1;     //中断1为边沿触发
	E=0; 
	beep=0;
	miao=0;
	fen=12;//默认单节比赛时间(单位分钟)
	num=1;
	aa=24;
	change_flag = 0;
	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]);
	}
}

⚓️ 按键处理函数

c 复制代码
//按键扫描子函数
void keyscan()
{
	if(K3==0)     //K3按下A分数加一
	{
  		while(K3==0);
		bb++;
  		point_lcd(0x04,bb);  
		
  		if(K3==0)    //松手检测
  		{
   			while(K3==0);
   			delay(20);
  		}
	}
	else if(K4==0)    //S4按下A分数加二
	{
  		while(K4==0);
		bb=bb+2;
  		point_lcd(0x04,bb);
  		if(K4==0)
  		{
   			while(K4==0);
   			delay(20);
  		}
	}
	else if(K7==0)    //S4按下A分数加二
	{
  		while(K7==0);
		bb=bb+3;
  		point_lcd(0x04,bb);
  		if(K7==0)
  		{
   			while(K7==0);
   			delay(20);
  		}
	}
	else if(K5==0)    //S5按下B分数加一
	{
  		while(K5==0);
		cc++;
  		point_lcd(0x0A,cc);
  		if(K5==0)
  		{
   			while(K5==0);
   			delay(20);
  		}
	}
	else if(K6==0)    //S6按下B分数加2
	{
  		while(K6==0);
		cc=cc+2;
  		point_lcd(0x0A,cc);
  		if(K6==0)
  		{
   			while(K6==0);
   			delay(20);
  		}
	}
	else if(K8==0)    //S6按下B分数加2
	{
  		while(K8==0);
		cc=cc+3;
  		point_lcd(0x0A,cc);
  		if(K8==0)
  		{
   			while(K8==0);
   			delay(20);
  		}
	}
	else if(K9==0)    //S6按下B分数加2
	{
  		while(K9==0);
		if(change_flag){
			change_flag = 0;
		}else{
			change_flag = 1;
		}
		point_lcd(0x04,bb);
		point_lcd(0x0A,cc);		
  		if(K9==0)
  		{
   			while(K9==0);
   			delay(20);
  		}
	}	
}

⚓️ 比赛计时部分函数

c 复制代码
//比赛倒计时/24s倒计时
void counter_down()
{
	uchar i;
	if(time>=20)     //每1s倒计时做减一操作
	{
  		miao--;
  		aa--;
  		write_com(0x80+0x4e);  //24s倒计时显示
  		write_date(0x30+aa/10);
  		write_date(0x30+aa%10);
		write_com(0x80+0x4e);
  		if(aa==0)    //24s结束发出报警
  		{
   			beep=1;
  		 	delay(3000);
   			beep=0;
   			aa=24;
			TR1=0;     //定时器1暂停
  		}
  		if((miao==0)&&(fen==0))  //检测一节比赛是否结束
  		{
   			TR1=0;     //定时器1暂停
   			write_com(0x80+0x44);
   			write_date(0x30);
   			num++;
   			aa=24;    //24s计时复位
   			write_com(0x80+0x4e);  //24s倒计时显示
   			write_date(0x30+aa/10);
   			write_date(0x30+aa%10);
			write_com(0x80+0x4e);
   			if(num<5)    //每节结束蜂鸣器发出4s的间断报警
   			{
    			for(i=40;i>0;i--)
    			{
     				beep=1;
     				delay(500);
     				beep=0;
     				delay(500);
    			}
   			}
   			if(num==5)    //终场结束,蜂鸣器发出10s的连续警报声
   			{
     			beep=1;
     			delay(10000);
     			num=0;
   			}	
   			beep=0;     //蜂鸣器关闭
			write_com(0x80+0x4b); //更新"SEC-?"
			write_date(0x30+num);
			write_com(0x80+0x4b);
			miao=0;     //倒计时复位
			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;
	}
}

📑4. 原理图

原理图使用AD绘制,可供实物参考。

Proteus仿真和实物作品的区别:

1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。

2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。

电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。

3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。

4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。

📑5. PCB图

📑6. 设计报告

10112字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等

📑7. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

资料下载链接:

0、常见使用问题及解决方法--必读!!!!

1、仿真图

2、程序源码

3、开题报告

3、原理图

5、功能要求

6、元器件清单

7、设计报告

8、软硬件流程框图

9、讲解视频

Altium Designer 软件资料

KEIL软件资料

Proteus软件资料

单片机学习资料

答辩技巧

设计报告常用描述

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

相关推荐
redcocal7 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计10 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
夜间去看海10 小时前
基于51单片机的自动清洗系统(自动洗衣机)
嵌入式硬件·51单片机·proteus·洗衣机
yrx02030711 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
Archie_IT13 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计13 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器
wmkswd13 小时前
CAN总线-STM32上CAN外设
stm32·单片机·嵌入式硬件
努力看懂帖子14 小时前
关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)
嵌入式硬件
嵌入式大圣15 小时前
STM32 单片机最小系统全解析
stm32·单片机·嵌入式硬件