篮球比赛计分器
任务书5:篮球比赛计分器任务书

广东工业大学课程设计任务书
题目名称篮球比赛计分器
学生学院
专业班级
姓名
学号
一、课程设计的内容
设计一个篮球比赛计分器。
二、课程设计的要求与数据
设计要求包括:
1. 按照篮球比赛规则,需要两个计分器实现双方比分的显示及比赛时间的显示(倒计时),
时间精确到秒,设每节比赛的初始设置时间为12分00秒,双方初始比分显示为00;
2. 双方分别用2个按键表示加分操作,按一次按键加1分;双方分别用2个按键表示减
分操作,按一次按键减1分,以纠正可能的误加分操作;
3. 计分器应有启动、教练暂停、犯规罚分和复位开关。
复位开关有效时,双方比分自动
清零显示数字“00”;启动开关有效时,比赛开始计时,允许记分。
教练暂停按钮有效时,停止计时,不允许双方改变比分,释放暂停开关后,继续计时比赛。
犯规罚分开关有效时,停止计时,允许双方改变比分,释放该开关后,继续计时比赛。
三、课程设计应完成的工作
1. 利用各种电子器件设计篮球比赛计分器;
2. 利用DE2板对所设计的电路进行验证;
3. 总结电路设计结果,撰写课程设计报告。
四、课程设计进程安排
五、应收集的资料及主要参考文献
发出任务书日期:年月日指导教师签名:
计划完成日期:年月日基层教学单位责任人签章:主管院长签章:。
篮球比赛计分器单片机课程设计报告

1.1设计的内容与要求设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:(1)能记录整个赛程的比赛时间,并能暂停。
(2)能随时刷新甲、乙两队在整个比赛过程中的比分。
(4)比赛结束时,能发出报警声。
在篮球比赛过程中需要对参赛双方的比分进行快速的采集记录和加工处理,需要一个快捷方便的计分系统。
该计分系统是一种得分类型的系统,即根据不同球队的不同得分,进行相应的处理,并且能够实时的显示出来。
又因为篮球比赛是分节进行的,所以还需要有倒计时功能的计时器,以便于观众实时了解赛况。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,功耗低,价格便宜,可靠性高和使用方便等独特的优点,目前已经成为测量控制应用系统中的优选元器件。
篮球计时计分器就是以单片机为核心的计时计分系统,有计时器、计分器、直流电源、时钟电路、按键等组成,完全能够实现上述的功能。
1.2设计的目的及意义随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,因此掌握单片机的一些基本功能就显的十分重要。
本次设计是采用AT89S52来编程控制LED七段数码管,使其能够显示篮球比赛的时间和计分,该系统具有赛程时间实时显示、时间暂停以及刷新A/B球队的成绩等功能。
通过本次设计可以了解、熟悉有关单片机的开发设计过程,并更进一步加深对单片机的了解和应用,掌握单片机与外围接口的一些方法与技巧,以及AT89S52单片机的最小应用系统的构成。
还可以了解LED数码管的结构、工作原理、编程方法以及相关的接口实例与具体连接。
通过本次设计可以很好的把课本的理论知识和实践有机的联系起来,是我们对理论知识有更深一步的掌握,为以后的学习打下坚实的基础。
2.1任务分析充分了解本设计要求,明确设计的全部功能、要求及技术指标;熟悉AT89S52单片机与控制对象的各种参数、关系和特点。
按题目要求能记录整个赛程的比赛时间,并能暂停,则需要暂停按键和7段共阴极LED数码管,其中时间显示按每节10分钟倒计时显示分和秒;能随时刷新A/B两队在整个比赛过程中的比分,加分有误时可通过按键实现减分调整,则需要有加减分按键、切换按键等。
篮球比赛计时计分器

内容摘要:篮球比赛计时计分器是为了解决篮球比赛时计时与计分准确的问题,更加方便篮球比赛时的计时与计分问题。
此装置利用单片机AT89C51完成了篮球比赛时计时和计分的功能。
本文详细介绍了系统硬件与软件的设计过程,采用该装置可根据实际情况进行比分、时间的修改与显示,具有低功耗、可靠性、安全性和低成本等特点。
本文主要阐述的是基于AT89C51单片机、数码管、开关模块等构成了篮球比赛计时计分器。
实现了四位一体时钟型共阴数码管显示篮球比赛时间、三位一体共阴数码管显示篮球比赛分数、篮球比赛分数的加减、篮球比赛时间的开始与暂停和篮球比赛结束时的报警等功能。
关键字:AT89C51单片机篮球比赛计时篮球比赛计分内容摘要 (2)引言 (4)第一章绪论 (5)1.1 设计目的与意义 (5)1.2 篮球比赛计时计分器的发展和现状 (5)第二章系统硬件的介绍 (6)2.1 MCS-51 单片机简述 (6)2.2 显示器及其接口 (9)第三章系统整体设计 (11)3.1 系统硬件设计方案 (11)3.2 系统设计流程 (12)第四章系统软件设计 (13)4.1 单元模块设计 (13)4.2 软件设计流程 (13)设计总结 (14)参考文献 (15)附录1:原理图与PCB图 (16)附录2:程序 (17)单片机又称单片微控制器,它内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件。
概括的讲:一块芯片就是一台计算机。
我们现在用的全自动滚筒洗衣机,排烟罩VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。
EDA课程设计篮球球比赛计分器

汇报人:01Biblioteka 020304
05
06
记录比赛得分:记录每支球队的得分和总得分 记录犯规次数:记录每支球队的犯规次数和累计犯规次数 记录比赛时间:记录比赛时间、暂停时间和比赛结束 记录球员信息:记录球员的姓名、号码和位置等信息 统计比赛数据:统计投篮命中率、篮板数、助攻数等数据 提供比赛结果:提供比赛结果和排名等信息
微控制器:选择合适的微控制 器,如Arduino、STM32等
电源:选择合适的电源,如 电池、电源适配器等
连接器:选择合适的连接器, 如USB、串口等
外壳:选择合适的外壳,如 塑料、金属等
程序功能:实现篮球比赛计分、计时、统 计等功能
编程语言:C语言或Python等
程序结构:模块化设计,包括主程序、子 程序、函数等
析
稳定性测试: 确保系统在各 种环境下的稳 定性和可靠性
篮球训练:用于记录训练数 据,帮助球员提高技术水平
篮球比赛:用于记录比赛得 分、犯规次数等数据
篮球俱乐部:用于管理球队 数据,提高球队管理效率
篮球赛事直播:用于实时展示 比赛数据,增加赛事观赏性
目标市场:篮球比赛、体育 赛事、体育爱好者等
数据结构:使用数组、链表、队列等数据 结构进行数据存储和处理
用户界面:设计简洁、易用的用户界面, 方便用户操作
测试与调试:编写测试用例,进行程序测 试和调试,确保程序稳定性和准确性
用户界面:简洁明了,易于操 作
交互方式:触摸屏、按键、语 音等多种方式
反馈机制:实时显示比赛信息, 如比分、犯规次数等
数据结构:采用数组、链表等数据结构 存储比赛数据
plc控制的篮球比赛计时计分器毕业设计

PLC控制的篮球比赛计时计分器毕业设计1. 介绍作为一种常见的体育比赛计时计分设备,篮球比赛计时计分器在提高比赛效率、记录比赛成绩、保障比赛公正方面发挥着重要作用。
本篇文章将围绕PLC控制的篮球比赛计时计分器毕业设计展开深入探讨,旨在从设计原理、实现方法、技术难点等方面全面解读该毕业设计的价值和意义。
2. 设计原理PLC(Programmable Logic Controller,可编程逻辑控制器)作为一种工业自动化控制系统,其具有可编程、灵活性强、可靠性高等特点,是控制篮球比赛计时计分器的理想选择。
设计中,借助PLC的输入/输出模块,可实现对比赛时间和比分的准确控制,提高计分器的稳定性和精准度。
3. 实现方法在PLC控制的篮球比赛计时计分器毕业设计中,需要考虑到计时和计分的同步性、实时性以及人性化的操作界面。
通过设计合理的程序逻辑,结合触摸屏等先进的人机界面技术,可以实现对比赛进程的全面监控和控制,确保比赛计时计分过程的准确无误。
4. 技术难点在该毕业设计中,存在着一些技术难点需要克服。
如何实现计时和计分的精准同步、如何应对突发情况下的异常处理、如何确保设备在长时间运行中的稳定性等。
这些都需要设计者具备扎实的PLC编程和控制技术,深入理解篮球比赛规则和实际比赛场景,以及对计时计分器硬件电路和结构设计的全面考量。
5. 总结回顾通过对PLC控制的篮球比赛计时计分器毕业设计的探讨,我们可以看到,其设计不仅仅是对技术的考验,更是对设计者对篮球比赛规则的理解和对工程实践能力的挑战。
设计者需要综合考虑技术、实用性和可靠性,为比赛的公正进行提供有力保障。
6. 个人观点对于这样的毕业设计,我认为设计者需要有扎实的技术功底,同时要善于思考和总结,关注实际应用中的细节和问题。
只有站在使用者的角度,深入了解比赛需求,才能设计出符合实际情况的篮球比赛计时计分器。
我对这样的毕业设计充满期待,并期待看到更多的优秀作品问世。
篮球比赛计分器课程设计

篮球比赛计分器课程设计一、课程目标知识目标:1. 学生能够理解篮球比赛的基本规则和计分方法;2. 学生能够掌握篮球比赛计分器的基本操作和使用方法;3. 学生能够运用篮球比赛计分器进行实际比赛计分。
技能目标:1. 学生能够运用所学的篮球比赛计分方法,准确、迅速地进行计分;2. 学生能够通过操作篮球比赛计分器,提高信息处理和实时统计的能力;3. 学生能够在团队协作中,合理分配任务,提高沟通与协作能力。
情感态度价值观目标:1. 学生培养对篮球运动的兴趣,增强体育锻炼的意识;2. 学生树立公平、公正的比赛观念,尊重对手,遵守比赛规则;3. 学生通过团队协作,培养团队精神和集体荣誉感,提高人际交往能力。
课程性质:本课程为信息技术与体育学科的跨学科实践课程,结合篮球比赛计分器的使用,培养学生实际操作能力和团队协作精神。
学生特点:六年级学生具备一定的篮球知识和技能,对信息技术有较高的兴趣,喜欢动手操作,具备一定的团队协作能力。
教学要求:结合学生特点,注重实践操作,强调团队合作,提高学生的信息处理能力和实际应用能力。
通过课程学习,使学生能够将所学知识应用于实际篮球比赛计分中,提高学生的综合素养。
1. 篮球比赛规则与计分方法:- 篮球比赛基本规则介绍;- 篮球比赛得分项目的学习;- 篮球比赛计分方式的掌握。
2. 篮球比赛计分器操作:- 认识篮球比赛计分器硬件设备;- 学习计分器的基本操作流程;- 掌握计分器在比赛中的应用。
3. 实践操作与团队协作:- 设计实践操作环节,让学生实际操作计分器;- 进行模拟篮球比赛,进行计分实践;- 培养学生在团队中合理分工,协同合作的能力。
4. 教学大纲:- 第一课时:篮球比赛规则与计分方法学习;- 第二课时:篮球比赛计分器硬件设备认识与操作学习;- 第三课时:模拟篮球比赛计分实践;- 第四课时:总结与评价,提高学生团队协作能力。
教学内容依据课程目标进行选择和组织,注重科学性和系统性。
数电篮球比赛计分器课程设计
数电篮球比赛计分器课程设计课程要求学生在最后一节课讨论中提出有关篮球比赛计分器的细节,并就其中涉及到的主要技术点、数据存储原理和使用技术进行讨论。
二、课程内容本课程分为五个部分:第一部分:篮球比赛计分器简介(一)介绍篮球比赛计分器概念;(二)讲解篮球比赛计分器的主要功能。
第二部分:篮球比赛计分器设计的基本原理(一)学习篮球比赛计分器的基本原理,包括比赛时间、比赛结果的计算;(二)学习如何在实际比赛中应用篮球比赛计分器,如何辨别篮球比赛结果。
第三部分:篮球比赛计分器的使用(一)学习如何将篮球比赛计分器应用到实际比赛中,如:计分的正确方式,比赛结束的标志;(二)学习篮球比赛计分器在实际比赛中的使用,讨论实际比赛中可能出现的问题并讨论应对方法。
第四部分:篮球比赛计分器的技术点(一)学习使用篮球比赛计分器的主要技术点,如:数据存储原理、计算技术等;(二)讨论篮球比赛计分器的设计与实现方法,实际使用中存在的问题以及解决方案。
第五部分:课程讨论学生就与篮球比赛计分器涉及到的主要技术点、数据存储原理和使用技术进行讨论,以了解如何有效地应用篮球比赛计分器完成比赛中的计分。
三、教学目标1. 了解篮球比赛计分器的基本概念、工作原理及其在实际比赛中的使用。
2. 掌握篮球比赛计分器设计的基本原理,深入了解篮球比赛计分器的主要技术点、数据存储原理和使用技术。
3. 可以根据实际比赛情况,使用篮球比赛计分器做出正确的计分,有效地记录和保存篮球比赛数据。
4. 在最后一节课中,培养学生的研究能力,让学生可以从技术角度出发,深入探究篮球比赛计分器的具体使用方法。
四、教学方法本课程采用以下几种教学方法:(一)讲授课:课程中主要采用讲授的方式传授知识,让学生对课程内容有一个清晰的认识。
(二)实验和演示:在课堂上采用实验和演示的方式让学生将实验中学习到的知识应用到实际篮球比赛中,加深学生对课程内容的理解。
篮球比赛计时计分器
设计任务:1、显示内容,队名用英文名,3个大写字母20分队名1-A:队名2-B =xxx:xxx第x节剩余时间:XX分XX秒2、串口控制20分A+1% A队加1分,%为结束符A+2% A队加2分,%为结束符A+3% A队加3分,%为结束符B+1% B队加1分,%为结束符以此类推3、串口控制交换场地5分A-B% AB队交换4、20 分PAUSE% 计时暂停按键1-定义为PAUSE按键用ZLG7290RESTART%重新计时按键2-定义为RESTARTRESET%重新比赛按键3-定义为RESET5、存储近5场的成绩到AT24C02 格式:1-队名1队名2=90:100类推20分RECALL1% 提取存储的第1场成绩,在数码管上显示,只显示比分,串口传回队名+比分&整场结束,提示是否保存成绩,按键4-存储键按键5-放弃键15分源代码:接线说明:PSB-VCC RS-P1.0 RW-P1.1 P1.3-E INT-P3.2 TXD-P3.1 RXD-P3.0 SDA-P1.6 SCL-P1.7 I2C 总线的ABC》别接键盘的ABCD以程序为准凭记忆写出来的)主程序#include<reg51.h>#include<intrins.h>#include<string.h>#include<I2C.h>#include <ZLG7290.h>#define unchar unsigned char #define unit unsigned int #define Lcd_Bus P0#define unchar unsigned char unsigned char KeyValue,FlagINT; int ney;// 纪录第及场比赛sbit RS=P1A0;//LCD 显示屏sbit RW=P1A1;sbit E=P1A3;unchar code lcddata[]={"0123456789:"};unchar code duiming[]={'1','H','O','U',':','2','C','H','I','='};unchar bifen[7];unchar fen1;unchar fen2;unchar jie;unchar min;unchar sec;unchar control;unchar table[10];************** 延时函数***********************void delay(unsigned int t) { unsigned int i,j;for(i=0;i<t;i++) for(j=0;j<10;j++)/* ------------ 写命令到LCD ---------------------- */void write_com(unsigned char cmdcode) {//chk_busy();RS = 0; // 置零RW = 0;E = 1;Lcd_Bus = cmdcode;delay(10); // 在数据写入的时候加入适当的延时 E = 0;}/* ------------ 写数据到LCD ---------------------- */void write_data(unsigned char Dispdata){//chk_busy();RS = 1; // 写数据RW = 0;E = 1;Lcd_Bus = Dispdata;delay(10); // 在数据写入的时候加入适当的延时 E = 0;/******* 函数名称:Write_Char* 功能描述:写字符******/ void write_char(unsigned int num){// chk_busy();RS = 1;RW = 0;E = 1;Lcd_Bus = lcddata[num];E = 0;}/* ------------ 显示字符串----------------- */void hzkdis(unsigned char code *s){ while(*s>0){ write_data(*s);// 选择基本指令集 (30H )// 点设定,游标右移// 开显示控制 (无游标、不反白 )// 清除显示,并且设定地址指针为 00H //unchar duiming[]= "1-HOU:2-CHI";// 队名数组//unchar bifen[7];// 比分数组unchar k;// 记录第几场比赛void timer0init(void) {TMOD=0X21;TH0=0X31;TL0=0XB0;ET0=1;EA=1;TR0=1;//IT0=1;// EX0=1;}/***** 用作串口通信 ****/ void timer1init(void){TH1=0xf3;TL1=0XF3;SCON=0X50;EA=1;ES=1;TR1=1;}/**** 保存成绩 */void save(int ney){ s++;/* ------------ 初始化 LCD 屏 ----------------- */ /*** 用作计时***/void lcdreset() { write_com(0x30);delay(16); write_com(0x04);delay(16);write_com(0x0f); delay(16);write_com(0x01);delay(16);}(同时地址归为 )int i;unchar buff[7];// ney++;ZLG7290_Download(i,0,0,0X0A); bifen[2]=fen2/100;bifen[1]=(fen2%100-fen2%10)/10;bifen[0]=fen2%10;bifen[3]=0X1F;bifen[6]=fen1/100;bifen[5]=(fen1%100-fen1%10)/10;bifen[4]=fen1%10;for(i=0;i<7;i++){x24c02_write(i+7*ney,bifen[i]);}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*ney); delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}/********** 将存储在at24c02 的数据通过串口通信发还给电脑**/ void fahuan(unsigned char k){unchar buff[7],i;for(i=0;i<10;i++){SBUF=duiming[i];while(!TI){;}TI=0;}for(i=0;i<7;i++){buff[i]=x24c02_read(i+7*k);delay(12);}for(i=0;i<7;i++){ZLG7290_Download(i,0,0,buff[i]);}for(i=6;i>3;i--){SBUF=buff[i]+48;while(!TI){;}TI=0;}SBUF=':';while(!TI){;}TI=0;SBUF=buff[2]+48;while(!TI){;}TI=0;SBUF=buff[1]+48; while(!TI){;} TI=0;SBUF=buff[0]+48; while(!TI){;} TI=0;P2=0xf0;}/**** 定时器中断用作计时**/ void timer0(void) interrupt 1 using 1 {static unchar count=0; unchar i;TH0=0X3C;TL0=0XB0; count++;if(count==20){count=0;sec--;if(sec==-1){sec=59; min--; if(min==-1) {if(jie<=3) {write_com(0x01); jie++;min=1; } else { // TR0=0;control=0; //save();}}}}/**** 主要用作显示比分**/void show_fen1(void){ write_com(0x80); hzkdis("2-CHI:1-HOU=");write_com(0x90); delay(16);write_char(fen2/ 100); delay(16);write_char((fen2%100-fen2% 10)/10); delay(16);write_char(fen2% 10); delay(16);write_char( 10 ); delay(16) ;write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10); delay(16);}/**** 显示比分队名顺序相反**/void show_fen0(void){write_com(0x80);hzkdis("1-HOU:2-CHI=");write_com(0x90); delay(16);write_char(fen1/ 100); delay(16);write_char((fen1%100-fen1% 10)/10); delay(16);write_char(fen1% 10);write_char( 10 ); delay(16) ;write_char(fen2/ 100); delay(16); write_char((fen2%100-fen2%10)/10); delay(16);write_char(fen2% 10); delay(16);}/*** 显示时间**/void show_time(void){write_com(0x88);if(jie%10==1)hzkdis("第 1 节”);if(jie%10==2)hzkdis("第 2 节");if(jie%10==3)hzkdis("第 3 节");if(jie%10==4)hzkdis("第 4 节");write_com(0x8c);hzkdis("剩余时间");write_com(0x9a);delay(16);write_char( min / 10 );delay(16);write_char( min % 10 );delay(16);write_char( 10 );delay(16);write_char( sec / 10 );delay(16);write_char( sec % 10 );}void show(){write_com(0x80);hzkdis("是否保存成绩?”);write_com(0x90);hzkdis("y press butter 4"); write_com(0x88);hzkdis("n press butter 5 "); write_com(0x98);hzkdis(" ");}/***** 串口中断处理来自串口助手的命令*/ void chuanko() interrupt 4 {unchar i=0;unchar buff[]="wrong";while(1){ while(!RI);RI=0; if(SBUF=='%') break; table[i]=SBUF;i++;} if(table[0]=='A'&&table[1]=='+'&&table[2]=='1') fen1++;else if(table[0]=='A'&&table[1]=='+'&&table[2]=='2') {fen1++;fen1++;}else if(table[0]=='A'&&table[1]=='+'&&table[2]=='3') {fen1++;fen1++;fen1++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='1')fen2++;else if(table[0]=='B'&&table[1]=='+'&&table[2]=='2'){fen2++;fen2++;}else if(table[0]=='B'&&table[1]=='+'&&table[2]=='3'){fen2++;fen2++;fen2++;}else if(table[0]=='A'&&table[1]=='-'&&table[2]=='B'){control=2;// 交换场地}elseif(table[0]=='P'&&table[1]=='A'&&table[2]=='U'&&table[3]=='S'&&table[4]=='E'){TRO=(~TRO);〃暂停}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='T'&&table[4]=='A'&&table[5]==' R'& &table[6]=='T'){TR0=0;min=11;sec=59;TR0=1;〃重新计时}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='S'&&table[3]=='E'&&table[4]=='T'){ timer0init();// TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;TR0=1;〃重新开始write_com(0x01);control=1;}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='1'){ ZLG7290_Download(i,0,0,0X0E);fahuan(0);//shuma(1);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]=='L'& &table[6]=='2'){ fahuan(1);//shuma(2);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='3'){ fahuan(2);//shuma(3);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='4'){ fahuan(3);//shuma(4);}elseif(table[0]=='R'&&table[1]=='E'&&table[2]=='C'&&table[3]=='A'&&table[4]=='L'&&table[5]==' L'& &table[6]=='5'){ fahuan(4);//shuma(5);}else{ for(i=0;i<6;i++) {SBUF=buff[i]; while(!TI); TI=0;/**** 外部中断初始化响应按键中断**/void SystemInit(){I2C_Init();EA = 0;IT0 = 1; // 负边沿触发中断EX0 = 1; // 允许外部中断EA = 1; // 等待ZLG7290 复位完毕}/***** 外部中断函数响应各个按键**/void INT0_SVC() interrupt 0 {unchar i; ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);// 显示键值DispValue(0,KeyValue); if(KeyValue==0x09) {TRO=(~TRO);//暂停} if(KeyValue==0x0a){TR0=0;min=11;sec=59;TR0=1;//重新计时} if(KeyValue==0x0b)timer0init(); write_com(0x01);TR0=0;min=11;sec=59;jie=1;fen1=0;fen2=0;control=1;TR0=1;〃重新开始} if(KeyValue==0x0c) { save(ney);ney++;timer0init();// 响应完中断记得重新初始化不然可能会出错timer1init();SystemInit();}main(){min=11;sec=59;fen1=0;fen2=0;jie=1;control=1;ney=0;timer0init();timer1init();lcdreset();SystemInit();//系统初始化while(1){if(control==1){show_fen0(); show_time();}if(control==0){show();// 比赛结束提示}if(control==2){show_fen1();// 交换场地show_time();}I2C.C标准80C51单片机模拟I2C总线的主机程序Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#i nclude "I2C.h"//定义延时变量,用于宏l2C_Delay()un sig ned char data I2C_Delay_t;/*宏定义:I2C_Delay()功能:延时,模拟I2C总线专用*/#defi ne I2C_Delay()\{\I2C_Delay_t = (I2C_DELAY_VALUE);\ while ( --I2C_Delay_t != 0 );\/*函数:I2C_I nit()功能:I2C总线初始化,使总线处于空闲状态说明:在main()函数的开始处,通常应当要执行一次本函数*/void I2C_I nit(){I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();/*函数:I2C_Start()功能:产生I2C 总线的起始状态说明:SCL处于高电平期间,当SDA出现下降沿时启动I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态本函数也可以用来产生重复起始状态本函数执行后,I2C总线处于忙状态*/void I2C_Start(){I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 0;I2C_Delay();I2C_SCL = 0;I2C_Delay();} /* 函数:I2C_Write()功能:向I2C总线写1个字节的数据参数:dat:要写到总线上的数据*/ void I2C_Write(char dat){unsigned char t = 8;do{I2C_SDA = (bit)(dat & 0x80);dat <<= 1;I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();} while ( --t != 0 );/*函数:I2C_Read() 功能:从从机读取 1 个字节的数据返回:读取的一个字节数据*/char I2C_Read(){char dat;unsigned char t = 8;I2C_SDA = 1; //在读取数据之前,要把SDA拉高do {I2C_SCL = 1;I2C_Delay();dat <<= 1;if ( I2C_SDA ) dat |= 0x01;I2C_SCL = 0;I2C_Delay();} while ( --t != 0 ); return dat;}/*函数:I2C_GetAck() 功能:读取从机应答位返回:0:从机应答1 :从机非应答说明:从机在收到每个字节的数据后,要产生应答位从机在收到最后 1 个字节的数据后,一般要产生非应答位*/bit I2C_GetAck(){bit ack;I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();ack = I2C_SDA; I2C_SCL = 0;I2C_Delay();return ack;/*函数:I2C_PutAck() 功能:主机产生应答位或非应答位参数:ack=O:主机产生应答位ack=1 :主机产生非应答位说明:主机在接收完每一个字节的数据后,都应当产生应答位主机在接收完最后一个字节的数据后,应当产生非应答位*/void I2C_PutAck(bit ack){I2C_SDA = ack;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();}/*函数:I2C_Stop()功能:产生I2C 总线的停止状态说明:SCL处于高电平期间,当SDA出现上升沿时停止I2C总线不论SDA和SCL处于什么电平状态,本函数总能正确产生停止状态本函数执行后,I2C总线处于空闲状态*/void I2C_Stop(){unsigned int t = I2C_STOP_WAIT_VALUE;I2C_SDA = 0;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();while ( --t != 0 ); // 在下一次产生Start 之前,要加一定的延时} /*函数:I2C_Puts()功能:I2C总线综合发送函数,向从机发送多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址,2—双字节子地址*dat :要发送的数据Size:数据的字节数返回:0:发送成功1 :在发送过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0*/bit I2C_Puts(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i;char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 确定子地址switch ( SubMod ){case 0: break;case 1:a[1] = (char)(SubAddr);break;case 2:a[1] = (char)(SubAddr >> 8);a[2] = (char)(SubAddr);break;default: break;}// 发送从机地址,接着发送子地址(如果有子地址的话) SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){I2C_Write(a[i]);if ( I2C_GetAck() ){I2C_Stop(); return 1;}}// 发送数据do{I2C_Write(*dat++);if ( I2C_GetAck() ) break;} while ( --Size != 0 );//发送完毕,停止I2C总线,并返回结果I2C_Stop();if ( Size == 0 ){return 0;}else{return 1;}}/*函数:I2C_Gets()功能:I2C总线综合接收函数,从从机接收多个字节的数据参数:SlaveAddr:从机地址(7位纯地址,不含读写位)SubAddr:从机的子地址SubMod:子地址模式,0—无子地址,1 —单字节子地址, *dat :2—双字节子地址保存接收到的数据Size:数据的字节数返回:0:接收成功1 :在接收过程中出现异常说明:本函数能够很好地适应所有常见的I2C 器件,不论其是否有子地址当从机没有子地址时,参数SubAddr 任意,而SubMod 应当为0 */bit I2C_Gets(unsigned char SlaveAddr, unsigned int SubAddr, unsigned char SubMod, char *dat, unsigned int Size){// 定义临时变量unsigned char i; char a[3];// 检查长度if ( Size == 0 ) return 0;// 准备从机地址a[0] = (SlaveAddr << 1);// 检查子地址模式if ( SubMod > 2 ) SubMod = 2;// 如果是有子地址的从机,则要先发送从机地址和子地址if ( SubMod != 0 ){//确定子地址if ( SubMod == 1 ){a[1] = (char)(SubAddr);}else{a[1] = (char)(SubAddr >> 8); a[2] = (char)(SubAddr);} //发送从机地址,接着发送子地址SubMod++;I2C_Start();for ( i=0; i<SubMod; i++ ){ I2C_Write(a[i]); if ( I2C_GetAck() ) {I2C_Stop();return 1;}}//这里的l2C_Start()对于有子地址的从机是重复起始状态//对于无子地址的从机则是正常的起始状态l2C_Start();// 发送从机地址l2C_Write(a[0]+1);if ( l2C_GetAck() ){l2C_Stop();return 1;}//接收数据for (;;){*dat++ = l2C_Read();if ( --Size == 0 ){ l2C_PutAck(1); break;} l2C_PutAck(0);}//接收完毕,停止I2C总线,并返回结果l2C_Stop();return 0;}/*ZLG7290.c数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序C文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved.本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/ #include "I2C.h"#include "ZLG7290.h" /*函数:ZLG7290_WriteReg()功能:向ZLG7290的某个内部寄存器写入数据参数:RegAddr:ZLG7290的内部寄存器地址dat :要写入的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_WriteReg(unsigned char RegAddr, char dat){bit b;b = I2C_Puts(ZLG7290_I2C_ADDR,RegAddr,1,&dat,1); return b;}/*函数:ZLG7290_ReadReg()功能:从ZLG7290的某个内部寄存器读出数据参数:RegAddr:ZLG7290的内部寄存器地址*dat :保存读出的数据返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat){bit b;b = I2C_Gets(ZLG7290_I2C_ADDR,RegAddr,1,dat,1); return b;}/*函数:ZLG7290_cmd()功能:向ZLG7290发送控制命令参数:cmdO :写入CmdBufO寄存器的命令字(第1字节) cmdl :写入CmdBufl寄存器的命令字(第2字节) 返回:0:正常1:访问ZLG7290时出现异常*/bit ZLG7290_cmd(char cmd0, char cmd1){bit b;char buf[2];buf[0] = cmd0;buf[1] = cmd1;b = I2C_Puts(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,1,buf,2); return b; }/* 函数:ZLG7290_SegOnOff()功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段参数:seg:取值0〜63,表示数码管(或LED)的段号b:0 表示熄灭, 1 表示点亮返回:0:正常1:访问ZLG7290时出现异常说明:在每一位数码管中,段号顺序按照“ a,b,c,d,e,f,g,dp ”进行*/bit ZLG7290_SegOnOff(char seg, bit b){char cmd;cmd = seg & 0x3F;if ( b ) cmd |= 0x80;return ZLG7290_cmd(0x01,cmd);}/*函数:ZLG7290_Download() 功能:下载数据并译码参数:addr :取值0〜7,显示缓存DpRamO〜DpRam7的编号dp:是否点亮该位的小数点,0 —熄灭,1—点亮flash:控制该位是否闪烁,0—不闪烁,1—闪烁dat :取值0〜31,表示要显示的数据返回:0:正常1:访问ZLG7290时出现异常说明:显示数据具体的译码方式请参见ZLG7290的数据手册*/bit ZLG7290_Download(char addr, bit dp, bit flash, char dat){char cmd0;char cmd1;cmd0 = addr & 0x0F;cmd0 |= 0x60;cmd1 = dat & 0x1F;if ( dp ) cmd1 |= 0x80;if ( flash ) cmd1 |= 0x40;return ZLG7290_cmd(cmd0,cmd1);} /*I2C.h标准80C51单片机模拟I2C总线的主机程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _I2C_H_ #define _I2C_H_#include <reg51.h>//模拟I2C总线的引脚定义sbit I2C_SCL = P1A6;sbit I2C_SDA = P"7;//定义I2C总线时钟的延时值,要根据实际情况修改,取值1〜255//SCL信号周期约为(I2C_DELAY_VALUE*4+15个机器周期#define I2C_DELAY_VALUE 12//定义I2C总线停止后在下一次开始之前的等待时间,取值1〜65535〃等待时间约为(I2C_STOP_WAIT_VALUE*8个机器周期//对于多数器件取值为 1 即可;但对于某些器件来说,较长的延时是必须的#defineI2C_STOP_WAIT_VALUE 120//I2C 总线初始化,使总线处于空闲状态void I2C_Init();void x24c02_write(unsigned char address,unsigned char info); unsigned charx24c02_read(unsigned char address); //unsigned char x24c02_read(unsigned char address);//I2C 总线综合发送函数,向从机发送多个字节的数据bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);//I2C 总线综合接收函数,从从机接收多个字节的数据bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod, char *dat, unsigned int Size);#endif //_I2C_H_/*ZLG7290.h数码管显示与键盘管理芯片ZLG7290的标准80C51驱动程序头文件Copyright (c) 2005,广州周立功单片机发展有限公司All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的*/#ifndef _ZLG7290_H_#define _ZLG7290_H_#include <reg51.h> //ZLG7290 中断请求信号的引脚定义sbit ZLG7290_pi nINT = P3A2;II定义ZLG7290在I2C总线协议中的从机地址// 这是7 位纯地址,不含读写位#define ZLG7290_I2C_ADDR 0x38II定义ZLG7290内部寄存器地址(子地址)#define ZLG7290_SystemReg 0x00 II系统寄存器#define ZLG7290_Key 0x01 II 键值寄存器II#define ZLG7290_RepeatCnt 0x02 II 连击次数寄存器II#define ZLG7290_FunctionKey 0x03 II 功能键寄存器#define ZLG7290_CmdBuf 0x07 II 命令缓冲区起始地址#define ZLG7290_CmdBuf0 0x07 II 命令缓冲区0#define ZLG7290_CmdBuf1 0x08 //命令缓冲区 1//#define ZLG7290_FlashOnOff 0x0C //闪烁控制寄存器#define ZLG7290_ScanNum 0x0D //扫描位数寄存器#define ZLG7290_DpRam 0x10 // 显示缓存起始地址#define ZLG7290_DpRam0 0x10 //显示缓存0/#define ZLG7290_DpRam10x11 //显示缓存 1#define ZLG7290_DpRam2 0x12 //显示缓存 2#define ZLG7290_DpRam3 0x13 //显示缓存 3#define ZLG7290_DpRam5 0x15 //显示缓存 5#define ZLG7290_DpRam6 0x16 //显示缓存 6#define ZLG7290_DpRam7 0x17 //显示缓存7//向ZLG7290的某个内部寄存器写入数据bit ZLG7290_WriteReg(unsigned char RegAddr, char dat);//从ZLG7290的某个内部寄存器读出数据bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat);//向ZLG7290发送控制命令bit ZLG7290_cmd(char cmd0, char cmd1);//段寻址,单独点亮或熄灭数码管(或LED)中的某一段bit ZLG7290_SegOnOff(char seg, bit b);//下载数据并译码bit ZLG7290_Download(char addr, bit dp, bit flash, char dat);〃闪烁控制指令(Fn应当是字节型)//Fn 的8 个位分别控制数码管的8 个位是否闪烁,0-不闪烁,1-闪烁#define ZLG7290_Flash(Fn) ZLG7290_cmd(0x70,(Fn))#endif //_ZLG7290_H_#include <reg51.h>#include <intrins.h>#include <I2C.h>//sbit dula=P2A6;//sbit wela=P2A7; unsigned char j,c;void de(unsigned char i) // 延时程序{for(j=i;j>0;j--)for(c=125;c>0;c--);}/*24C02 读写驱动程序*/void flash()// 短时间的延时,几微秒左右{ ; ;}void init() //24c02 初始化子程序{I2C_SCL=1;flash();I2C_SDA=1;flash();}void start() // 启动I2C 总线{I2C_SDA=1;flash();I2C_SCL=1;flash();I2C_SDA=0;flash();// scl=0;// flash();}void stop() // 停止I2C 总线{I2C_SDA=0;flash();I2C_SCL=1;flash();I2C_SDA=1;flash();}void writex(unsigned char j) // 写一个字节{ unsigned char i,temp;temp=j;for (i=0;i<8;i++){ temp=temp<<1; I2C_SCL=0; flash(); I2C_SDA=CY; flash(); I2C_SCL=1; flash();}I2C_SCL=0;flash();I2C_SDA=1;flash();} unsigned char readx() // 读一个字节{unsigned char i,z;I2C_SCL=0;flash();I2C_SDA=1;for (i=0;i<8;i++){ flash(); I2C_SCL=1; flash();if (I2C_SDA==1) j=1; else j=0;z=(z<<1)|j;// 先左移,然后在最低位读入值I2C_SCL=0;}flash();return(z);}void clock() //I2C 总线时钟响应{unsigned char i=0;I2C_SCL=1;flash();while ((I2C_SDA==1)&&(i<255))i++;I2C_SCL=0;flash();//////// 从24c02 的地址address 中读取一个字节数据///// unsigned charx24c02_read(unsigned char address) {unsigned char i; start();writex(0xa8);//A1 A2 A3 全部低电平// clock();writex(address);clock();start(); writex(0xa9);clock(); i=readx();stop(); de(10);return(i); }////// 向24c02 的address 地址中写入一字节数据info///// void x24c02_write(unsigned char address,unsigned char info) {EA=0;start(); writex(0xa8);clock(); writex(address);clock(); writex(info);clock();stop();de(50);。
篮球比赛计分器课件
篮球比赛计分器
*
清理工位,归还工具
篮球比赛计分器
*
欢 迎 指 导!
篮球比赛计分器
*
编写程序
系统调试
制作电路
篮球比赛计分器
*
任务实施
硬件设计
1、单片机最小系统 2、输入电路 3、输出电路
软件设计
1、主程序 2、按键扫描程序 3、数码管显示程序
系统调试
软硬件相结合 调试,通过调试现 象分析故障原因并排除故障,完成系统功能。
篮球比赛计分器
篮球比赛计分器
*
任务实施
分组讨论
学生以小组为单位,在八路数显抢答器的基础上讨论该任务的控制方案,每组推举一名代表展示讨论结果。
1)分析任务 2)查阅资料 3)确定控制方案
提示
活动1 讨论设计方案
手指
篮球比赛计分器
*
任务实施
只能显示同样的字符
活动2 汇报知识准备情况(任务书)
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
AT89C51
P2.6
P2.7
1
0
0
1
0
0
"1"
"2"
1
0
0
1
1
1
1
1
0 1
1 0
优点:节约了单片机的I/O 资源 耗能少
任务实施
篮球比赛计分器
*
任务实施
活动3 领取材料
活动4 小组内分工合作,完成系统的制作和调试
篮球比赛计分器
*亮度高,可视性好 *可控性强
篮球比赛计分器的设计原理
篮球比赛计分器的设计原理
篮球比赛计分器的设计原理是基于计分规则和比赛规则来实现的。
设计原理如下:
1. 确定比赛规则:首先需要明确比赛规则,包括比赛时间、进球得分规则、罚球规则、犯规规则等。
2. 确定计分方式:根据比赛规则确定计分方式,通常包括两支队伍的得分和罚球数。
计分器需要能够根据比赛情况及时更新并显示得分。
3. 实时更新得分:根据比赛过程中的得分情况,计分器需要能够实时更新双方队伍的得分。
通常,计分器会设置按钮或触摸屏来记录各种得分情况,包括投篮得分、罚球得分以及技术犯规等。
4. 管控比赛时间:篮球比赛有固定的时间限制,计分器需要能够计时并显示比赛的进行时间。
同时,计分器也需要提供暂停和继续功能,以便于比赛管理。
5. 显示比赛结果:当比赛结束时,计分器需要能够显示比赛的最终得分和胜负结果。
部分计分器还会提供比赛统计数据,如得分最高球员、篮板球数量等。
综上所述,篮球比赛计分器的设计原理是基于比赛规则和计分方式来实时更新并显示比赛的得分情况,同时还需要提供计时、暂停和继续功能等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬件设计
1、单片机最小系统
2、输入电路 3、输出电路
软件设计
1、主程序 2、按键扫描程序 3、数码管显示程 序
系统调试
软硬件相结合 调试,通过调试现 象分析故障原因并 排除故障,完成系 统功能。
成果展示与点评
1、提交作品 2、自我点评 3、老师点评
江苏省盐城技师学院
任务小结
江苏省盐城技师学院
本课题完成了篮球比赛计分器的设计,掌握 了按键的判断和数码管动态显示电路和程序设计。 在此计分器的基础上稍加修改可以设计成其他比 赛用的计分器。
01
P2.6 P2.7
10
P2. 6P2. 7
江苏省盐城技师学院
"21"
01
1000
01
01
1
01
01
+5V 470x2
优点:节约了单片机的I/O 资源 耗能少
任务实施
江苏省盐城技师学院
活动3 领取材料 活动4 小组内分工合作,完成系统的制作和调试
制作电路 编写程序 系统调试
任务实施
江苏省盐城技师学院
篮球比赛计分器
手动翻动记分牌
电子计分器
*亮度高,可视性好 *可控性强
任务分析
江苏省盐城技师学院
NBA比赛视频
比赛得分 •+1分 •+2分 •+3分
单片机控制 模块
输出
显示比赛 总分
制作一台篮球比赛计分器,要求能够根据比赛情况分别实 现+1分、+2分、+3分,两队总分在数码管上显示(假设总分不 超过99分)。
任务拓展
江苏省盐城技师学院
如果比赛得分超过99分,每队需要增设一个 显示的数码管,修改电路和程序,并进行调试。
清理工位,归还工具
江苏省盐城技师学院
欢 迎 指 导!
活动2 汇报知识准备情况(任务书)
什么是数码管的动态显示?有什么优点?
数码管余晖特性 人眼视觉暂留 —— 当人眼所看到的影像消失后,人眼仍能继续保留
其影像1/24秒左右的图像,这种现象被称为视觉暂留 现象。
任务实施
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6
P0.7
AT89C51
任务实施
江苏省盐城技师学院
活动1 讨论设计方案
分组讨论
学生以小组为单位,在八路数显抢答器的基础上讨论该任 务的控制方案,每组推举一名代表展示讨论结果。
提示
1)分析任务 2)查阅资料 3)确定控制方案
任务实施
活动2 汇报知识准备情况(任务书)
这两个数码管能不能 显示不同字符?
只能显示同样的字符
任务实施
课题 9
制作篮球比赛计分器
知识回顾
什么是数码管的静态显示?
江苏省盐城技师学院
你还记得 我吗?
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
89S52
470x8
1a
a
0b 0c
f gb
1d
1e e
1f
1g 1 dp
d
com
·c
dp
+5V
任务引入
江苏省盐城技师学院
下个月学院组织篮球比赛,委托电气系制作一台篮 球比赛计分器。