单片机设计—篮球计分器内容摘要:

f。 使 P1=0xbf, 即 P1=1011 1111B,下半场指示灯对应点亮 P2=0xfe。 数码管动态刷新显示程序 P2=1111 1110, i为分钟 P0=seg[i%100/10]。 P2=0xfe,所以刷新显示时间的分钟十位,调用延时程序, delay(1)。 延时数码管的点亮 P2=0xff。 P0=0。 P2=0xfd。 同理,动态刷新时分钟个位并延时点亮 P0=seg[i%10]。 delay(1)。 中州大学课程设计报告 14 P2=0xff。 P0=0。 P2=0xfb。 同理,动态刷新时秒钟十位并延时点亮 P0=seg[j%100/10]。 delay(1)。 P0=0。 P2=0xff。 P2=0xf7。 同理,动态刷新时秒钟个位并延时点亮 P0=seg[j%10]。 delay(1)。 P0=0。 P2=0xff。 P2=0xef。 同理,动态刷新 A 分数十位并延时点亮 P0=seg[x%100/10]。 delay(1)。 P2=0xff。 P0=0。 P2=0xdf。 同理,动态刷新 A 分数个位并延时点亮 P0=seg[x%10]。 delay(1)。 P2=0xff。 P0=0。 P2=0xbf。 同理,动态刷新 B 分数十位并延时点亮 P0=seg[y%100/10]。 delay(1)。 P0=0。 中州大学课程设计报告 15 P2=0xff。 P2=0x7f。 同理,动态刷新 B 分数十位并延时点亮 P0=seg[y%10]。 delay(1)。 P0=0。 P2=0xff。 } 本设计中各个数码管采用 动态驱动 , 使各位数码管 逐个轮流受控显示,由于扫描速度极快 (本实验中大约每 20 毫秒刷新一次),所以 显示效果与静态驱动相同。 T0 中断程序 void t0(void) interrupt 1 本设计调用定时器 T0,计时单位为一秒 { TH0=0xb1。 对定时器 T0 送入计数初值,由于 TH0=0xb。 TL0=0xe0。 TL0=0xe0 故定时器定时为 20 毫秒,即每 if(n==0) 20毫秒调用一次 void t0(void) interrupt 1 { n=60。 m。 } i++。 if(i==50) { 令 i值为 50 50*20 毫秒 =1 秒,来实现计时 n。 单位为一秒 i=0。 } display(m,n,x,y)。 调用动态刷新显示程序,即每 20毫秒刷新一 } 次数码管 中州大学课程设计报告 16 加分子程序 void keyjiafen1() { 当检测到 RXD 按键按下时,调用延时子程序 if(RXD==0) 实现消除按键抖动功能,即,当 delay(1)。 , { 检测到按键按下时候,延时,按键仍按下,说明 if(RXD==0) 按键确实按下,非抖动, A对 应加分 { while(RXD==0)。 x++。 } } if(TXD==0) 检测 TXD 加分按键时候按下, B加分 { delay(1)。 if(TXD==0) { while(TXD==0)。 y++。 } } } 减分子程序 void keyjianfen1() 减分按键检测子程序,其基本算法及功能与加分 { 相同 if(WR==0) { delay(1)。 if(WR==0) 中州大学课程设计报告 17 { while(WR==0)。 x。 } } if(RD==0) { delay(1)。 if(RD==0) { while(RD==0)。 y。 } } } 调整时间子程序 调整时间子程序 ,使时间快速倒退或快进,实现回表功能,同时回 表之后能自动暂停 void key2() { if(INT0==0) { delay(10)。 if(INT0==0) 回表子程序,检测到 INT0 按下时,使时间回倒 { zanting=1。 为附加变量,当回表按键 zanting=1。 松开时 ,表暂停,这两个变量用来调用暂停 n++。 if(n==60) 中州大学课程设计报告 18 { m++。 n=1。 } } } if(INT1==0) 快表子程序,检测到 INT1 按下时,使倒计加快, { 通常情况下与回表子程序配合使用,即当回表 回过的时候,按此键调整时间 delay(10)。 zanting=1。 作用同上 if(INT1==0) { zanting=1。 n。 } } } void shijian() 该程序使回表和快表按键松开时候能自动暂停 { if(zanting==1amp。 amp。 INT0==1amp。 amp。 INT1==1 ) { EA=0。 zanting==1amp。 amp。 INT0==1amp。 amp。 INT1==1 作用为 zanting=0。 当按键松开的时候,调用暂停程序条件 初始化,以便下次回表和快表 while(1) 按键松开时候仍能调用暂停程序 { display(m,n,x,y)。 if(P1_0==0) 当检测暂停键按下,开中断,跳出暂停 { delay(1)。 中州大学课程设计报告 19 if(P1_0==0) { while(P1_0==0)。 EA=1。 break。 } } } } } 半场交换比分子程序 void key3() { int temp。 定义中间变量 temp,检测到有按键按下时候 if(zidong==1amp。 amp。 jie==2) 通过 temp 交换甲队,乙队两队比赛分数 { temp=x。 zidong==1amp。 amp。 jie==2 是判断半场的条件 y=temp。 display(m,n,x,y)。 刷新数码管 zidong=0。 } } 比赛暂停子程序 void key4() { if(P1_0==0) 检测到暂停按键按下时候,令 EA=0 关闭中断 中州大学课程设计报告 20 { delay(1)。 同通过死循环程序 while(1),不断刷新数码管 if(P1_0==0) 当暂停键再次按下时候,开中断,以使比赛时间 { 继续倒计时,由于在暂停的时候,程序处于死循 while(P1_0==0)。 EA=0。 无法回到主程序,暂停时,除了暂停键 while(1) 其他按键按下均无效 { display(m,n,x,y)。 if(P1_0==0) { 当暂停键再次按下时候, EA=1 开中断,计时数码管 delay(1)。 继续倒计时,同时通过 break 语句,跳出死循环 if(P1_0==0) { while(P1_0==0)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。