篮球计时计分控制系统.docx

上传人:scccc 文档编号:13043660 上传时间:2021-12-12 格式:DOCX 页数:32 大小:111.17KB
返回 下载 相关 举报
篮球计时计分控制系统.docx_第1页
第1页 / 共32页
篮球计时计分控制系统.docx_第2页
第2页 / 共32页
篮球计时计分控制系统.docx_第3页
第3页 / 共32页
篮球计时计分控制系统.docx_第4页
第4页 / 共32页
篮球计时计分控制系统.docx_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《篮球计时计分控制系统.docx》由会员分享,可在线阅读,更多相关《篮球计时计分控制系统.docx(32页珍藏版)》请在三一文库上搜索。

1、学习情境1 篮球计时计分控制系统的设计之 整体模块系统设计 点名,复习1 、简述数码管动态显示技术。2 、矩阵键盘的硬件电路设计以及软件程序代码设计3 、简述74HC573的基本功能以及各引脚的作用。4 、简述74HC154的基本功能以及各引脚的作用。 新课讲授前面我们分别设计好了计时模块(24 秒计时和单节时间计时)和计分模块,把各个模块综合起来就构成了篮球计时计分控制系统。因为各个子模块都经过了调试,软件和硬件都没有什么问题,在整合这些子模块时只需做些简单的修改。1.4 整机硬件电路设计整机硬件电路具体如下图所示:四秒进攻时间显示分钟一秒钟12-0Qo"I 3n nu cu u七

2、旬JMXil " ,»SXN: mx:4H.X 二 ,*«力:| WEXH-O «4-DW二二1.5 整机软件设计(完整C程序代码)#include<reg51.h>#define uchar unsigned char#define uint unsigned int/*数码管显示代码*/ucharcodeshuma=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF; / 共阳/ucharcodeshuma=0x

3、3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40;/共阴 uchar Attack_time,Temp,m_count;uchar part;/定义第几节的变量。第1, 2, 3, 4 节uchar Key_Num=16, Pro_Key_Num=9;uint count1,count2,t_count; /时间全局变量,count1,count2 用于在中断函数中记录中、/断次数sbit attack_begin=P3A0;/ 24 秒进攻开始按键 K1sbit attack_

4、pause=P3A1;/24 秒进攻暂停按键 K2int Game_time1,Game_time2;/定义每节时间的分钟和秒钟的时间变量sbit key_start=P3A2;/ 比赛开始按键sbit item_dec=P3A3;/ 比赛减分按键sbit item_add=P3A4; / 设置比赛为第1, 2, 3, 4 节 ,篮球比赛有4 节,每节12 分钟bit flag,flag1,first_end; / 定义 1 秒的标志位,flag,flag1 分别用于表示T0 和 T1 定 /时器产生了 1 秒的时间bit game_over,OR_ZERO,k1,k2,k3,k4,l,p,h

5、; / 定义一些标志位uchar Temp_attack_time,dis_time1,dis_time2;uint attack_sec_shi;/ 进攻 秒 十位uint attack_sec_ge;/ 进攻 秒 个位uint game_point1,game_point2;/比赛比分变量uint Tgame_sec_ge;/ 单节比赛时间秒钟 个位uint Tgame_sec_shi;/ 单节比赛时间秒钟 十位uint Tgame_min_ge;/ 单节比赛时间分钟 个位uint Tgame_min_shi;/ 单节比赛时间分钟 十位/* 子程序声明*/void delay(uint K

6、);/延时子程序void Display(); / 显示子程序void Attack_key_event();/进攻 24 秒子程序void Pause_key_event();/ 暂停子程序void Initialization(); / 初始化子程序void Game_start();/单节比赛启动子程序,K3 按键处理子程序void Increase_part();/单节自加子程序,每节结束时,单节变量part 自动加 1void Key_Scan() ;/矩阵键盘扫描子程序void Add_point();/加分按键处理子程序void Dec_point();/减分按键处理子程序/*

7、主程序 */void main(void)Initialization();/P2=0xff;while(1)Display(); / 显示子程序Game_start();/篮球比赛开始子程序Attack_key_event(); /24 秒进攻开始子程序Pause_key_event(); / 暂停子程序/比赛每节自加处理子程序/ 矩阵键盘扫描子程序/加分按键处理子程序Increase_part();/Key_Scan();Add_point();Dec_point(); /减分按键处理子程序/*T0 中断服务程序*/void T0_int()interrupt 1/ 使用定时器T0, 方式

8、 1 ,定时 1sTH0 = -50000/256;/ 设置定时器初值(定时50ms)TL0 = -50000%256;count1+;if(count1=10)/ 循环 20 次count1=0;flag=1;/*T1 中断服务程序*/void T1_int()interrupt 3/ 使用定时器T1, 方式 1 ,定时 1sTH1 = -50000/256;/ 设置定时器初值(定时50ms)TL1 = -50000%256;count2+;if(count2=10)/ 循环 20 次count2=0;flag1=1;/* 延时子程序*/void delay(uint K)uint i,j;

9、for(i=K;i>0;i-)for(j=120;j>0;j-);*/*24 秒进攻按键(attack_begin , k1 按键 P3.0 口)处理子程序void Attack_key_event()if(attack_begin=0)/判断进攻按键是否按下/按键消抖/再次判断暂停健是否按下。delay(15);if(attack_begin=0)k1=1;/k1 为进攻按键按下标志TR0=1;/ 开 T0 计时if(k2=0)/没有按下暂停键。 Attack_time=24; if(k2=1&&Attack_time=0)/有按下暂停键。 Attack_time

10、=24; if(k1=1&&flag=1)flag=0;Attack_time-;OR_ZERO=1;if(OR_ZERO=1&&Attack_time=0)OR_ZERO=0;if(flag=1)flag=0;Attack_time=24;TR0=0;/* 显示子程序*/void Display()/定义第几节的数码算法。第1 , 2, 3, 4 节int j;uchar Group1_ge,Group1_shi,Group1_bai,Group2_ge,Group2_shi,Group2_bai;/uchar KeyNO;Temp_attack_time=A

11、ttack_time;attack_sec_shi=Temp_attack_time/10;attack_sec_ge=Temp_attack_time%10;dis_time1=Game_time1;dis_time2=Game_time2;Tgame_sec_shi=dis_time1/10;Tgame_sec_ge=dis_time1%10;Tgame_min_ge=dis_time2%10;Tgame_min_shi=dis_time2/10;Group1_bai= game_point1/100;Group1_shi= game_point1%100/10;Group1_ge = g

12、ame_point1%100%10;Group2_bai= game_point2/100;Group2_shi= game_point2%100/10;Group2_ge = game_point2%100%10;for(j=0;j<10;j+)P2=0x0f;/位选,选中百位数对应的那个数码管P0=shumaGroup1_bai; / 段选,把百位数的字形码送到上面选通的数码管中delay(1);P2=0x01;/位选,选中十位数对应的那个数码管P0=shumaGroup1_shi; / 段选,把十位数的字形码送到上面选通的数码管中delay(1);P2=0x02;/位选,选中个位数

13、对应的那个数码管P0=shumaGroup1_ge; / 段选,把个位数的字形码送到上面选通的数码管中delay(1);P2=0x03;/位选,选中百位数对应的那个数码管P0=shumaGroup2_bai; / 段选,把百位数的字形码送到上面选通的数码管中delay(1);P2=0x04;/位选,选中十位数对应的那个数码管P0=shumaGroup2_shi; / 段选,把十位数的字形码送到上面选通的数码管中delay(1);P2=0x05;/位选,选中个位数对应的那个数码管P0=shumaGroup2_ge; / 段选,把个位数的字形码送到上面选通的数码管中delay(1);P2=0x0b

14、;/位选,选中个位数对应的那个数码管第 6 个 数码管P0=shumaTgame_min_ge;/段选,把个位数的字形码送到上面选通的数码管delay(1);P2=0x0a;/位选,选中十位数对应的那个数码管第 5 个 数码管P0=shumaTgame_min_shi; /段选,把十位数的字形码送到上面选通的数码管中 delay(1);P2=0x09;/位选,选中十位数对应的那个数码管第 4 个 数码管P0=shuma16;/段选,把十位数的字形码送到上面选通的数码管中delay(1);P2=0x08;/位选,选中十位数对应的那个数码管- 第 3 个 数码管P0=shuma16;/段选,把十位

15、数的字形码送到上面选通的数码管中delay(1);P2=0x07;/位选,选中个位数对应的那个数码管- 第 1 个 数码管P0=shumaTgame_sec_ge; /段选把个位数的字形码送到上面选通的数码管delay(1);P2=0x06;/位选,选中十位数对应的那个数码管1 第 2 个 数码管P0=shumaTgame_sec_shi; / 段选,把十位数的字形码送到上面选通的数码管中delay(1);P2=0x0c;/位选,选中个位数对应的那个数码管P0=shumaattack_sec_ge;/ 段选,把个位数的字形码送到上面选通的数码管中delay(1);P2=0x0d;/位选,选中十

16、位数对应的那个数码管P0=shumaattack_sec_shi; /段选,把十位数的字形码送到上面选通的数码管中 delay(1);P2=0x0e;/位选,P0=shumapart; /段选, delay(1);/* 暂停子程序*/void Pause_key_event()if(attack_pause=0)delay(40);/按键消抖if(attack_pause=0)/再次判断暂停健是否按下。k2=1;/k2 为暂停按键按下标志位。TR0=0;TR1=0;/*初始化子程序*/void Initialization()TMOD=0x11;/ 中断初始化/ 设置定时器T0 初值(定时50

17、ms)TH0 = -50000/256;TL0 = -50000%256;/ 设置定时器T1 初值(定时50ms )TH1= -50000/256;TL1 = -50000%256;EA=1;/开总中断ET0=1;/T0允许ET1=1;/T1允许part=1;Attack_time=24;Game_time1=3;Game_time2=0;game_point1=106;game_point2=104;/*单节比赛启动子程序,K3 按键处理子程序*/void Game_start()if(key_start=0)/判断比赛开始按键K3 是否按下?delay(40);/ 消抖if(key_sta

18、rt=0)/再次判断比赛开始按键K3 是否按下?k3=1;/设置比赛开始标志位K3TR1=1;if(k2=0)/未按下暂停按键。if(flag1=1) return;flag1=0;Game_time1=2;Game_time2=59;else if(k2=1&&Game_time1=3&&Game_time2=0)if(flag1=1) return;Game_time1=2;Game_time2=59;if(k3=1&&flag1=1)flag1=0;p=1;m_count+; /1 秒钟累加器,60 秒为 1 分钟Game_time2-;i

19、f(Game_time2<0)Game_time2=59;if( p=1&&m_count=60)if(Game_time1!=0)Game_time1-;Game_time2=59;else if(Game_time1=0)/记录每节最后一分钟的秒钟。Game_time1-;if(Game_time1<0)TR1=0;first_end=1;/每节结束标志Game_time1=3;Game_time2=0;p=0;m_count=0;*/* 单节自加子程序,每节结束时,单节变量part 自动加 1void Increase_part()if(first_end=1

20、)first_end=0;if(+part>4)part=1;/*矩阵键盘扫描子程序*/void Key_Scan()uchar key_temp;P1=0x0f;/高 4 位置 1,放入 4行delay(1);/按键后00001111将变成0000XXXX , X中有1个为0,其余3个仍能为1.key_temp=P1A0x0f;判断按键发生在03列中的哪一列。switch(key_temp)case 1:Key_Num=0;break;case 2:Key_Num=1;break;case 4:Key_Num=2;break;case 8:Key_Num=3;break;default

21、:Key_Num=16;/说明没有按键按下P1=0xf0; /低四位置零,放入四列delay(1);/按键后11110000 将变成 XXXX0000 , X 中有 1 个为0,其余3 个仍能为1.key_temp= P1>>4A0x0f;/将高4 位移到低4 位,并将其中唯一的0 变为1,其余为0switch(key_temp)case 1:Key_Num+=0;break;/对 03 行分别附加起始值0, 4, 8, 12case 2:Key_Num+=4;break;case 4:Key_Num+=8;break;case 8:Key_Num+=12;/* 加分按键处理子程序

22、*/void Add_point()/ bit key;Key_Scan();switch(Key_Num)case 12: delay(100);if (Key_Num=12) game_point1+; break;case 13: delay(100);if (Key_Num=13)game_point1=game_point1+2; break;case 14: delay(100);if (Key_Num=14)game_point1+=3; break;case 10: delay(100);if (Key_Num=10)game_point2+; break;case 11: delay(100);if (Key_Num=11)game_point2+=2; break;case 15:delay(100);if (Key_Num=15)game_point2+=3; break;/*减分按键处理子程序*/void Dec_point()Key_Scan();switch (Key_Num)case 8: delay(200);if (Key_Num=8)game_point1-;break;case 9: delay(200);if (Key_Num=9)game_point2-;break;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1