基于PIC单片机篮球计分计时器

一、系统方案
本设计采用PIC单片机作为主控制器,矩阵键盘控制,比分,计时控制,24秒,液晶12864显示。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述
三、单片机软件设计
1、首先是系统初始化

2、液晶显示程序
/********************************************************************************************

  • 函数名称:Lcd_Write_Command()

  • 功 能:写指令代码

  • 入口参数:无

  • 出口参数:无
    */
    void Lcd_Write_Command(uchar temp)
    {
    port=temp;
    rs=0;
    rw=0;
    e=1;
    e=0;
    }
    /

  • 函数名称:Lcd_Write_Byte()

  • 功 能:写数据

  • 入口参数:无

  • 出口参数:无
    *****************/
    void Lcd_Write_Byte(uchar temp)
    {
    port=temp;
    rs=1;
    rw=0;
    e=1;
    e=0;
    }
    /

    *名称:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
    *功能:显示16X8字符(字母)
    *入口参数:
    *出口参数:
    *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
    /
    void Lcd_Character_16X8( uchar bit_flag, uchar x, uchar y, uchar point )
    {
    uchar i , j,temp;
    temp=y;
    if( bit_flag )
    {
    for( i=0; i<2; i++ )
    {
    x+=i;
    y=temp;
    for( j=0;j<8;j++ )
    {
    Lcd_Set_X_Y( x, y ); y++;
    Lcd_Write_Byte( point[ i
    8 + j] );
    }
    }
    }
    else
    {
    for( i = 0; i < 2; i++ )
    {
    x += i;
    y = temp;
    for( j = 0; j < 8; j++ )
    {
    Lcd_Set_X_Y( x, y ); y++;
    Lcd_Write_Byte( ~point[ i * 8 + j ] );
    }
    }
    }
    }
    /

  • 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )

  • 功能:显示16*16字符(汉字)

  • 入口参数:x y data

  • 出口参数:无
    *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
    ****************************************************************************/
    void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar point )
    {
    uchar i,j,temp ;
    temp=y;
    if( bit_flag )
    {
    for( i=0; i<2; i++ )
    {
    x+=i;
    y=temp;
    for( j=0;j<16;j++ )
    {
    Lcd_Set_X_Y( x, y ); y++;
    Lcd_Write_Byte( point[ i
    16 + j] );
    }
    }
    }
    else
    {
    for( i = 0; i<2; i++ )
    {
    x += i;
    y = temp;
    for( j = 0; j < 16; j++ )
    {
    Lcd_Set_X_Y( x, y ); y++;
    Lcd_Write_Byte( ~ point[ i * 16 + j ] );
    }
    }
    }
    }
    3、按键程序
    RD4=0;//第一行赋值低电平
    RD5=1;//其他行赋值高电平
    RD6=1;//其他行赋值高电平
    RD7=1;//其他行赋值高电平
    if(RD00)//判断第一列是否有按键按下
    {
    delay_uint(10);//延时消去按键抖动
    if(RD0
    0)//再次判断按下是否按下
    {
    key_can=0;//按键键盘
    changshu++;//场数加1
    if(changshu>4) changshu=0;//场数大于4,清零
    while(!RD0)//判断按键可释放
    {
    }
    }
    }
    if(RD10)//第二列
    {
    delay_uint(10);//延时消去按键抖动
    if(RD1
    0)
    {
    key_can=1;
    en_flag1=1;
    while(!RD1)
    {

      	}}
    

    }
    if(RD20)//第3列
    {
    delay_uint(10);//延时消去按键抖动
    if(RD2
    0)
    {
    key_can=2;

            en_flag1=0;en_flag2=0;while(!RD2){}}
    

    }
    if(RD30)//第四列
    {
    delay_uint(10);//延时消去按键抖动
    if(RD3
    0)
    {
    key_can=3;
    flag=!flag;//交换场地
    while(!RD3)
    {

      	}}
    

    }
    4、核心算法程序
    /*主程序函数
    ************************************************/
    void main(void)
    {

    TRISD=0x0f;//RD高四位输出,低四位输入
    TRISC=0x00;//输出设置
    TRISB=0x00;//输出设置
    Lcd_Initial(); //LCD初始化
    TMR1L=(65536-12500)%256; //定时12500个时钟初始值
    TMR1H=(65536-12500)/256; //定时12500个时钟初始值
    GIE=1; //总中断允许
    PEIE=1; //外围功能模块中断允许
    TMR1IE=1; //TMR1中断允许
    TMR1ON=1; //启动TMR1
    while(1)
    {
    Lcd_Character_16X16(1,0,8,data_shuju[0]); //显示蓝
    Lcd_Character_16X16(1,0,24,data_shuju[1]); //显示球
    Lcd_Character_16X16(1,0,40,data_shuju[2]); //显示计
    Lcd_Character_16X16(1,0,56,data_shuju[3]); //显示分
    Lcd_Character_16X16(1,0,70,data_shuju[4]); //显示器

      Lcd_Character_16X16(1,2,0,data_shuju[5]);	//显示第Lcd_Character_16X8( 1,2,16, data_shuju1[changshu]);//显示场数Lcd_Character_16X16(1,2,24,data_shuju[6]);	//显示场Lcd_Character_16X8( 1,2,48, data_shuju1[fen/10]);//显示倒计时分的十位Lcd_Character_16X8( 1,2,56, data_shuju1[fen%10]);//显示倒计时分的个位Lcd_Character_16X8( 1,2,64, data_shuju1[12]);//显示:Lcd_Character_16X8( 1,2,72, data_shuju1[miao/10]);//显示倒计时秒的十位Lcd_Character_16X8( 1,2,80, data_shuju1[miao%10]); //显示倒计时秒的个位Lcd_Character_16X8( 1,4,72, data_shuju1[ss/10]);//显示倒计时秒的十位Lcd_Character_16X8( 1,4,80, data_shuju1[ss%10]); //显示倒计时秒的个位key();//按键检测if(flag==0)//场数交换{Lcd_Character_16X8( 1,4,0 ,data_shuju1[10]);//A队Lcd_Character_16X8( 1,4,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,4,16, data_shuju1[fen1/100]);//A队分数千位Lcd_Character_16X8( 1,4,24, data_shuju1[fen1%100/10]);//分数十位Lcd_Character_16X8( 1,4,32, data_shuju1[fen1%10]);//分数个位Lcd_Character_16X8( 1,6,0, data_shuju1[11]);//B队Lcd_Character_16X8( 1,6,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,6,16, data_shuju1[fen2/100]);//B队分数千位Lcd_Character_16X8( 1,6,24, data_shuju1[fen2%100/10]);//分数十位Lcd_Character_16X8( 1,6,32, data_shuju1[fen2%10]);//分数个位}else// 交换显示{Lcd_Character_16X8( 1,6,0 ,data_shuju1[10]);//A队Lcd_Character_16X8( 1,6,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,6,16, data_shuju1[fen1/100]);//A队分数千位Lcd_Character_16X8( 1,6,24, data_shuju1[fen1%100/10]);//分数十位Lcd_Character_16X8( 1,6,32, data_shuju1[fen1%10]);//分数个位Lcd_Character_16X8( 1,4,0, data_shuju1[11]);//B队Lcd_Character_16X8( 1,4,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,4,16, data_shuju1[fen2/100]);//B队分数千位Lcd_Character_16X8( 1,4,24, data_shuju1[fen2%100/10]);//分数十位Lcd_Character_16X8( 1,4,32, data_shuju1[fen2%10]);//分数个位}
    

    }
    }
    四、proteus仿真设计
    Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
    在这里插入图片描述

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

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

相关文章

老Python程序员职业生涯感悟—写给正在迷茫的你

我来讲几个极其重要&#xff0c;但是大多数Python小白都在一直犯的思维错误吧&#xff01;如果你能早点了解清楚这些&#xff0c;会改变你的一生的。所以这一期专门总结了大家问的最多的&#xff0c;关于学习Python相关的问题来给大家聊。希望能带给大家不一样的参考。或者能提…

前端js实现获取指定元素(top,lef,right,bottom)到视窗的距离 ;getBoundingClientRect()获取

getBoundingClientRect()获取元素位置&#xff0c;这个方法没有参数 该函数返回一个Object对象&#xff0c;该对象有6个属性&#xff1a;top,lef,right,bottom,width,height&#xff1b; <div id"box"></div>var objectdocument.getElementById(box); …

【数据结构】树与二叉树

文章目录 &#x1f340;树型结构&#x1f431;‍&#x1f464;什么是树型结构&#x1f431;‍&#x1f453;树型结构的概念&#x1f431;‍&#x1f3cd;树的表示形式&#x1f431;‍&#x1f409;树的应用 &#x1f333;二叉树&#x1f431;‍&#x1f464;二叉树的概念&#…

计算机网咯——性能指标

常见性能指标 1.速率 2.带宽 3.吞吐量 4.时延 [外链图片转存失败,源站可 5.时延带宽积 6.往返时间 7.利用率 8.丢包率

SpringBoot初级开发--加入Log4j进行日志管理打印(6)

日志记录在整个java工程开发中占着很重要的比重&#xff0c;因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j. log4j定义了8个级别的log&#xff08;除去OFF和ALL&#xff0c;可以说分为6个级别&#…

Python爬虫实战案例——第三例

文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff01;严禁将文中内容用于任何商业与非法用途&#xff0c;由此产生的一切后果与作者无关。若有侵权&#xff0c;请联系删除。 起点中文网月票榜加密字体处理 字体加密的原理&#xff1a;就是将一种特定的…

Python工具箱系列(四十一)

使用zip批量压缩文件 前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库&#xff0c;使用起来非常方便。废话不说&#xff0c;直接上代码示例。 import dbm import glob import zipfile# 保存压缩计划的库名…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

Python爬虫框架之快速抓取互联网数据详解

概要 Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代&#xff0c;信息爆炸式增长&#xff0c;人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务&#xff0c;它可以帮助我们快速地从互联网上抓取各种数据&#xf…

Nginx-报错no live upstreams while connecting to upstream

1、问题描述 生产环境Nginx间歇性502的事故分析过程 客户端请求后端服务时一直报错 502 bad gateway&#xff0c;查看后端的服务是正常启动的。后来又查看Nginx的错误日志&#xff0c;发现请求后端接口时Nginx报错no live upstreams while connecting to upstream&#xff0c…

防御网络攻击风险的4个步骤

如今&#xff0c;人们正在做大量工作来保护 IT 系统免受网络犯罪的侵害。令人担忧的是&#xff0c;对于运营技术系统来说&#xff0c;情况却并非如此&#xff0c;运营技术系统用于运行从工厂到石油管道再到发电厂的所有业务。 组织应该强化其网络安全策略&#xff0c;因为针对…

Golang Gorm 一对多的添加

一对多的添加有两种情况&#xff1a; 一种是添加用户的时候同时创建文章其次是创建文章关联已经存在的用户。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )// User 用户表 一个用户拥有多篇文章 type User struct {ID int64Name …

华为数通方向HCIP-DataCom H12-821题库(单选题:101-120)

第101题 可用于多种路由协议,由 ​​if-match​​​和 ​​apply​​子句组成的路由选择工具是 A、​​route-policy​​ B、​​IP-Prefix​​ C、​​commnityfilter​​ D、​​as-path-filter​​ 答案&#xff1a;A 解析&#xff1a; Route-policy&#xff08;路由策…

Java代码通过经纬度计算省份。

直接上代码&#xff0c;需要市区县可自己解析 String areaName addressUtil.getPosition(longitude, latitude); package com.skyable.device.utils.velicle;import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import l…

LiveNVR监控流媒体Onvif/RTSP功能-支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲

LiveNVR支持语音对讲支持非国标摄像头SDK语音对讲GB28181级联国标平台非国标转国标语音对讲 1、确认摄像头是否支持对讲2、摄像头视频类型复合流3、通道配置SDK接入4、视频广场点击播放5、相关问题5.1、如何配置通道获取直播流&#xff1f;5.2、如何GB28181级联国标平台&#x…

C语言每日一练------(Day3)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今天练习题的关键字&#xff1a; 尼科彻斯定理 等差数列 &#x1f493;博主csdn个人主页&#xff1a…

服务器数据恢复-reiserfs文件系统损坏如何恢复数据?

服务器数据恢复环境&#xff1a; 一台IBM X系列服务器&#xff0c;4块SAS硬盘组建一组RAID5阵列&#xff0c;采用的reiserfs文件系统。服务器操作系统分区结构&#xff1a;boot分区LVM卷swap分区&#xff08;按照前后顺序&#xff09;。LVM卷中直接划分了一个reiserfs文件系统&…

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现DBN-SVM深度置信网络结合支持向量机…

Nuxt3打包部署到Linux(node+pm2安装和运行步骤+nginx代理)

最近&#xff0c;我们项目组的工作接近尾声&#xff0c;需要把项目部署上线。由于前端第一次使用Nuxt3框架&#xff0c;后端也是第一次部署Nuxt3项目&#xff0c;所以刚开始出现了很多问题。在我上网搜索很多教程后&#xff0c;得到了基本的流程。 1.服务器安装node.js环境 N…

jdk 03.stream

01.集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是集合遍历 package com.bobo.jdk.stream; import java.util.ArrayList; import java.util.Arrays; import java.ut…