版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习情境1 篮球计时计分控制系统的设计之 整体模块系统设计 点名,复习1、 简述数码管动态显示技术.2、 矩阵键盘的硬件电路设计以及软件程序代码设计3、 简述74HC573的基本功能以及各引脚的作用.4、 简述74HC154的基本功能以及各引脚的作用。 新课讲授前面我们分别设计好了计时模块(24秒计时和单节时间计时)和计分模块,把各个模块综合起来就构成了篮球计时计分控制系统。因为各个子模块都经过了调试,软件和硬件都没有什么问题,在整合这些子模块时只需做些简单的修改.1。4 整机硬件电路设计整机硬件电路具体如下图所示:1。5 整机软件设计(完整C程序代码)#includereg51.hdefin
2、e 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=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40; /共阴uchar Attack_time,Temp,m_cou
3、nt; uchar part; /定义第几节的变量。第1,2,3,4节uchar Key_Num=16, Pro_Key_Num=9;uint count1,count2,t_count; /时间全局变量,count1,count2用于在中断函数中记录中、/断次数sbit attack_begin=P30; / 24秒进攻开始按键K1sbit attack_pause=P31; / 24秒进攻暂停按键K2int Game_time1,Game_time2; /定义每节时间的分钟和秒钟的时间变量sbit key_start=P32; / 比赛开始按键sbit item_dec=P33; / 比赛
4、减分按键 sbit item_add=P34; / 设置比赛为第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; / 定义一些标志位uchar Temp_attack_time,dis_time1,dis_time2; uint attack_sec_shi; / 进攻 秒 十位uint attack_sec_ge; / 进攻 秒 个位 uint game_point1,gam
5、e_point2; /比赛比分变量uint Tgame_sec_ge; / 单节比赛时间 秒钟 个位 uint Tgame_sec_shi; / 单节比赛时间 秒钟 十位 uint Tgame_min_ge; / 单节比赛时间 分钟 个位 uint Tgame_min_shi; / 单节比赛时间 分钟 十位 /-子程序声明-/void delay(uint K); /延时子程序void Display(); / 显示子程序void Attack_key_event();/进攻24秒子程序void Pause_key_event(); / 暂停子程序void Initialization();
6、/初始化子程序void Game_start(); /单节比赛启动子程序,K3按键处理子程序void Increase_part(); /单节自加子程序,每节结束时,单节变量part自动加1void Key_Scan() ; / 矩阵键盘扫描子程序void Add_point(); /加分按键处理子程序void Dec_point(); /减分按键处理子程序/*-主程序-*/void main(void) Initialization();/P2=0xff; while(1) Display(); / 显示子程序 Game_start();/篮球比赛开始子程序 Attack_key_event
7、(); /24秒进攻开始子程序 Pause_key_event(); / 暂停子程序 Increase_part();/ 比赛每节自加处理子程序 /Key_Scan(); / 矩阵键盘扫描子程序 Add_point();/ 加分按键处理子程序 Dec_point(); /减分按键处理子程序 /*-T0中断服务程序-/void T0_int()interrupt 1 / 使用定时器T0,方式1,定时1s TH0 = -50000/256; / 设置定时器初值(定时50ms) TL0 = -50000%256; count1+; if(count1=10) / 循环20次 count1=0; fl
8、ag=1; /-T1中断服务程序-*/void T1_int()interrupt 3 / 使用定时器T1,方式1,定时1s TH1 = -50000/256; / 设置定时器初值(定时50ms) TL1 = -50000%256; count2+; if(count2=10) / 循环20次 count2=0; flag1=1; /*-延时子程序-*/void delay(uint K) uint i,j; for(i=K;i>0;i-) for(j=120;j>0;j-); /*-24秒进攻按键(attack_begin,k1按键P3。0口)处理子程序-/void Attack
9、_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=24; if(k1=1&&flag=1) flag=0; Attack_time-; OR_ZERO=1; if(OR_ZERO=1&&
10、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=Attack_time; attack_sec_shi=Temp_attack_time/10; attack_sec_ge=Temp_attack_tim
11、e10; dis_time1=Game_time1; dis_time2=Game_time2; Tgame_sec_shi=dis_time1/10; Tgame_sec_ge=dis_time110; Tgame_min_ge=dis_time210; Tgame_min_shi=dis_time2/10; Group1_bai= game_point1/100; Group1_shi= game_point1%100/10; Group1_ge = game_point1%100%10; Group2_bai= game_point2/100; Group2_shi= game_poin
12、t2%100/10; Group2_ge = game_point2100%10; for(j=0;j<10;j+) P2=0x0f; /位选,选中百位数对应的那个数码管 P0=shumaGroup1_bai; / 段选,把百位数的字形码送到上面选通的数码管中 delay(1); P2=0x01; /位选,选中十位数对应的那个数码管 P0=shumaGroup1_shi; / 段选,把十位数的字形码送到上面选通的数码管中 delay(1); P2=0x02; /位选,选中个位数对应的那个数码管 P0=shumaGroup1_ge; / 段选,把个位数的字形码送到上面选通的数码管中 del
13、ay(1); P2=0x03; /位选,选中百位数对应的那个数码管 P0=shumaGroup2_bai; / 段选,把百位数的字形码送到上面选通的数码管中 delay(1); P2=0x04; /位选,选中十位数对应的那个数码管 P0=shumaGroup2_shi; / 段选,把十位数的字形码送到上面选通的数码管中 delay(1); P2=0x05; /位选,选中个位数对应的那个数码管 P0=shumaGroup2_ge; / 段选,把个位数的字形码送到上面选通的数码管中 delay(1); P2=0x0b; /位选,选中个位数对应的那个数码管 第6个 数码管 P0=shumaTgame
14、_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; /段选,把十位数的字形码送到上面选通的数码管中 delay(1); P2=0
15、x07; /位选,选中个位数对应的那个数码管 第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; /位选,选中十位数对应的那个数码管 P0=shumaat
16、tack_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; / 中断初始化 TH0 = -50000/256; /
17、设置定时器T0初值(定时50ms) TL0 = -50000%256; TH1= -50000/256; / 设置定时器T1初值(定时50ms) TL1 = -50000256; 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
18、); / 消抖 if(key_start=0) /再次判断比赛开始按键K3是否按下? k3=1; /设置比赛开始标志位K3 TR1=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秒
19、钟累加器,60秒为1分钟 Game_time2-; if(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自动加1-
20、/void Increase_part() if(first_end=1) 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=P10x0f; /判断按键发生在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:Key_Num=16; /说明没有按键按下 P1=0xf0; /低四位置零,放入四列delay(1);/按键后11110000将变成XXXX0000,X中有1个为0,其余3个仍能为1.key_temp= P140x0f; /将高4位移到低4位,并将其中唯一的0变为1,其余为0switch(key_temp) case 1:Key_Num+=0;break;/对03行分别附
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古镇改造砖运输协议模板
- 服装服饰运输合同
- 农业抗旱物资运输合同
- 学校建筑石材配送协议
- 产业基地自动扶梯装修合同
- 文旅融合发展项目居间协议
- 丹阳六年级下数学试卷
- 桥梁液压爬模专项施工方案
- 铁路接触网拆除施工方案
- 北海中学期末数学试卷
- TSG ZF001-2006《安全阀安全技术监察规程》
- 长螺旋钻孔压灌桩工程劳务清包合同(范本)
- 中考语文二轮复习:记叙文阅读物象的作用(含练习题及答案)
- 老年外科患者围手术期营养支持中国专家共识(2024版)
- 子宫畸形的超声诊断
- 2024年1月高考适应性测试“九省联考”数学 试题(学生版+解析版)
- JT-T-1004.1-2015城市轨道交通行车调度员技能和素质要求第1部分:地铁轻轨和单轨
- (高清版)WST 408-2024 定量检验程序分析性能验证指南
- 复工复产安全检查记录(总表)
- (正式版)JBT 11270-2024 立体仓库组合式钢结构货架技术规范
- DB11∕T 2035-2022 供暖民用建筑室温无线采集系统技术要求
评论
0/150
提交评论