收藏 分销(赏)

单片机的篮球电子计分器源代码.docx

上传人:二*** 文档编号:4477576 上传时间:2024-09-24 格式:DOCX 页数:11 大小:22.34KB 下载积分:5 金币
下载 相关 举报
单片机的篮球电子计分器源代码.docx_第1页
第1页 / 共11页
本文档共11页,全文阅读请下载到手机保存,查看更方便
资源描述
基于单片机的篮球电子计分器的源代码。 其中的功能有:1.能够显示年月日 2 .能够分别显示两队得分 3 .能够记录两队一二三分的得分球的个数 4 .初始状态下:数码管显示当前剩余的时间 最左边 是 节数(因为篮球比赛有4节) 中间是分右边是秒 / xlx xlx slz >1^ six slz six slz slz slz slz slz six slz six six xlx six six >lx slz slz slz xlz xlz slz xlz six / xr^ xrx xrx xt* xTx xTx *rx ^7% xT^ xT^ xTx ^rv zTx xjx xtx xTx x?x Xj^ xT> xT> <T^ xT^ xix xTx xT^ xrs xix xix <7^ xix xr^ xrx xTx xlx ✓lx xr^ xp* six six six xlx s£* s£* s£* six ^fx x7x <T^ <j^ xTx XjX x5x xTx ✓Tx 篮球计分器 实验 初始状态下:数码管显示当前剩余的时间 最左边是 节数(因为篮球比赛 有4节) 中间是分右边是秒 S1按键按下:显示年月日 S5按键按下:显示两队得分 左边为甲队 右边为乙队 S9按键按下:显示甲队进球情况 左边为三分 中间为两分 右边为一分 S13按键按下:显示乙队进球情况 左边为三分 中间为两分 右边为一分 S6按键按下: 甲队进一分球 S7按键按下: 甲队进二分球 S8按键按下: 甲队进三分球 S10按键按下: 乙队进一分球 S11按键按下: 乙队进二分球 S12按键按下: 乙队进三分球 S16按键按下:计时器开启关闭状态翻转初始是关闭也就是数码管不倒计时 但是显示当前倒计时剩余时间(注意只有计时器关闭的时候 才能查看进球情况 和进球状态) 也就是说只有通过按按键S16关闭倒计时的时 候 按下SI S5 S9 S13查看其它显示状态时候才有用 slz *1* *£z %fz vfz viz vfz *lz *lz *1* viz *£* *1* *1* *1* *1* *£* *1* *1* *1* *1* *1* *1* *£* *1* *£* *lz v£* ^1* xl* viz *1* ^£z vlz*lx viz vl* %fz yjx yjs xjx *J1* yj% ✓J% zjs zjx zjx yp% yp* zjs yjx yp% slz slz slz slz *lz >lz siz siz xlz xlz *lz >lz ^Izxlz slz >1* / *J、<7< >Tx >Tx >Tx >Tx *1% / ttinclude 〃reg51.h〃 〃此文件中定义了单片机的一些特殊功能寄存 DisplayDatal[3]=smgduan[number1[l]%100/10]; DisplayDatal[4]=smgduan[number1[l]%10]; DisplayDatal[6]=smgduan[number1[0]%100/10]; DisplayDatal[7]=smgduan[number1[0]%10]; void xianshi5() 〃显示乙队进球情况 ( 〃三分球 DisplayDatal[0]=smgduan Enumber2[2]%100/10]; DisplayDatal[l]=smgduan[number2[21%10]; 〃二分球 DisplayDatal[3]=smgduan[number2[1]%100/10]; DisplayDatal[4]=smgduan[number2[1]%10]; 〃一分球 DisplayDatal[6]=smgduan[number2[0]%100/l0]; DisplayDatal[7]=smgduan[number2[0]%10]; typedef unsigned int ul6; 〃对数据类型进行声明定义 typedef unsigned char u8; ttdefine GPIO_KEY P3 u8 KeyValue; 〃用来存放读取到的键值 〃定义显示得分数码管的 译码器输入口 sbit LSA=P2"; sbit LSB=P2」; sbit LSC=P2A2; 〃两队得分变量 u8 scorel=O,score2=0; u8 numberl [3]; 〃甲队进球情况1分2分3分 int Second=0; int Time=0; char jie=l; 12分钟) u8 number2[3]; 〃甲队进球情况1分2分3分 〃全局变量秒 〃全局变量分 〃全局变量第几节(篮球比赛共有4节 一节 〃数码管数据储存数组 u8 DisplayDatal[8]; 〃共阴码表 u8 code smgduan[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};〃显示 0~F 的值 void TimerOInit(); 〃定时器初始化函数 void delay(ul6 i); 〃延时函数 void DigDisplayl(); 〃数码管扫描函数 void KeyDown(); void valuedown(u8 i); void xianshiO (); void xianshil(); void xianshi2 (); void xianshi3 (); void xianshi4(); 分别为三分二分一分 〃按键处理 〃键值处理 〃熄灭数码管函数 〃数码管显示年月日 数据处理函数 〃数码管显示两队得分数据处理函数 〃数码管倒计时显示函数 〃数码管显示甲队进球情况 从左往右 void xianshi5 (); 分别为三分二分一分 //数码管显示乙队进球情况 从左往右 / viz >1* si* slz *1* *1* *1* *1* *1* *1* six slz / xj% XJ% ZJX ✓JX xj% xTx XT% ^1% ZJN ZJ% ZJ% xj、XJX *J、4、xjx XJX ZJX xy% xy% xjx xyx xy% ✓JX *J、*JX✓JX /、"、zjx xj% xjx *函数名 :main *函数功能 :主函数 *输 入 :无 *输 出 :无 xlx X|X X|X xTx >X^ six *lx SIX >lx vjx xt* six six >£* slz vx >Jx >lx >X^ >Xx >lx six six ^L* >iz slz >£z six six >lx >lx >£z six six six six *lx >lx xjx xjx ✓ix xTx ✓ix xT^ ✓Tx xjx x?x xrx xTx xTx x»> xix <v^ xT> ^Tx ^Tx ✓jx xix ✓Tx xTx xTx xix xjx xix >1^ >1^ >!< >!< >!< / xts *ts xT> Xrs XjX XjX xrx xTx xrx ! void main() ( TimerOInit (); xianshi3 (); while (1) 〃数码管倒计时显示函数 KeyDown (); valuedown(KeyValue); 〃按键处理 〃键值处理 〃数码管扫描 DigDisplayl (); void TimerO() interrupt 1 〃中断服务函数 定时50毫 秒进入一次中断,当进入了 20次 也就是 定时了一秒 让Second加一 //当到 达60秒 让Time加一也就是过了一分钟 //当到 达12分钟让jie加一也就是比赛过了一节 ( static ul6 i; TH0=0x3C; 〃定时器赋初值定时50毫秒进入一次中断执行中 断服务函数 TL0=0xB0; i++; xianshiO(); 〃熄灭数码管函数 xianshi3(); 〃数码管倒计时显示函数 if (i==20) //定时到了一秒 ( i=0; Second ++; ) if (Second=60) ( Second=0; Time++; ) if(Time==12) Time=0; jie++; void TimerOInit() 丁》10口|二0*01;〃选择为定时器0模式,工作方式1,仅用TRO翻开启动。 TH0=0x3C; 〃定时器赋初值 定时50毫秒 TL0=0xB0; ETO=1;〃翻开定时器0中断允许 EA=1; 〃翻开总中断 TRO=O;〃初始关闭定时器 等待按键按下翻开定时器 void KeyDown(void) ( char a=0; GPIO_KEY=OxOf; if(GPIO_KEY! =0x0f) 〃读取按键是否按下 ( delay (1000);〃延时10ms进行消抖 if(GPIO_KEY! =0x0f) 〃再次检测键盘是否按下 ( 〃测试列 GPIO_KEY=OXOF; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(OXOb): KeyValue=l;break; case(OXOd): KeyValue=2;break; case(OXOe): KeyValue=3;break; ) 〃测试行 GPIO_KEY=OXFO; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(OXbO): KeyValue=KeyValue+4;break; case(OXdO): KeyValue=KeyValue+8;break; case(OXeO): KeyValue=KeyValue+12;break; ) while ((a<50) && (GPIO_KEY!= Oxf 0)) 〃检测按键松手检测 ( delay(1000); a++; } ) ) void valuedown(u8 i) ( switch (i) ( case(0): case (1): case (2): case (3): 日 case (4): xianshi2(); break; case(5): xianshi2 (); break; case (6): xianshi2(); break; case (7): case (8): ; break; ; break; ; break; xianshiO(); xianshil (); break; 〃显示年月 scorel+=3; numberl[2]+=l; xianshiO (); 〃甲队进一个三分球 scorel+=2; numberl[1]+=1; xianshiO (); 〃甲队进一个两分球 scorel+=l; numberl[0]+=l; xianshiO (); 〃甲队进一个一分球 xianshiO () ; xianshi2 (); break; 〃显示得分 score2+=3; number2[2]+=l; xianshiO (); xianshi2 (); break; case (9): xianshi2 (); break; case(10): xianshi2 (); break; case(11): case(12): score2+=2; number2[1]+=1; score2+=l; number2[0]+=1; xianshiO() ; xianshi4(); break; TRO二〜TRO; case(13): ; break; case (14): ; break; case(15) : xianshiO() ; xianshi5(); break; xianshiO (); xianshiO (); 〃甲队进球 break; 〃乙队进球 } KeyValue=20; void delay(u16 i) ( while (i一一); void DigDisplayl() ( u8 i; for(i=0;i<8;i++) { switch(i) 〃位选,选择点亮的数码管, { case (0): LSA=O; LSB=O; LSC=O; break; //显示第 0 位 case (1): LSA=1;LSB=O;LSC=O; break;〃显示第 1 位 case (2): LSA=O; LSB=1; LSC=O; break; //显示第 2 位 case (3): LSA=1; LSB=1; LSC=O; break; //显示第 3 位 case (4): LSA=O; LSB=O; LSC=1; break; //显示第 4 位 case (5): LSA=1;LSB=O;LSC=1; break;〃显示第 5 位 case (6): LSA=O; LSB=1; LSC=1; break; //显示第 6 位 case (7): LSA=1;LSB=1;LSC=1; break;〃显示第 7 位 } PO=DisplayDatal [i];〃发送段码 delay(lOO); 〃间隔一段时间扫描 PO=OxOO;〃消隐 } void xianshiO () 〃熄灭数码管 ( DisplayDatal[0]=0x00; DisplayDatalEl]=0x00; DisplayDatal[2]=0x00; DisplayDatal[3]=0x00; DisplayDatal[4]=0x00; DisplayDatal[5]=0x00; DisplayDatal[6]=0x00; DisplayDatal[7]=0x00; void xianshil () // 年日月 显示函数 ( DisplayDatal[0]=smgduan[2]; DisplayDatal[l]=smgduan[0]; DisplayDatal[2]=smgduan[2]; DisplayDatal[3]=smgduan[0]|0x80; DisplayDatal[4]=smgduan[l]; DisplayDatal[5]=smgduan[2]|0x80; DisplayDatal[6]=smgduan[2]; DisplayDatal[7]=smgduan[0]; void xianshi2() 〃得分显示函数 ( DisplayDatal[0]=smgduan[scorel%1000/100]; DisplayDatal[1]=smgduan[scorel%100/10]; DisplayDatal[2]=smgduan[scorel%10]; DisplayDatal[5]=smgduan[score2%1000/100]; DisplayDatal[6]=smgduan[score2%100/10]; DisplayDatal[7]=smgduan[score2%10]; void xianshi3() //倒计时显示函数 ( DisplayDatal [0]=smgduan[ jie]; 〃显示第几节 DisplayDatal [3]=smgduan[ (ll-Time)/10]; 〃显示分钟 DisplayDatal[4]=smgduan[(11-Time)%10]; DisplayDatal [6]=smgduan[ (60-Second) /10]; 〃显示秒 DisplayDatal[7]=smgduan[(60-Second)%10]; } void xianshi4() 〃显示甲队进球情况 ( DisplayDatal[0]=smgduan[number1[2]%100/10]|0x80; DisplayDatal[1]=smgduan[number1[2]%10];
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服