【普中开发板】基于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单片机芯片。
以下为本设计资料展示图:
讲解视频:
仿真讲解+代码讲解

2.仿真
开始仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
以上仿真结果均符合设计要求。

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

主要代码
//延时子函数
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);elsewrite_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; //开定时器1TR1=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字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等

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
资料下载链接(可点击):
相关文章:
【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)
基于普中开发板51单片机的篮球计分器液晶LCD1602显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 基于51单片机的篮球计分器液晶LCD1602显示 ( pr…...
按照层次遍历结果打印完全二叉树
按照层次遍历结果打印完全二叉树 按照推论结果: l 层首个节点位置 2h-l - 1l 层节点间距:2h-l1 - 1 编码实现 public static<E> void print(BinaryTree<E> tree) {List<List<Node<E>>> levelNodeList levelOrderTraver…...
基于SpringBoot的药店管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的药店管理系统,java项目…...
Java 泛型深入解析
Java 中的泛型是一种强大的编程特性,允许我们编写更加通用和类型安全的代码。本篇博客将深入探讨 Java 泛型的各个方面,包括泛型类、泛型方法、泛型接口以及泛型通配符。 1. 泛型类 首先,让我们看一个简单的泛型类的例子。在下面的代码中&a…...
Apache Doris (六十): Doris - 物化视图
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录...
【javaweb】tomcat9.0中的HttpServlet
2023年12月28日,周四晚上 目录 什么是HttpServlet tomcat中的HttpServlet由谁产生 什么是HttpServlet 在Tomcat中,HttpServlet 是 Java Servlet API 中的一个抽象类,用于简化基于HTTP协议的Servlet的开发。HttpServlet 扩展了 GenericServ…...
数据结构学习笔记——查找算法中的树形查找(B树、B+树)
目录 前言一、B树(一)B树的概念(二)B树的性质(三)B树的高度(四)B树的查找(五)B树的插入(六)B树的删除 二、B树(一…...
python包chromadb安装失败总结
1,背景: 最近在学习langchain的课程,里面创建自己的知识库的Retrieval模块中,需要用到向量数据库。 所以按照官方的教程(vectorstores),准备使用chroma的向量数据库。图片来源 2,问…...
机器学习(四) -- 模型评估(2)
系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 机器学习(四) -- 模型评估…...
泊松分布与二项分布的可加性
泊松分布与二项分布的可加性 泊松分布的可加性 例 : 设 X , Y X,Y X,Y 相互独立 , X ∼ P ( λ 1 ) X\sim P(\lambda_1) X∼P(λ1) , Y ∼ P ( λ 2 ) Y\sim P(\lambda_2) Y∼P(λ2) , 求证 Z X Y ZXY ZXY 服从参数为 λ 1 λ 2 \lambda_1 \lambda_2 λ1λ2 …...
【PostgreSQL】约束-排他约束
【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 排他约束 排他约束是一种数据库约束,用于确保某一列或多个列中的值在每一条记录中都是唯一的。这意味着任何两条记录都不能具有相同的值。 排他约束可以在数据库中创建唯一索引或唯一约束来实现。当尝试插入或更…...
Java重修第一天—学习数组
1. 认识数组 建议1.5倍速学习,并且关闭弹幕。 数组的定义:数组是一个容器,用来存储一批同种类型的数据。 下述图:是生成数字数组和字符串数组。 为什么有了变量还需要定义数组呢?为了解决在某些场景下,变…...
【C#】知识点实践序列之Lock的锁定代码块
大家好,我是全栈小5,欢迎来到《小5讲堂之知识点实践序列》文章。 2024年第1篇文章,此篇文章是C#知识点实践序列之Lock知识点,博主能力有限,理解水平有限,若有不对之处望指正! 本篇验证Lock锁定代…...
StringBad ditto (motto)
第12章 类和动态内存分配 StringBad ditto (motto): // calls StringBad (comst StringBad &) StringBad metoo - motto: // calls StringBad (const StringBad &) StringBad also StringBad (motto): // calls StringBad (const StringBad &) StringBad * pStri…...
Redis缓存击穿、缓存雪崩、缓存穿透
缓存击穿(某个热点key缓存失效) 概念 缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力增大和缓存雪崩的…...
【PCB专题】Allegro封装更新焊盘
在PCB封装的绘制中,有时会出现需要更新焊盘的情况。比如在制作封装的过程中发现焊盘做的不对而使用PAD_Designer重新更新了焊盘。 那在PCB中如何更新已经修改过的焊盘呢? 打开封装,选择Tools->Padstack->Refresh... 选择Refresh all …...
ES6之Reflect详解
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
文件监控-IT安全管理软件
文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化,防止未经授权的访问和修改,并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动,包括文件的创建、修…...
达梦数据库安装超详细教程(小白篇)
文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…...
复试 || 就业day09(2024.01.04)算法篇
文章目录 前言验证外星语词典在长度 2N 的数组中找出重复 N 次的元素找到小镇的法官查找共用字符数组的相对排序分发饼干分发糖果区间选点(AcWing)最大不相交区间数量(AcWing)无重叠区间关于重写小于号 前言 💫你好,我是辰chen,本文旨在准备考…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
