【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

本文主要是介绍【普中开发板】基于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单片机芯片。

以下为本设计资料展示图:

讲解视频:

仿真讲解+代码讲解

img

2.仿真

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

以上仿真结果均符合设计要求。

img

3. 程序代码

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

img

主要代码


//延时子函数
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字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等

img

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仿真+程序+设计报告+讲解视频)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571015

相关文章

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr