51单片机编程应用(C语言):篮球比赛计分器

设计思路

1.LCD1602显示A 000:B 000     右下角显示24的数字,显示一节时间12:00.

2.规定矩阵键盘每一位表示的含义

s1按下,A队加一分     s2按下,A队加两分   s3按下,A队加三分    s4按下,A队减一分

如果加错了,减分修改错误计分,一分一分修改。

s5按下,B队加一分     s6按下,B队加两分   s7按下,B队加三分    s8按下,B队减一分

如果加错了,减分修改错误计分,一分一分修改。

S9:    控制比赛计时时间,第一次按下,比赛开始,再一次按下,时间暂停。(篮球比赛是不是可以叫暂停,暂停时比赛时间是不能计时的)

S10: 按下24秒重新开始计时(暂停时,我想要变回24s)

3.定时器中断,控制24秒一秒一秒减。,一节时间也是一秒一秒的减少。12:00—11:59—10:00—09:59.........

4.篮球比赛进球了,此时24秒无论计时到多少是不是要重新变成24秒。也就是S1--S8按下,24秒重新计时。

看一下任务要求:

 具体任务要求:

1、能显示2个队的当前比分;(完成)

2、根据各自得分情况进行加1、2、3分,可按键修改错误计分(如2分被计为3分);(完成)

3、显示当前进攻队的进攻时间倒计(24秒);(完成)

4、计时归零时候,鸣响。(要用蜂鸣器)(完成一半)24秒计完时会鸣叫,但是时间计完时加入蜂鸣器鸣叫后出现了问题,很奇怪的bug,直接加了00在秒个后面,所以这一部分我暂时没有添加,后面我再想清楚原因弄好后再添加。

蜂鸣器

 根据蜂鸣器发声方式不同,主要分为压电式(无源)和电磁式(有源)。同时根据蜂鸣器结构,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器自带震荡电路,接通电源即可发声。无源没有震荡电路

振荡器电路的作用:产生脉冲信号。

无源蜂鸣器 需要提供一定频率的脉冲信号才能发声,频率一般在 1.5-5KHZ

通过调节脉冲频率可改变音调(音色),通过改变高低电平占空比可以调节音量。

51单片机使用的是无源蜂鸣器。

蜂鸣器原理图

通过C51芯片的P15引脚持续输出脉冲信号(即高低电平交替),经过ULN2003D芯片放大电流从BEEP引脚输出到蜂鸣器即可发声 

注意P2^5引脚同时控制着LED6,当脉冲信号在一定频率时,可以观察到LED6的闪烁,这就是为什么在LED实验中会有滴答滴答的声音。

实验:

让蜂鸣器发出声音,一段时间后再关闭,即让管脚输出一定频率的脉冲信号(高低电平)控制无源蜂鸣器。

代码如下:

#include <REGX52.H>typedef unsigned char u8;
typedef unsigned int u16;sbit BEEP=P2^5;void delay_10us(u16 i)//i为1时,大约延时10us
{while(i--);
}void main()
{u16 i=2000;while(1){while(i--){BEEP=!BEEP;delay_10us(100);}i=0;//结束循环BEEP=1;//关闭第六个LED}
}

篮球计分器总代码

main.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Timer0.h"
sbit BEEP=P2^5;
unsigned char number=24;//24秒倒计时
unsigned char min_shi=1;    //一节12分钟,分钟的十位
unsigned char min_ge=2 ;   //一节12分钟,分钟的个位
unsigned char miao_shi=0 ;   //一节12分钟,秒钟的十位
unsigned char miao_ge=0;    //一节12分钟,秒钟的个位
unsigned char keyNumber;    //接收矩阵键盘返回的值
unsigned char score_A;    //A队的分数,3位
unsigned char score_B;    //B队的分数,3位
unsigned char Mode=1;    //Mode=1,比赛暂停,Mode=0,比赛开始。
unsigned int i=2000;    //蜂鸣器报警时长。
void main()
{Timer0Init();LCD_Init();LCD_ShowChar(1,1,'A');LCD_ShowChar(1,2,' ');LCD_ShowChar(1,6,':');LCD_ShowChar(1,7,'B');LCD_ShowChar(1,8,' ');LCD_ShowChar(2,3,':');while(1){keyNumber=MatrixKey();LCD_ShowNum(1,3,score_A,3);LCD_ShowNum(1,9,score_B,3);LCD_ShowNum(2,15,number,2);LCD_ShowNum(2,1,min_shi,1);LCD_ShowNum(2,2,min_ge,1);LCD_ShowNum(2,4,miao_shi,1);LCD_ShowNum(2,5,miao_ge,1);if(keyNumber){if(keyNumber==1)//s1按下,A队加一分{score_A++;number=24;LCD_ShowNum(1,3,score_A,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==2)//s2按下,A队加两分{score_A=score_A+2;number=24;LCD_ShowNum(1,3,score_A,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==3)//s3按下,A队加三分{number=24;score_A=score_A+3;LCD_ShowNum(1,3,score_A,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==4)//s4按下,A队减一分   如果加错了,减分修改错误计分,一分一分修改{score_A=score_A-1;LCD_ShowNum(1,3,score_A,3);//更新显示}if(keyNumber==5)//s1按下,B队加一分{number=24;score_B++;LCD_ShowNum(1,9,score_B,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==6)//s2按下,A队加两分{number=24;score_B=score_B+2;LCD_ShowNum(1,9,score_B,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==7)//s3按下,A队加三分{number=24;score_B=score_B+3;LCD_ShowNum(1,9,score_B,3);//更新显示LCD_ShowNum(2,15,number,2);//更新显示}if(keyNumber==8)//s3按下,A队减一分   如果加错了,减分修改错误计分,一分一分修改{score_B=score_B-1;LCD_ShowNum(1,9,score_B,3);//更新显示}if(keyNumber==9){Mode++;if(Mode>=2)Mode=0;}if(keyNumber==10){number=24;LCD_ShowNum(1,9,score_B,3);//更新显示}}}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=1000)	//定时器分频,1s{T0Count=0;//number=number-1;if(Mode==0){if(number==0){number=25;while(i--){BEEP=!BEEP;Delay(1);}i=2000;BEEP=1;//关闭第六个LED}number=number-1;if(miao_ge==0){miao_ge=10;if(miao_shi==0){if(min_ge==0){min_shi=0;  min_ge=10;}min_ge=min_ge-1;miao_shi=6;}miao_shi=miao_shi-1;}miao_ge= miao_ge-1;}}
}

除了main函数外,其他函数都是模块化编程好的,都在我写过的易于模块化编程函数里面直接复制粘贴就OK了,如:

实验现象我会录制视频,请在视频观看 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EAI 014】Gato: A Generalist Agent

论文标题&#xff1a;A Generalist Agent 论文作者&#xff1a;Scott Reed, Konrad Zolna, Emilio Parisotto, Sergio Gomez Colmenarejo, Alexander Novikov, Gabriel Barth-Maron, Mai Gimenez, Yury Sulsky, Jackie Kay, Jost Tobias Springenberg, Tom Eccles, Jake Bruce,…

【C++】多态语法概念

目录 一、概念及定义二、虚函数重写的特例三、final和override四、抽象类 一、概念及定义 概念&#xff1a;在继承关系下的不同类&#xff0c;调用同一个函数&#xff0c;产生不同的行为&#xff0c;叫作多态。 图示&#xff1a; 定义&#xff1a;必须通过基类的指针或者引…

Linux基础-文件层次结构

1./ 1.根&#xff0c;理解为Windows的C盘 2.目录的分隔符 /dir1/dir2&#xff0c;根目录下有个dir1目录&#xff0c;在dir1目录下有个dir2的目录 2./etc 1.装软件&#xff08;rpm方式&#xff09;所在的路径 2.重要的Linux配置文件 3./boot 引导Linux系统有关的内核kernel…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展&#xff1a;解析技术演进与应用前景 深度学习&#xff0c;作为人工智能领域的一颗璀璨明珠&#xff0c;一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移&#xff0c;深度学习不断迎来新的进展&#xff0c;这不仅推动了技术的演进&#xff0c;也…

为什么电能难以存储

为什么电能难以存储 电能是动态的过程性能源&#xff0c;不像石油、煤、天然气等含能体能源&#xff0c;故不能直接储存&#xff0c;而是通过电力网实现生产、输送和消纳同步进行&#xff0c;通过自动及人工调节实现供需平衡&#xff0c;用多少生产多少。 就是由于电能是动态…

对话模型Demo解读(使用代码解读原理)

文章目录 前言一、数据加工二、模型搭建三、模型训练1、构建模型2、优化器与损失函数定义3、模型训练 四、模型推理五、所有Demo源码 前言 对话模型是一种人工智能技术&#xff0c;旨在使计算机能够像人类一样进行对话和交流。这种模型通常基于深度学习和自然语言处理技术&…

深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)

Elasticsearch&#xff0c;作为当下最流行的开源搜索和分析引擎之一&#xff0c;其内部的数据结构和存储机制对于确保高效搜索和快速响应查询至关重要。在这其中&#xff0c;列存储&#xff08;Doc Values&#xff09;扮演了一个核心角色。本文将深入探讨Doc Values是什么、它们…

HTTP 超文本传送协议

1 超文本传送协议 HTTP HTTP 是面向事务的 (transaction-oriented) 应用层协议。 使用 TCP 连接进行可靠的传送。 定义了浏览器与万维网服务器通信的格式和规则。 是万维网上能够可靠地交换文件&#xff08;包括文本、声音、图像等各种多媒体文件&#xff09;的重要基础。 H…

HarmonyOS 开发学习笔记

HarmonyOS 开发学习笔记 一、开发准备1.1、了解ArkTs语言1.2、TypeScript语法1.2.1、变量声明1.2.2、条件控制1.2.3、函数1.2.4、类和接口1.2.5、模块开发 1.3、快速入门 二、ArkUI组件2.1、Image组件2.2、Text文本显示组件2.3、TextInput文本输入框组件2.4、Button按钮组件2.5…

json模块(高维数据的存储与读取)

json模块是 Python 标准库中的一个模块&#xff0c;用于处理 JSON&#xff08;JavaScript Object Notation&#xff09;格式的数据。JSON是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。模块提供了在 Python 中进行 JSON 编码&…

开源个人订阅跟踪器Wallos

本文软件由网友 P家单推人 推荐&#xff1b; 什么 Wallos &#xff1f; Wallos 是一款功能强大、开源且可自我托管的网络应用程序&#xff0c;旨在让您轻松管理财务。告别复杂的电子表格和昂贵的财务软件–Wallos简化了跟踪费用的过程&#xff0c;帮助您更好地控制财务生活。 软…

C++ | KMP算法模板

next数组初始化 char a[1000006];//原串 char p[1000006];//子串 int pmt[1000006];void getNext(int m){int j0;pmt[0]0;for(int i1;i<m;i){while(j>0 && p[i]!p[j])jpmt[j-1];if(p[i]p[j])j;pmt[i]j;} }以下实例基于上述getNext函数及数据结构执行&#xff1a…

java实战:生成会议通知Word文件

本文将介绍如何使用Java和Apache POI库来生成包含标题、正文、时间、会议地点、参会人等信息的会议通知Word文件。包含如何设置文本格式、添加标题和段落&#xff0c;以及如何将生成的Word文件保存到磁盘。看完这篇文章&#xff0c;可以掌握使用Java操作Word文档的基本技能。 …

DockerPodman save

DockerPodman save docker image save docker save docker image save 参数只有一个 -o 或 --output ,后接输出文件, 也可以写成 > , 但> 输出文件只能写在最后 , -o和--outpu可以写在前面也可以写在后面 用途: 将Image镜像保存为tar文件 为标准输出流生成一个 tar…

LeetCode---383周赛

题目列表 3028. 边界上的蚂蚁 3029. 将单词恢复初始状态所需的最短时间 I 3030. 找出网格的区域平均强度 3031. 将单词恢复初始状态所需的最短时间 II 一、边界上的蚂蚁 这题没什么好说的&#xff0c;模拟就行&#xff0c;本质就是看前缀和有几个为0。 代码如下 class S…

Spring Cloud Hystrix 参数配置、简单使用、DashBoard

Spring Cloud Hystrix 文章目录 Spring Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数…

【java】12:封装

面向对象编程三大特征 1.基本介绍 面向对象编程有三大特征&#xff1a;封装、继承和多态。 2.封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&am…

开局一个破碗的故事例子

在一个寒冷的冬日&#xff0c;一个瘦弱的小姑娘拿着一个破碗&#xff0c;孤独地走在被白雪覆盖的街道上。她的名字叫小梅&#xff0c;她的父母早逝&#xff0c;留下她一个人在这个世界上艰难地生活。 小梅的破碗里只有几个铜板&#xff0c;那是她前一天沿街乞讨所得&#xff0c…

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险

林浩然与杨凌云的Java世界奇遇记&#xff1a;垃圾回收大冒险 The Java Adventure Chronicles of Lin Haoran and Yang Lingyun: Garbage Collection Odyssey 在一个充满0和1代码森林的世界里&#xff0c;住着两位勇敢的程序员侠侣——林浩然和杨凌云。林浩然是个身怀Java绝技的…

【vue】axios 如何调用 htttp 接口

安装依赖&#xff1a; npm install core-js导入 core-js &#xff1a; import core-js/modules/web.url-search-params;通过调用 new URLSearchParams &#xff0c;然后 append 来准备好要传入的参数&#xff1a; let param new URLSearchParams() param.append(content, 啦…