【详解】篮球记分牌硬件及代码
篮球记分牌设计
- 1 系统设计
- 1.1 设计任务
- 1.2 性能指标要求
- 1.2 设计思路及设计框图
- 1.2.1设计思路
- 1.2.2总体设计框图
- 1.2.3电路原理图
- 1.2.3 PCB布线图
- 2 主要程序模块的设计及原理
- 2.1 外部中断0
- 2.2 菜单
- 2.3 两队比分及两队犯规次数显示及修改
- 2.3.1选择功能
- 2.3.2修改功能
- 2.3.3显示功能
- 2.4 24秒倒计时
- 2.4.1 T0计时器
- 2.4.2 24秒倒计时显示/复位/暂停
- 3 调试过程
- 3.1 硬件
- 3.1.1 实物正面
- 3.1.1 实物背面
- 3.2 软件
- 4 功能测试
- 4.1 测试仪器与设备
- 4.2 性能指标测试
- 附录2:程序清单
1 系统设计
1.1 设计任务
设计一个基于单片机的篮球计分牌,实现两队的计分和犯规次数功能及24秒计时功能。
1.2 性能指标要求
(1)按照题目要求独立设计系统所需电路,并完成硬件电路的制作及调试。
(2)结合硬件能够正常计分(1,2,3)。
(3)能够正常显示分值。
(4)能够正常修改工作模式(计分与24秒)。
(5)能够24秒的误差不小于1秒。
(6)能够两队球员犯规次数计数。
1.2 设计思路及设计框图
1.2.1设计思路
(1)了解设计要求后,查询各元件的特性及使用方法。
(2)查找类似实验资料,吸收其设计经验。
(3)由于本次下发的是万能板,需要己排版并焊接。为焊接电路我决定先用制图软件进行排版,绘制结束门根据电路图直按焊接即可。
(4)焊接结束后测试数码管显示。
(5)对拓展功能进行设计及实现,增加犯规和比分减减的功能并有Led灯指示操作。
1.2.2总体设计框图
1.2.3电路原理图
1.2.3 PCB布线图
2 主要程序模块的设计及原理
2.1 外部中断0
由于菜单的切换可能发生在任意地方,所以采用中断切换的方式能更快捷。与P3_2连接的按钮每按一次会触发一次外部中断0,IN0_num也随之++,但IN0_num到达3后会变为0,使IN0_num数值范围始终在0~2;(每个值对应一个功能)
当触发外部中断0且P3_5 状态为 0 则两队比分及犯规次数在LED上左右显示位置交换(模拟换场地)
2.2 菜单
当IN0_num为0时进入两队比分显示及调整功能
当IN0_num为1时进入两队犯规次数显示及调整功能
IN0_num为2时进入24秒倒计时功能
2.3 两队比分及两队犯规次数显示及修改
2.3.1选择功能
该函数是可以复用的:
1:当执行两队比分显示或修改时给queue_Ajusth()函数传两队比分变量的地址及数字0即可
2:当执行两队犯规次数显示或修改时给queue_Ajusth()函数传两队犯规次数变量的地址及数字1即可
如何复用及复用之间的差异:
1:函数参数c1传0或1用于分辨当前执行的时两队比分显示或修改还是两队犯规次数显示或修改,c1为0时操作指示灯常亮,c1为1时指示灯闪烁
2:P3_6按钮每按一次pat变量加一,当始终是在0~1循环,0时实验板上左边操作指示LED灯会发出指示行为,0时右边操作指示LED灯会发出指示行为
3:当左边LED灯发出指示行为时,按下修改按键后修改的的是左边数码管对应的值,当有边LED灯发出指示行为时,按下修改按键后修改的的是右边数码管对应的值
2.3.2修改功能
原理:
在2.3.1中的queue_Ajusth()函数对要修改的变量进行了选择,将变量地址传送给Score()函数。
功能:
1:P3_1/P3_3/P3_4所接的按钮被按下,对应对要修改的变量进行加1/2/3
2:P3_1/P3_3/P3_4所接的按钮被按下与P3_5一同被按下时,对应对要修改的变量进行减1/2/3
3:由于数码管两位显示一个值,所以所显示的值超过99时会显示异常,所以当执行加操作后值超过99,将忽略该操作
4:由于比分及犯规次数没有负数,所以当执行减操作后值小于0,将忽略该操作
2.3.3显示功能
原理:
LED函数传要显示的位和段码数组的下标即可,如Led(1,6),表示在数码管第一位显示6
2.4 24秒倒计时
2.4.1 T0计时器
原理:
1:由于24秒倒计时,时需显示两位小数分辨率为10ms所以T0定时器每10ms触发一次中断,使用T0_num计数,当达到100时说明以达到一秒,time_24变量减减,大概到-1后计时结束
2:24秒计时结束后,P1_0连接的蜂鸣器发声(模拟哨声)
3:每次24秒倒计时结束后TR0会被置零,需按复位键后才能启动计时器
2.4.2 24秒倒计时显示/复位/暂停
功能:
1:显示24秒倒计时是当前所剩时间
2:P3_6所连接按键被按下时对倒计时进行暂停或启动
3:P3_5所连接按键被按下时对时间进行复位,使其回到24秒,并将TR0置零需按下启动/暂停间才能启动倒计
3 调试过程
3.1 硬件
1:由于S8050三极管的不熟悉,一开始焊接好后蜂鸣器处于不可控状态,查找资料时发现自己集电极和发射极接反了,改进后蜂鸣器才正常运行
2:LED灯由于是临时改变位置(因为是操作指示灯改在图中位置,能更好指示操作),导致LED不跳线的情况下只能采用共阴接法。但是所使用的8052复位后I/O口默认为高电平,复位后不处理的话LED默认为亮的状态。
3.1.1 实物正面
3.1.1 实物背面
3.2 软件
1:由于复位后LED默认为亮的状态,所以程序一开始就要给LED置对应电平以达到LED的正确显示
2:一开始24秒倒计时分辨率只有秒,后面思考后数码管一共有四位前两位显示十秒和秒,后两位可以用来显示100ms和10ms
2:由于篮球比赛时间过半后,会交换双方场地也就意味着比分和犯规数的左右显示也要交换。我通过交换双方比分及犯规变量的值来达到,场地交换后比分及犯规数后的显示。
4 功能测试
4.1 测试仪器与设备
开发板USB转串口CH340驱动
STC-ISP单片机下载器
STC89C52单片机1个
1K电阻1个10K电阻2个
30u电容2个
LED二极管3个
晶振原件1个
电解质电容1个
锡线、排针导线若干
笔记本电脑一台
4.2 性能指标测试
(1)结合硬件能够正常显示分值且能够正常计分(1,2,3)。
(2)能够正常修改工作模式(计分与24秒)。
(3)能够实现24秒的误差不小于1秒。
(4)能够显示两队球员犯规次数计数。
(5)半场交换场地后,对应数据的显示也左右交换
(4)能控制蜂鸣器及为防止误触后比分不可逆,实现比分及犯规数的减功能
附录2:程序清单
#include <AT89X51.H>
sbit ALM = P1^0; //警报char queue_1 = 0, queue_2 = 0;//两队分数char war_1 = 0 , war_2 = 0;//两队犯规数char IN0_num = 0,T0_num = 0 , T1_num = 0,time_24 = 24 , p10 = 0, pat = 0 , cur = 0;unsigned char arr[] = {0x5f , 0x44 , 0x9d, 0xd5 , 0xc6, 0xd3 , 0xdb , 0x45 , 0xdf ,0xd7 ,0x20 };//最后一个是dp小数点
void delay(unsigned int n)
{unsigned int i , j;for( i = 0 ; i < n ; i++){for(j = 0 ; j < 200 ; j++);}
}
void IN0_Init()
{EA = 1 ; EX0 = 1; IT0 = 1;//外部中断0下降沿触发
}void T0_Init()
{TMOD &= 0xf0; TMOD |= 0x01;//清第四位,并设置T0工作方式1ET0 = 1; TR0 = 0;//开启T0TH0 = (65536 - 10000)%256;TH0 = (65536 - 10000)/256;
}void T1_Init()
{TMOD &= 0x0f; TMOD |= 0x10;//清第四位,并设置T0工作方式1ET1= 1; TR1 = 1;//开启T0TH1 = (65536 - 10000)%256;TH1 = (65536 - 10000)/256;
}void IN0_fun()interrupt 0
{IN0_num++;P1_0 = 1;delay(100);P1_0 = 0;//每次切换菜单发出提示音if(P3_5 == 0)//两队数据交换{IN0_num--;P0 = 0x00;P1_0 = 1;delay(70);P1_0 = 0;delay(70);P1_0 = 1;delay(70);P1_0 = 0;//声音提醒cur = queue_1;queue_1 = queue_2;queue_2 = cur;//交换比分左右位置cur = war_1;war_1 = war_2;war_2 = cur;//交换犯规次数左右位置}if(IN0_num == 3)//数值控制在0~2{IN0_num = 0;}
}
void T1_fun()interrupt 3 //中断号3 , 默认使用第0组寄存器
{T1_num++;if(T1_num == 100 ){T1_num = 0;}TH1 = (65536 - 10000)/256;TL1 = (65536 - 10000)%256;
}
void T0_fun()interrupt 1 //中断号1 , 默认使用第0组寄存器
{T0_num++;if(T0_num == 100 ){T0_num = 0;time_24--;if(time_24 == -1){time_24 = 0;P1_0 = 1;p10 = 1;TR0 = 0;//完成一次计时后暂停计时}}TH0 = (65536 - 10000)/256;TL0 = (65536 - 10000)%256;
}
#include"Interrupt.h"
void add(char* num , char i)
{*num += i;
}
void sub(char* num , char i)
{*num -= i;
}
void Led(unsigned int wei ,unsigned int duan )
{char sub = 0x10;P2 = ~(sub<<wei);P0 = arr[duan];//位选delay(1);
}
void Score(char* num )
{if(P3_1 == 0 && (P3_5 == 1 && *num < 99)){while(P3_1 == 0);add(num , 1);//加1分}else if(P3_3 == 0 && (P3_5 == 1 && *num < 98)){while(P3_3 == 0);add(num , 2);//加1分}else if(P3_4 == 0 && (P3_5 == 1 && *num < 97)){while(P3_4 == 0);add(num , 3);//加1分}if(P3_1 == 0 && (P3_5 == 0 && *num > 0)){while(P3_1 == 0);sub(num , 1);//减1分}else if(P3_3 == 0 && (P3_5 == 0 && *num > 1)){while(P3_3 == 0 );sub(num , 2);//减1分}else if(P3_4 == 0 && (P3_5 == 0 && *num > 2)){while(P3_4 == 0);sub(num , 3);//减1分}
}
void time_fun()
{char _T0 = (100 - T0_num);Led(0 , time_24/10);Led(1 , time_24%10);Led(1 , 10 );//小数点Led(2 , (_T0/10)%10 );//100%10会出现10,段码错误Led(3 , _T0% 10);if(P3_5 == 0)//复位{p10 = 0;P1_0 = 0;TR0 = 0;T0_num = 0;time_24 = 24;while(P3_5 == 0);}if(P3_6 == 0 && p10 != 1 )//暂停{if(time_24 == 24){time_24 = 23;}TR0 = ~TR0;while(P3_6 == 0);delay(15);}}
void queue_Ajust(char* num1 , char* num2 ,char c1)//c1 为0为比分 , 1为犯规
{if(pat == 0)//默认为左调整{Score(num1);P1_1 = 0;if(c1 == 0) P1_2 = 1;else P1_2 = (T1_num < 50);}else{Score(num2); P1_2 = 0;if(c1 == 0) P1_1 = 1;else P1_1 = (T1_num < 50);}if(P3_6 == 0)//左右位选择{while(P3_6 == 0);pat = (pat+1)%2;//控制在0 ~ 1}/// 数码管显示Led(0 , *num1/10);//队1比分/犯规次数十位Led(1 , *num1%10);//队1比分/犯规次数个位Led(2 , *num2/10);//队2比分/犯规次数十位Led(3 , *num2%10);//队2比分/犯规次数个位
}void main()
{ALM = 0;//高电平响T0_Init();IN0_Init();T1_Init();while(1){if(IN0_num == 0)//比分加/减{queue_Ajust( &queue_1 , &queue_2 ,0 );}else if(IN0_num == 1)//犯规次数加/减{queue_Ajust( &war_1 , &war_2 ,1 );}else if(IN0_num == 2)//倒计时{P1_1 = 0;P1_2 = 0;time_fun();}}
}
相关文章:
【详解】篮球记分牌硬件及代码
篮球记分牌设计 1 系统设计1.1 设计任务 1.2 性能指标要求1.2 设计思路及设计框图1.2.1设计思路1.2.2总体设计框图1.2.3电路原理图1.2.3 PCB布线图 2 主要程序模块的设计及原理2.1 外部中断0 2.2 菜单2.3 两队比分及两队犯规次数显示及修改2.3.1选择功能2.3.2修改功能2.3.3显示…...
FreeRTOS实时操作系统(二)系统文件代码学习
文章目录 前言系统配置任务创建任务创建删除实践 前言 接着学习正点原子的FreeRTOS教程,涉及到一些详细的系统内文件代码 系统配置 可以通过各种的宏定义来实现我们自己的RTOS配置(在FreeRTOSconfig.h) “INCLUDE”:配置API函数…...
分布式驱动电动汽车定速巡航控制
目录 前言 1. 电机模型 1.1电机数学模型 1.2 电机传递函数模型 2. 控制器设计...
如何启动和关闭分布式集群
分布式集群是由多个节点组成的系统,可以提供高性能、高可用、高扩展的数据处理能力。本文介绍如何启动和关闭一个包含hadoop、zookeeper、hbase和spark的分布式集群。 目录 启动顺序 关闭顺序 启动和关闭hadoop 启动hadoop 关闭hadoop 查看网页 启动和关闭z…...
WLAN基本概述及简单组网配置
WLAN概述 WLAN即Wireless LAN(无线局域网),是指通过无线技术构建的无线局域网络。WLAN广义上是指以无线电波、激光、红外线等无线信号来代替有线局域网中的部分或全部传输介质所构成的网络。 家庭WLAN产品: 家庭Wi-Fi路由器:通过把有线网络信号转换成无线信号,供家庭电…...
响应式Web设计单元测试
响应式Web设计单元测试 一. 单选题 (共8题,40.0分)二. 多选题 (共5题,25.0分)三. 判断题 (共7题,35.0分) 一. 单选题 (共8题,40.0分) …...
linux计划任务管理
1. crond计划任务概述 什么是计划任务,计划任务类似于我们平时生活中的闹钟。 在Linux系统的计划任务服务crond可以满足周期性执行任务的需求。 crond进程每分钟会处理一次计划任务, 计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据 Schedule on…...
研一,有点迷茫。
作者:阿秀 校招八股文学习网站:https://interviewguide.cn 这是阿秀的第「277」篇原创 小伙伴们大家好,我是阿秀。 最近回答了不少大一大二研一在读的学习圈中学弟学妹的咨询问题,基本都是计算机学习、进度、疑惑等等相关的问题&a…...
【新版】系统架构设计师 - 软件工程
个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 软件工程考点摘要软件工程概述软件能力成熟度模型软件过程模型瀑布模型原型化模型增量模型螺旋模型喷泉模型V模型迭代与增量的概念CBSD基于构件的模型(构件组装模型/基于构件的软件开发…...
html实现好看的个人介绍,个人主页模板3(附源码)
文章目录 1.设计来源1.1 主界面1.2 关于我界面1.3 教育成就界面1.4 项目演示界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.2 源代码目录 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131263195 …...
某大厂工作3年,被劣驱良了。。。
最近在知乎上看到一个问题:编程界的劣驱良现象有哪些? 要想回答这个问题,首先要定义清楚,什么是「劣」什么是「良」? 如果你认为编程技术牛x就是「良」,编程技术差就是「劣」,那可以清楚的回答…...
爱奇艺大数据加速:从Hive到Spark SQL
01 导语 爱奇艺自2012年开展大数据业务以来,基于大数据开源生态服务建设了一系列平台,涵盖了数据采集、数据处理、数据分析、数据应用等整个大数据流程,为公司的运营决策和各种数据智能业务提供了强有力的支持。随着数据规模的不断增长和计算…...
c++构造函数的多个细节拷问
提问1 能在 构造函数里面调用 虚函数吗? 调用的 是这个类自己的 虚函数吗? 这个问题 等价于 虚函数表什么时候形成的? 回答1 答:在构造函数里面 可以调用虚函数哈 不过是父类的 子类对象还没有创建完成 所以 尽量不要在 构造里…...
Redis入门 - Lua脚本
原文首更地址,阅读效果更佳! Redis入门 - Lua脚本 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-scription.html Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 …...
Creating Serial Numbers (C#)
此示例展示如何使用Visual C#编写的Add-ins为文件数据卡生成序列号。 注意事项: SOLIDWORKS PDM Professional无法强制重新加载用.NET编写的Add-ins,必须重新启动所有客户端计算机,以确保使用Add-ins的最新版本。 SOLIDWORKS PDM Professio…...
pycharm使用之torch_geometric安装
正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR ,输入cmd 2、输入python 3、 输入import torch,然后输入torch.__version__,最后回车 可以看到我的torch版本是1.10.0 二、下载合适的版本 1、打开链接 https://pytorch-…...
spring-mvc 工作流程
一、概述 spring-mvc 主要是DispatcherServlet工作流程流程可以分为两块,第一块为DispatcherServlet的加载,第二块为请求处理 二、DispatcherServlet的加载 主要依靠三个对象 DispatcherServletRegistrationBean:实现了ServletContextInit…...
物联网Lora模块从入门到精通(六)OLED显示屏
一、前言 获取到数据后我们常需要在OLED显示屏上显示,本文中我们需要使用上一篇文章(光照与温湿度数据获取)的代码,在其基础上继续完成本文内容。 基础代码: #include <string.h> #include "board.h" #include "hal_ke…...
平面坐标变换(单应性变换/Homography变换)
单应性(homography)变换用来描述物体在两个平面之间的转换关系,可以用于描述平移、翻转、缩放、旋转、仿射变换等。其是对应齐次坐标下的线性变换,可以通过矩阵表示: 其中,H为单应性变换矩阵,假设变换前坐标为(x,y)&am…...
大数据项目常识
大数据项目 随着社会的进步,大数据的高需求,高薪资,高待遇,促使很多人都来学习和转行到大数据这个行业。学习大数据是为了什么?成为一名大数据高级工程师。而大数据工程师能得到高薪、高待遇的能力在哪?自…...
Linux系统:常用服务端口
目录 一、理论 1.端口分类 2.传输协议 3.常用端口 一、理论 1.端口分类 一个计算机最多有65535个端口,端口不能重复。Linux 只有 root 用户可以使用1024以下的端口。 表1 端口分类 端口范围说明公认端口(Well-KnownPorts)0 - 1023这类…...
前端和后端分别是什么?
从技术工具来看: 前端:常见的 html5、JavaScript、jQuery... 后端:spring、tomcet、JVM,MySQL... 毕竟,如果这个问题问一个老后端,他掰掰手指可以给你罗列出一堆的名词来,比如设计模式、数据库…...
Spring基础知识(一)
目录 1.Spring Framework 2.Spring Framework优点 3.Spring Framework的功能模块 4.Spring配置文件 5.Spring应用配置步骤 6.Spring的IoC是什么 7.IoC的理念 8.IoC体系的好处 9.Spring中的 IoC 容器 10.依赖注入的方式 1.Spring Framework Spring Framework即Spring框…...
易语言使用node编译的js文件
环境配置 npm install -g cnpm babel-preset-env babel-cli babel-polyfill browserifynpm install -g crypto-js nodejs转js 例如加密模块 browserify -r babel-polyfill -r crypto-js -o es6.txt browserify file.js -o es6.txt易语言 使用v8 推荐 直接生成导入js即…...
计算机网络笔记:动态主机配置协议(DHCP)
协议配置: 为了把协议软件做成通用和便于移植的,协议软件的编写者不会把所有的细节都固定在源代码中,相反,他们把协议软件参数化,这就使得在很多台计算机上有可能使用同一个经过编译的二进制代码。一台计算机和另一台…...
新买的电脑怎么用U盘重装系统?新买的电脑用U盘重装系统教程
新买的电脑怎么用U盘重装系统?用户新买了电脑,想知道怎么用U盘来重装新买的电脑,用U盘来重装电脑其实非常简单,用户需要准备一个U盘,然后完成U盘启动盘的安装,接着按照以下分享的新买的电脑用U盘重装系统教…...
图像边缘检测原理
文章目录 图像边缘检测原理1:2:3:基本边缘检测算子 图像边缘检测原理 1: 图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的…...
爬虫利器 Beautiful Soup 之遍历文档
Beautiful Soup 简介 Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,它提供了一些简单的操作方式来帮助你处理文档导航,查找,修改文档等繁琐的工作。因为使用简单,所以 Beautiful Soup 会帮你节省不少的工…...
12、Nginx高级之高级模块(secure_link/secure_link_md5)
一、功能 防盗链; ngx_http_secure_link_module模块用于检查所请求链接的真实性,保护资源免受未经授权的访问,并限制链接寿命。 该模块提供两种可选的操作模式。 第一种模式由 secure_link_secret 指令启用,用于检查所请求链接的真…...
【python】数据可视化,使用pandas.merge()对dataframe和geopandas类型数据进行数据对齐
目录 0.环境 1.适用场景 2.pandas.merge()函数详细介绍 3.名词解释“数据对齐”(来自chatGPT3.5) 4.本文将给出两种数据对齐的例子 1)dataframe类型数据和dataframe类型数据对齐(对齐NAME列); 数据对…...
互联网网站seo优化/广州网站设计制作
Rsync安装配置昨天由于部门研发同事要做个小项目,要我提供一份rsync的安装配置文档,就简单了写了份,顺便发出来了。1, 测试环境:CentOS release 5.8 2.6.18-308.el5 x86_64IP_S: 192.168.104.137IP_C: 192.168.…...
WordPress企业显示/江苏seo和网络推广
"""1.三级菜单 注册 登陆 注销2.进入每一个一级菜单,都会有下一级的菜单"""user_item dict()try:while True:print(-------Welcome sir-------)input_choice int(input(Please enter your choice:1:Registration 2:login 3:logout:…...
自己怎么做百度网站/深圳网站seo推广
迎接县均衡化国家验收学校解说词办学条件组尊敬的各位专家、各位领导:欢迎莅临我校检查指导工作。我们宁津县第二实验小学始建于1997年,是一所县属非寄宿完全小学。当时只有北面这一座楼,29名教师。2012年秋季扩建,建成南面这座教…...
设计小程序多少钱/seo推广小分享
Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去。传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口。0、解释两种接口:1)实…...
网站关键词排名/今日热搜榜
折纸王子帮你找折纸图解你好,我是折纸王子,欢迎来到我的公众号。折纸王子教你折纸,讲解详细,演示清楚,容易听懂,一学就会。往期精彩:圣诞节剪纸折纸大全43款万圣节折纸大全专辑 29款折纸张口霸王…...
怎么做游戏网站/免费注册网站有哪些
C语言系列之 内存操作—5459人已学习 课程介绍 尹成老师带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件…...