51单片机的篮球计分器液晶LCD1602显示
( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)
仿真图proteus7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0058
基于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操作。
篮球比赛24秒进攻倒计时功能
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
仿真讲解+代码讲解
51单片机篮球计分器LCD1602液晶(仿真+代码+报告+原理图+PCB+讲解)
开始仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。
⚓️LCD1602液晶初始化子函数:
//LCD1602液晶初始化子函数
void LCD1602_init()
{
uchar i;
bb=0; //H.T分数初始化
cc=0; //R.T分数初始化
time=0;
TMOD=0x10; //定时器1初始化
TL1=0x00;
TH1=0x4c; //设置定时器初值 定时器50ms一次中断
EA=1; //开总中断
ET1=1; //开定时器1
TR1=0; //定时器1不工作
EX0=1; //开中断0
EX1=1; //开中断1
IT0=1; //中断0为边沿触发
IT1=1; //中断1为边沿触发
E=0;
beep=0;
miao=0;
fen=12;//默认单节比赛时间(单位分钟)
num=1;
aa=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 keyscan()
{
if(K3==0) //K3按下A分数加一
{
while(K3==0);
bb++;
point_lcd(0x04,bb);
if(K3==0) //松手检测
{
while(K3==0);
delay(20);
}
}
else if(K4==0) //S4按下A分数加二
{
while(K4==0);
bb=bb+2;
point_lcd(0x04,bb);
if(K4==0)
{
while(K4==0);
delay(20);
}
}
else if(K7==0) //S4按下A分数加二
{
while(K7==0);
bb=bb+3;
point_lcd(0x04,bb);
if(K7==0)
{
while(K7==0);
delay(20);
}
}
else if(K5==0) //S5按下B分数加一
{
while(K5==0);
cc++;
point_lcd(0x0A,cc);
if(K5==0)
{
while(K5==0);
delay(20);
}
}
else if(K6==0) //S6按下B分数加2
{
while(K6==0);
cc=cc+2;
point_lcd(0x0A,cc);
if(K6==0)
{
while(K6==0);
delay(20);
}
}
else if(K8==0) //S6按下B分数加2
{
while(K8==0);
cc=cc+3;
point_lcd(0x0A,cc);
if(K8==0)
{
while(K8==0);
delay(20);
}
}
else if(K9==0) //S6按下B分数加2
{
while(K9==0);
if(change_flag){
change_flag = 0;
}else{
change_flag = 1;
}
point_lcd(0x04,bb);
point_lcd(0x0A,cc);
if(K9==0)
{
while(K9==0);
delay(20);
}
}
}
⚓️ 比赛计时部分函数
//比赛倒计时/24s倒计时
void counter_down()
{
uchar i;
if(time>=20) //每1s倒计时做减一操作
{
miao--;
aa--;
write_com(0x80+0x4e); //24s倒计时显示
write_date(0x30+aa/10);
write_date(0x30+aa%10);
write_com(0x80+0x4e);
if(aa==0) //24s结束发出报警
{
beep=1;
delay(3000);
beep=0;
aa=24;
TR1=0; //定时器1暂停
}
if((miao==0)&&(fen==0)) //检测一节比赛是否结束
{
TR1=0; //定时器1暂停
write_com(0x80+0x44);
write_date(0x30);
num++;
aa=24; //24s计时复位
write_com(0x80+0x4e); //24s倒计时显示
write_date(0x30+aa/10);
write_date(0x30+aa%10);
write_com(0x80+0x4e);
if(num<5) //每节结束蜂鸣器发出4s的间断报警
{
for(i=40;i>0;i--)
{
beep=1;
delay(500);
beep=0;
delay(500);
}
}
if(num==5) //终场结束,蜂鸣器发出10s的连续警报声
{
beep=1;
delay(10000);
num=0;
}
beep=0; //蜂鸣器关闭
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;
}
}
原理图使用AD绘制,可供实物参考。
Proteus仿真和实物作品的区别:
1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。
2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。
电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。
3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。
4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。
10112字设计报告,内容包括摘要,硬件设计、软件设计、软硬件框图、调试、结论等
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、仿真图
2、程序源码
3、开题报告
3、原理图
5、功能要求
6、元器件清单
7、设计报告
8、软硬件流程框图
9、讲解视频
Altium Designer 软件资料
KEIL软件资料
Proteus软件资料
单片机学习资料
答辩技巧
设计报告常用描述
鼠标双击打开查找更多51 STM32单片机课程毕业设计.url