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

基于普中开发板51单片机的篮球计分器液晶LCD1602显示

基于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单片机芯片。

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

讲解视频:

仿真讲解+代码讲解

2.仿真

开始仿真

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

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

3. 程序代码

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

主要代码

C 复制代码
//延时子函数
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);
	else
		write_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;     //开定时器1
	TR1=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字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等

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

资料下载链接(可点击):

相关推荐
点灯小铭10 小时前
基于单片机的锅炉压力与温度监测报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
智者知已应修善业10 小时前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
环境倒逼我学习10 小时前
无人机地面站之第13章 Mission Planner 入门与界面总览
单片机·嵌入式硬件·无人机
大阳12310 小时前
ARM.8(ADC,SPI)
单片机·嵌入式硬件·adc·spi
hoiii18710 小时前
基于 STM32 的标准遥控器架构与源码
stm32·嵌入式硬件·架构
少年、潜行10 小时前
STM32 ISP 升级体验
stm32·嵌入式硬件·isp升级·系统编程区域
杨连江10 小时前
一种三模式可调气隙式双侧定子滑移可变磁通轴向永磁电机
单片机·嵌入式硬件
Aaron158820 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
foundbug99920 小时前
STM32 睡眠模式测试程序
stm32·单片机·嵌入式硬件
嵌入式小站1 天前
STM32 零基础可移植教程 18:I2C 入门,先用扫描器找一找总线上有没有设备
chrome·stm32·嵌入式硬件