【普中开发板】基于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

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li