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

news2024/9/21 18:44:43

设计思路

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.coloradmin.cn/o/1441243.html

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

相关文章

政安晨:快速学会~机器学习的Pandas数据技能(五)(分组和排序)

提升您的洞察力水平&#xff0c;数据集越复杂&#xff0c;这一点就越重要。 概述 映射允许我们逐个值地转换DataFrame或Series中的数据&#xff0c;针对整个列进行操作。然而&#xff0c;通常我们希望对数据进行分组&#xff0c;然后对所在组进行特定操作。 正如你将学到的&a…

Java stream 流的基本使用

Java stream 的基本使用 package com.zhong.streamdemo.usestreamdemo;import jdk.jfr.DataAmount; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.ArrayList; import java.util.Comparator; import java.util.Li…

Flink Checkpoint过程

Checkpoint 使用了 Chandy-Lamport 算法 流程 1. 正常流式处理&#xff08;尚未Checkpoint&#xff09; 如下图&#xff0c;Topic 有两个分区&#xff0c;并行度也为 2&#xff0c;根据奇偶数 我们假设任务从 Kafka 的某个 Topic 中读取数据&#xff0c;该Topic 有 2 个 Pa…

js手写Promise(下)

目录 resolve与reject的调用时机封装优化 回调返回PromiseisPromise手动调用then 微队列catchresolverejectall传入的序列为空传入的值非Promise race完整的Promise代码 如果没有看过上半部分的铁铁可以看看这篇文章 js手写Promise&#xff08;上&#xff09; resolve与reject…

FastAdmin西陆招聘SAAS

应用介绍 基于ThinkPHP和微信小程序开发的招聘平台系统&#xff0c;包含微信小程序求职者端、微信小程序企业招聘端、PC企业招聘端、PC管理平台端 招聘系统是一种利用计算机和网络技术建立起来的具有完整的信息管理、分析和查询功能的人才招聘平台。它主要用于企业、单位、机构…

Python爬虫http基本原理#2

Python爬虫逆向系列&#xff08;更新中&#xff09;&#xff1a;http://t.csdnimg.cn/5gvI3 HTTP 基本原理 在本节中&#xff0c;我们会详细了解 HTTP 的基本原理&#xff0c;了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容&#xff0c;有助于我们进一…

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记&#xff0c;以用来后面回顾。当然如果能帮到和我一样的初学者&#xff0c;那也是不胜荣幸。作为一名初学者&#xff0c;难免有些地方会现错误&#xff0c;欢迎各位大佬指出 预备知识 这里主要介绍pyto…

从0开始学Docker ---Docker安装教程

Docker安装教程 本安装教程参考Docker官方文档&#xff0c;地址如下&#xff1a; https://docs.docker.com/engine/install/centos/ 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest…

MySQL篇之索引

一、定义 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff08;B树&#xff09;&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0…

Python爬虫requests库详解#3

使用 requests 上一节中&#xff0c;我们了解了 urllib 的基本用法&#xff0c;但是其中确实有不方便的地方&#xff0c;比如处理网页验证和 Cookies 时&#xff0c;需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作&#xff0c;就有了更为强大的库 requests&…

Cisco firepower2100系列使用FDM管理FTD

Cisco firepower2100系列使用FDM管理FTD 啥是FDM Firepower Device Manager 当思科Firepower系列运行的FTD镜像时&#xff0c;可以通过2种方式进行管理 第1种方式&#xff1a; FMC (Firepower management Center) 可以进行统一管理&#xff0c;一台FMC可以管理多个FTD&…

深度学习入门笔记(八)可以不断思考的模型:RNN与LSTM

8.1 循环神经网络RNN 之前学到的 CNN 和全连接&#xff0c;模型的输入数据之间是没有关联的&#xff0c;比如图像分类&#xff0c;每次输入的图片与图片之间就没有任何关系&#xff0c;上一张图片的内容不会影响到下一张图片的结果。但在自然语言处理领域&#xff0c;这就成了…

【vue3学习笔记】shallowReactive与shallowRef;readOnly与shallowReadOnly;toRaw与markRaw

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P158节 《shallowReactive与shallowRef》笔记&#xff1a; reactive()与shallowReactive()&#xff1a;reactive()处理后的数据是响应式的&#xff0c;对象内嵌套的深层结构全部是响应式的。shallowReactive()处理后的数据…

蓝桥杯---分小组

9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C .... I 下面的程序列出了所有的分组方法。 该程序的正常输出为:

Guava RateLimiter单机实战指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Guava RateLimiter单机实战指南 前言maven坐标引入业务实现重要参数和方法关于warmupPeriod实战 前言 想象一下你是一位大厨&#xff0c;正在烹饪美味佳肴。突然之间&#xff0c;前来就餐的人潮如潮水…

C语言辨析——声明int a[3][6], a[0][9]越界吗?

本文来源&#xff1a;声明int a[3][6], a[0][9]越界吗&#xff1f; 1. 问题 看下面的程序&#xff1a; #include <stdio.h> int main(void) {int a[3][6];for(int i0; i<3; i) {for(int j0; j<6; j){a[i][j] i * 6 j;}}printf("%d\n",a[0][9]);retu…

Uniapp(uni-app)学习与快速上手教程

Uniapp&#xff08;uni-app&#xff09;学习与快速上手教程 1. 简介 Uniapp是一个跨平台的前端框架&#xff0c;允许您使用Vue.js语法开发小程序、H5、安卓和iOS应用。下面是快速上手的步骤。 2. 创建项目 2.1 可视化界面创建 1、打开 HBuilderX&#xff0c;这是一款专为uni…

【服务器数据恢复】服务器RAID模块硬件损坏的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某品牌服务器中有一组由数块SAS硬盘组建的RAID5磁盘阵列&#xff0c;服务器操作系统是WINDOWS SERVER&#xff0c;服务器中存放企业数据&#xff0c;无数据库文件。 服务器出故障之前出现过几次意外断电的情况&#xff0c;服务器断电…

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…

Lua 教程

Lua 教程 (今天又又又开新坑啦) Lua 教程 手册简介 Lua 是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放。 手册说明 Lua是什么? Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学&#xff08;Pontifical Catholic University of Rio de …