基于C51单片机的篮球计分器设计.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
基于C51单片机的篮球计分器设计 题目要求: 1. 设计一款能够显示篮球比分的记分牌; 2. 通过加分按钮可以给A队,或B队加分; 3. 设计对调功能,更换场地后,AB队分数互换; 仿真截图: 完整源代码: #include<reg51.h> code unsigned seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 分别对应数码管显示字形0-9 int m=15,n=00,x=0,y=0,jie=2,bujin=1,zanting=0,chuzanting=0; //初始化,m、n为分、秒计时 x、y为A、B两队分数 ,其余为中间变量 sbit A_add = P3^0; // A队加分按钮 sbit B_add = P3^1; // B队加分按钮 sbit Time_add = P3^2; // 时间加按钮 sbit Time_sub = P3^3; // 时间减按钮 sbit A_sub = P3^4; // A队减分按钮 sbit B_sub = P3^5; // B队减分按钮 sbit pause = P3^6; // 暂停、启动按钮 sbit change = P3^7; // 换场地按钮 void keyScan(); //按键扫描函数 void delay(int t) //延时子程序,通过参数t,可以调整暂停时间 { while(t--) { unsigned int i; for(i=0;i<200;i++); //设置变量i的变化范围,能调整延时的单位时间长度,i越小,延时单位时间越短,精 度越高 } } void display(int m,int n,int x,int y)//数码管动态刷新显示程序 { if(jie==1&&bujin!=2) //中间变量jie=1时,为上半场,对p1赋值 P1=0xbf; //p1=0xbf,即p1=1011111B,点亮上半场对应指示灯 P2=0xfe; //数码管动态刷新显示程序p2=11111110,i为分钟 P0=seg[m/10]; //刷新显示时间显示分钟十位,调用延时程序 delay(1); //延时数码管的点亮 P2=0xff; P0=0; P2=0xfd; //同理, 分钟个位并延时点亮 P0=seg[m%10]; delay(1); P2=0xff; P0=0; P2=0xfb; //秒钟十位 P0=seg[n/10]; delay(1); P0=0; P2=0xff; P2=0xf7; //秒钟个位 P0=seg[n%10]; delay(1); P0=0; P2=0xff; P2=0xef; // A队分数十位 P0=seg[x/10]; delay(1); P2=0xff; P0=0; P2=0xdf; //A队分数个位 P0=seg[x%10]; delay(10); P2=0xff; P0=0; P2=0xbf; //B队分数十位 P0=seg[y/10]; delay(1); P0=0; P2=0xff; P2=0x7f; //B队分数个位 P0=seg[y%10]; delay(1); P0=0; P2=0xff; } void t0(void) interrupt 1 //调用定时器T0 基本计时单位秒 中断 { int i; TH0=0xb1; //利用定时器T0,送入计数初值TH0,TL0 TL0=0x10; //定时器定时单位为20ms i++; if(i==50) //利用中间变量i,令i的值为50 50*20ms=1秒 { if(n==0) //分钟与秒时间的调整 当秒减到0后分钟减1 { n=60; if(m > 0) m--; } n--; //实现1秒计时 i=0; } } void main() //主程序 { TMOD=0x01; //设置定时器工作方式 EA=1; ET0=1; TH0=0xb1; //定时计送计数初值,EA=1,开中断p3口电平拉高 TL0=0x10; //p1-0x7f,上半场指示灯点亮 TR0=1; P3=0xff; P1=0x7f; while(1) //通过while(1),反复调用循环体内子程序 { display(m,n,x,y); //调用动态刷新显示程序 keyScan(); //按键处理函数 if(m <=0 && n<=0) //时间结束了 { ET0=0; //关闭中断,停止计时 TR0 = 0; } } } void keyScan() //按键扫描函数 { int temp; //中间变量temp,检测到有按键按下时交换A,B两队分数 if(A_add==0) //当检测到A队加分按键按 【基于C51单片机的篮球计分器设计】是一种使用C51语言编程的电子设备,用于在篮球比赛中实时记录和显示两队的得分情况。该计分器不仅能够展示比分,还具备加分、对调分数以及切换比赛场地等功能。设计中,单片机C51作为核心控制器,通过连接的按键来接收用户输入,更新比分信息,并在数码管上动态显示。 在硬件方面,计分器的关键组件包括C51单片机、数码管(用于显示分数和时间)以及多个输入按钮。这些按钮包括A队和B队的加分、减分按钮,时间增加和减少按钮,以及用于切换场地和暂停/启动比赛的按钮。例如,`sbit A_add = P3^0`表示A队加分按钮连接到P3口的第0位,其他按钮也类似地分配到P3口的不同位。 软件部分,C51程序中定义了各个功能模块。例如,`keyScan()`函数用于检测和处理按键输入,确保在按键被按下时能够正确响应。`delay(int t)`函数是延时子程序,通过循环等待来实现一定时间的延迟,使得数码管的显示更加稳定。`display(int m, int n, int x, int y)`函数则负责在数码管上动态刷新显示时间(分钟m,秒n)和两队分数(A队分数x,B队分数y)。此外,`t0(void) interrupt 1`是定时器T0的中断服务程序,用于精确的计时,比如每秒钟的递减。 在主程序`main()`中,首先设置了定时器的工作模式,开启了中断,然后进入一个无限循环,不断调用`display()`和`keyScan()`函数,以实时更新显示和处理按键事件。如果比赛时间结束(分钟和秒都为0),则关闭中断停止计时。 这个设计考虑到了篮球比赛的实际需求,如半场得分的区分,以及比赛过程中的暂停和场地更换。通过C51单片机的控制,实现了简单易用且功能齐全的篮球计分器。这样的计分器可以方便地应用于各种篮球比赛场合,提高比赛的组织效率和观赏性。
- 粉丝: 192
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助