【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

基于普中开发板51单片机的篮球计分器液晶LCD1602显示

  • 1.主要功能:
  • 讲解视频:
  • 2.仿真
  • 3. 程序代码
  • 4. 设计报告
  • 5. 设计资料内容清单&&下载链接
    • 资料下载链接(可点击):

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

( proteus仿真+程序+设计报告+实物仿真讲解视频)

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

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:P09

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、-1操作。

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

(目前仅完全适配普中开发板A234,其他普中开发板型号可能需要做代码修改或接线)

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

以下为本设计资料展示图:

讲解视频:

仿真讲解+代码讲解

img

2.仿真

开始仿真

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

以上仿真结果均符合设计要求。

img

3. 程序代码

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

img

主要代码


//延时子函数
void delay(uint z)  
{
	uint x;
	uchar y;
	for(x=z;x>0;x--)
  		for(y=110;y>0;y--);
}
//LCD1602液晶写指令子函数
void write_com(uchar com)
{
	RS=0;
	RW=0;//写入
	P0=com;
	delay(5);
	E=1;
	delay(5);
	E=0;
}
//LCD1602液晶写数据子函数
void write_date(uchar date)
{
	RS=1;
	RW=0;//写入
	P0=date;
	delay(5);
	E=1;
	delay(5);
	E=0;
}
LCD1602液晶设置当前行
//void write_sfm(uchar hang,uchar add)
//{
//	if(hang==1)   			   //设置当前行
//		write_com(0x80+add);
//	else
//		write_com(0x80+0x40+add);	
//}

/********************************************************************
* 名称 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
	 	 write_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
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 == '\0')  break;
			write_date(*p);
			p++;
		}	
}

//LCD1602液晶初始化子函数
void LCD1602_init()
{
	uchar i;
	a_team=0;    //H.T分数初始化
	b_team=0;    //R.T分数初始化
	time=0;
	TMOD=0x10;    //定时器1初始化 
	TL1=0x00;
	TH1=0x4c;  //设置定时器初值 定时器50ms一次中断
	EA=1;     //开总中断
	ET1=1;     //开定时器1
	TR1=0;     //定时器1不工作

	E=0; 
	miao=0;
	fen=12;//默认单节比赛时间(单位分钟)
	num=1;
	sec_24=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]);
	}
}
//分数更新子函数
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);
}
//按键扫描子函数
void keyscan()
{
	uchar i=0;
	i=Matrix_buttons_scan();//按键检测

	if(i==1)     //A分数加一
	{
		if(a_team<1000)a_team++;
  		point_lcd(0x04,a_team);  	
	}
	else if(i==2)    //A分数加二
	{
		if(a_team<1000)a_team=a_team+2;
  		point_lcd(0x04,a_team);
	}
	else if(i==3)    //A分数加三
	{
		if(a_team<1000)a_team=a_team+3;
  		point_lcd(0x04,a_team);
	}
	else if(i==4)    //A分数减一
	{
		if(a_team>=1)a_team=a_team-1;
  		point_lcd(0x04,a_team);
	}
	else if(i==5)    //B分数加一
	{
		if(b_team<1000)b_team++;
  		point_lcd(0x0A,b_team);
	}
	else if(i==6)    //B分数加二
	{
		if(b_team<1000)b_team=b_team+2;
		point_lcd(0x0A,b_team);
	}
	else if(i==7)    //B分数加三
	{
		if(b_team<1000)b_team=b_team+3;
		point_lcd(0x0A,b_team);
	}
	else if(i==8)    //B分数减一
	{
		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)  //当倒计时工作时,S1按下定时器立即停止工作
		{
	  		PT1=0;//取消定时器1优先级最高
		}
		else   //倒计时不工作时,S1按下倒计时立即工作
		{
	  		PT1=1;//定时器1优先级最高
		}	
	}
	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结束
  		{
   			sec_24=24;
			TR1=0;     //定时器1暂停
  		}
  		if((miao==0)&&(fen==0))  //检测一节比赛是否结束
  		{
   			TR1=0;     //定时器1暂停
   			write_com(0x80+0x44);
   			write_date(0x30);
   			num++;
   			sec_24=24;    //24s计时复位
   			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;     //倒计时复位
			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;
	}
}
//主函数
void main()
{
	LCD1602_init();
	while(1)
	{
  		keyscan();  //分数按键检测
	}
}

4. 设计报告

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

img

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

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

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

1、仿真图

2、程序源码注释

3、功能要求

4、开题报告

5、设计报告

6、软硬件流程框图

7、烧录工具

8、讲解视频

Altium Designer 安装破解

filename.bat

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

普中-2&普中-3&普中-4开发板原理图.pdf

相关数据手册

答辩技巧

设计报告常用描述

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

资料下载链接(可点击):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/292088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LLM】大型语言模型综述论文

今天我将与大家分享一篇精彩的论文。这项调查提供了LLM文献的最新综述&#xff0c;这对研究人员和工程师来说都是一个有用的资源。 为什么选择LLM&#xff1f; 当参数尺度超过一定水平时&#xff0c;这些扩展的语言模型不仅实现了显著的性能改进&#xff0c;而且还表现出一些…

1*2*3+3*4*5+...+99*100*101python,1加到100的程序算法python

大家好&#xff0c;本文将围绕python中123一直加到100程序怎么写展开说明&#xff0c;计算123456...100的值python是一个很多人都想弄明白的事情&#xff0c;想搞清楚计算1-23-45 … -100的值python需要先了解以下几个事情。 今天下午上python课的时候&#xff0c;老师留了一个…

Nginx 的SSL证书配置

目录 1.申请域名&#xff0c;证书下载 2.准备站点源代码 3.修改nginx 对应网站的配置文件 4.修改 host 文件 http协议访问的网站默认会显示不安全&#xff0c;因为数据默认是明文传输的 https是httpssl&#xff0c;ssl是加密协议&#xff0c;通过证书来进行加密的&#xff…

【Leetcode】2487. 从链表中移除节点

文章目录 题目思路代码 题目 2487. 从链表中移除节点 思路 1、递归移除节点&#xff1a; 如果头节点为空&#xff0c;直接返回空。递归调用函数处理下一个节点 head->next。在递归返回后&#xff0c;判断当前节点的值是否小于之前记录的最大值 maxVal。如果小于 maxVal…

全国计算机等级考试| 二级Python | 真题及解析(7)

一、选择题 1.python中,表达式5%2 = ( )。 A.2.5 B.2 C.1 D.0 2.已知字符串a="python",则a[ 1 : 3 ]的值为( ) A."pyth" B."pyt" C."py" D…

2023年工作初体验

23年终于正式入职&#xff0c;参与了正式上线的电商平台、crm平台等项目的研发&#xff0c;公司规模较小&#xff0c;气氛融洽&#xff0c;没有任何勾心斗角、末位淘汰&#xff0c;几乎没什么压力。虽然是我的第一家公司&#xff0c;但实际是个适合养老的公司&#xff08;笑 总…

郑州大学算法设计与分析实验2

判断题 1 #include<bits/stdc.h> using namespace std;const int N 50; int f[N], n;int main() { // freopen("1.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;f[1] 1; f[2] 1;for(int i 3; i &l…

教程:Centos6迁移旧虚拟机文件后的网络配置教程,完美解决虚拟机移动后的网络ip变化问题

博主在工作后,想整整之前大学的虚拟机集群,因此特意从之前的旧电脑把虚拟机文件给拷贝了过来,在导入到vm-workstation,顺便能启动虚拟机后,发现之前的静态ip已经跟现在的宿主机网络不一样。想着重新配置,但觉得太麻烦,故想到了修改网卡的mac地址+网卡重配置方法,完美解…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Buffer的创建和销毁、扩容、写入数据

TcpConnection:封装的就是建立连接之后得到的用于通信的文件描述符&#xff0c;然后基于这个文件描述符&#xff0c;在发送数据的时候&#xff0c;需要把数据先写入到一块内存里边&#xff0c;然后再把这块内存里边的数据发送给客户端&#xff0c;除了发送数据&#xff0c;剩下…

Ajax基础入门_Ajax概述,同步与异步,Axios的使用,JSON数据及FastJSON的使用

Ajax 文章目录 Ajax1 概述2 作用3 同步和异步3.1 同步3.2 异步 4 代码编写4.1 服务端4.2 客户端 5 Axios5.1 使用5.2 代码5.2.1 前端5.2.2 后端 5.3 请求方法别名 6 JSON6.1 概述6.2 JSON 基础语法6.2.1 定义格式6.2.2 js 对象与JSON的转换 6.3 发送异步请求携带参数6.4 JSON串…

从0到1入门C++编程——03 内存分区、引用、函数高级应用

文章目录 一、内存分区二、引用三、函数的高级应用1.默认参数2.占位参数3.函数重载 一、内存分区 C程序在执行时&#xff0c;会将内存大致分为4个区&#xff0c;分别是代码区、全局区、栈区和堆区。 代码区用来存放函数体和二进制代码&#xff0c;由操作系统进行管理。 全局区…

docker镜像仓库详解(Docker Registry)

本片文章主要是对docker的镜像仓库进行了详解。其中包含了一些常用了 docker 指令&#xff0c;通过举例进行详解。也详细解释了镜像仓库的工作机制和常见的镜像仓库。也实际拉去和运行了一些镜像。希望本篇文章会对你有所帮助&#xff01; 文章目录 一、什么是Docker Registry …

jQuery图片放大缩小旋转预览代码

jQuery图片放大缩小旋转预览代码-遇见你与你分享

基于SpringBoot的在线考试系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化管理。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经验能起到不少的促进作用。 在线考试系统能够通…

独立看门狗与窗口看门狗

一、简介 STM32F10xxx内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给定的超时值时&#xff0c;触发一个中断(仅适用于窗口型看门狗)或产…

FindMy技术用于鼠标

鼠标是计算机的标准配置之一&#xff0c;其设计初衷是为了使计算机的操作更加简便快捷&#xff0c;减少用户在操作中的负担。用户可以通过移动鼠标&#xff0c;实现光标的精确移动&#xff0c;进而选择、拖拽、复制、粘贴等操作。这种操作方式&#xff0c;使得计算机的操作变得…

小程序测试和APP测试的区别

今天看了一下关于如何测试小程序的教学视频&#xff0c;里面讨论了一个很经典的面试题&#xff1a;小程序测试和APP测试的区别&#xff0c;包括在之前的面试过程中也确实是遇到过这个问题&#xff0c;所以这次打算把它记录下来&#xff0c;也算是知识巩固了。 首先从测试的内容…

2023年终总结,被裁员

在一个睡意朦胧的早上&#xff0c;我被闹钟惊醒&#xff0c;原来今天已经是2024年1月1日了&#xff0c;2023年平平无奇的结束了&#xff0c;唯一让我感触波深的事情是我在二月份的裁员名单里面。2024加油&#xff01;&#xff01;&#xff01; 工作上的总结 回顾2023&#xf…

本地监控jar包可视化性能数据

一、机器申请 二、maven项目jar打包 三、机器性能监控 1.jdk版本配置 本地下载的机器虽自带jdk&#xff0c;但是jdk版本过低&#xff0c;需重新安装jdk 参考&#xff1a; Linux系统安装JDK1.8 详细流程_linux安装jdk1.8-CSDN博客 2.jvm参数修改 需修改jvm堆内存 栈内存信…

Linux基础——进程初识(三)

1. 进程优先级 首先我们要知道&#xff0c;进程优先级是操作系统用来确定多个进程同时运行时&#xff0c;哪个进程会获得更多CPU时间片的相对重要性或优先级的评估。他和权限的区别在于权限决定了能不能访问资源&#xff0c;而优先级是在能访问资源的前提下&#xff0c;决定了…