基于51单片机的篮球记分牌设计

发布日期:2023-03-10
基于51单片机的篮球记分牌设计

电工优优今天要和大家分享的单片机相关信息,接下来我将从基于51单片机的篮球记分牌设计这个方面来介绍。

一、设计任务

设计一个基于单片机的篮球计分牌,实现两队的计分功能与24秒计时功能。

二、 性能指标要求

(1)按照题目要求独立设计系统所需电路,并完成硬件电路的制作及调试。

(2)结合硬件能够正常计分(1,2,3)。

(3)能够正常显示分值。

(4)能够正常修改工作模式(计分与24秒)。

(5)能够24秒的误差不小于1秒。

拓展部分

能记录两队球员犯规次数计数。

三、设计思路及设计框图

1.设计思路

这次实训的芯片我们采用了AT89C52,并同时用keil进行C语言编程,再生成的HEX文件通过下载口导入AT89C52中。

器件中有一个12M的晶振并用与芯片相对应的管脚连接,将晶振产生的时钟信号作为定时信号。篮球计分牌分为三个部分:开关控制、数码管显示和警示电路。P1口接8按键,分别作为显示切换,秒计时,犯规计数。P0口和P2口分别接数码管的段选和位选。

主要在篮球比赛中用于记录24秒计时,犯规计数和显示两队在比赛中的比分。

总体设计框图:

总体设计框图

部分程序:

#include unsigned int smg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned int t = 0, fs1 = 0, fs2 = 0, fg1 = 0, fg2 = 0, q2 = 0, q3 = 0;unsigned int m = 24;

sbit led =P3^3;sbit fmq = P3^2;

void delay(unsigned int t){unsigned int i,j;for(i = 0;i < 200;i++)for(j = 0;j < t;j++);}void t_0() interrupt 1{TH0 = 0X3C;TL0 = 0XB0;t++;if(t == 20){t = 0;m--;}}

void xyh(){P2 = 0xfb;P0 = smg[fs1%10];delay(1);P2 = 0xf7;P0 = smg[fs1/10];delay(1);P2 = 0xfe;P0 = smg[fs2%10];delay(1);P2 = 0xfd;P0 = smg[fs2/10];delay(1);}void xz(){if (P1==0x7f){delay (10);if (P1==0x7f){q2 += 1;if(q2 > 1){q2 = 0;}while(P1==0x7f);}}if(P1==0xbf){delay (10);if(P1==0xbf){q3 += 1;if(q3 > 1){q3 = 0;}while (P1==0xbf);}}}void xs(){if(q2==0){if(q3==1){led = 1;P2 = 0xfb;P0 = smg[fs1%10];delay(1);P2 = 0xf7;P0 = smg[fs1/10];delay(1);P2 = 0xfe;P0 = smg[fs2%10];delay(1);P2 = 0xfd;P0 = smg[fs2/10];delay(1);}else{led = 0;P2 = 0xfb;P0 = smg[fg1%10];delay(1);P2 = 0xf7;P0 = smg[fg1/10];delay(1);P2 = 0xfe;P0 = smg[fg2%10];delay(1);P2 = 0xfd;P0 = smg[fg2/10];delay(1);}}else{P2 = 0xfd;P0 = smg[m/10];delay(1);P2 = 0xfe;P0 = smg[m%10];delay(1);}}

参考电路: