篮球比赛计分器设计3

合集下载

基于单片机的篮球计时计分器设计设计

基于单片机的篮球计时计分器设计设计

基于单片机的篮球计时计分器设计设计篮球计时计分器是一种用于篮球比赛计时和计分的设备。

基于单片机的篮球计时计分器设计可以实现自动计时、计分、显示比分等功能,使得篮球比赛更加准确和便捷。

本文将介绍基于单片机的篮球计时计分器的设计和实现。

设计思路:基于单片机的篮球计时计分器主要由显示模块、计时模块、计分模块、控制模块等组成。

其中,显示模块用于实时显示比赛时间和比分情况;计时模块用于计时并显示剩余时间;计分模块用于记录比赛双方的得分情况;控制模块用于整合各个模块的功能和控制比赛的进行。

首先,我们需要选择一款适合的单片机来实现篮球计时计分器。

一般情况下,AT89S52是比较常用的单片机,它具有较强的计算和控制能力,可以满足篮球计时计分器的需求。

接下来,我们需要确定显示模块的类型。

一种常见的显示模块是七段数码管,用于显示比赛时间和比分情况。

七段数码管可以通过单片机的IO口进行控制,显示时间和比分的变化。

计时模块可以通过在单片机中设置定时器来实现。

定时器可以定期产生一个中断信号,通过处理中断信号来实现计时功能。

可以设置定时器的初值和中断次数来实现精确的计时。

计分模块可以通过增加加减分按钮和设置相关的IO口来实现。

当按下加分按钮时,计分模块将调用相应的函数来增加得分;当按下减分按钮时,计分模块将调用相应的函数来减少得分。

计分模块还可以实现显示当前比分的功能。

控制模块是整个篮球计时计分器的核心模块。

通过对各个模块的控制和操作,实现比赛的正常进行。

控制模块还可以增加暂停和继续比赛的功能,通过设置相应的标志位来实现。

接下来,我们需要根据设计思路进行硬件电路的连接和单片机程序的编写。

硬件电路的连接包括七段数码管的连接、计时器连接、按钮连接等。

单片机程序的编写需要包括显示模块的控制程序、计时模块的中断处理程序、计分模块的加减分函数等。

最后,我们需要进行测试和优化。

测试可以通过模拟篮球比赛的环境,模拟时间和比分的变化,检查计时计分器的功能是否正常。

篮球比赛计分器单片机课程设计报告

篮球比赛计分器单片机课程设计报告

1.1设计的内容与要求设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:(1)能记录整个赛程的比赛时间,并能暂停。

(2)能随时刷新甲、乙两队在整个比赛过程中的比分。

(4)比赛结束时,能发出报警声。

在篮球比赛过程中需要对参赛双方的比分进行快速的采集记录和加工处理,需要一个快捷方便的计分系统。

该计分系统是一种得分类型的系统,即根据不同球队的不同得分,进行相应的处理,并且能够实时的显示出来。

又因为篮球比赛是分节进行的,所以还需要有倒计时功能的计时器,以便于观众实时了解赛况。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,功耗低,价格便宜,可靠性高和使用方便等独特的优点,目前已经成为测量控制应用系统中的优选元器件。

篮球计时计分器就是以单片机为核心的计时计分系统,有计时器、计分器、直流电源、时钟电路、按键等组成,完全能够实现上述的功能。

1.2设计的目的及意义随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,因此掌握单片机的一些基本功能就显的十分重要。

本次设计是采用AT89S52来编程控制LED七段数码管,使其能够显示篮球比赛的时间和计分,该系统具有赛程时间实时显示、时间暂停以及刷新A/B球队的成绩等功能。

通过本次设计可以了解、熟悉有关单片机的开发设计过程,并更进一步加深对单片机的了解和应用,掌握单片机与外围接口的一些方法与技巧,以及AT89S52单片机的最小应用系统的构成。

还可以了解LED数码管的结构、工作原理、编程方法以及相关的接口实例与具体连接。

通过本次设计可以很好的把课本的理论知识和实践有机的联系起来,是我们对理论知识有更深一步的掌握,为以后的学习打下坚实的基础。

2.1任务分析充分了解本设计要求,明确设计的全部功能、要求及技术指标;熟悉AT89S52单片机与控制对象的各种参数、关系和特点。

按题目要求能记录整个赛程的比赛时间,并能暂停,则需要暂停按键和7段共阴极LED数码管,其中时间显示按每节10分钟倒计时显示分和秒;能随时刷新A/B两队在整个比赛过程中的比分,加分有误时可通过按键实现减分调整,则需要有加减分按键、切换按键等。

篮球比赛计分器设计93684

篮球比赛计分器设计93684

单片机课程设计报告篮球比赛计分器设计姓名:学号:专业班级:指导老师:所在学院:年月日摘要本设计是采用单片机AT89C52作为本设计的核心元件。

利用7段共阴LED 作为显示器件。

在此设计中共接入了8个7段共阴LED显示器,其中4个用于记录AB队的分数,每队2个LED显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。

赛程计时采用倒计时方式。

即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。

计时范围可达到0~99分钟,也完全满足实际赛程的需要。

当比赛队A对得1分时,按下A+1键;得2分时,按下A+2键;得3分时,按下A+3键;当加分出现错误时,可以按A-1键减1分,可以达到调整分数的作用;依照同样的方法可以记录B对的得分。

采用单片机控制使这个系统按键操作使用简洁,LED显示,安装方便。

解决了篮球比赛计分器的安装问题,节约了线材,适合在各种规模的体育场馆使用,完全可以代替传统的用钟表进行计时的方法,当然稍加改动也可以用于其他球类比赛,是体育器材向智能化发展的一个实例。

本设计可以实现:1、能记录整个赛程的比赛时间,并能修改比赛时间2、能随时刷新甲、乙两队在整个过程中的比分3、中场交换比赛场地时,能交换甲、乙两队比分的位置4、比赛结束时,能发出报警声,等功能1 概述 31.1设计意义 (3)1.2设计内容 (4)1.3设计任务和要求 (4)2 系统总体方案及硬件设计 42.1AT89C52简介 (4)2.2数码管显示原理 (6)2.3总体方案: (7)2.4硬件原理图: (8)3 软件设计 73.1主流程图: (7)4.PROTEUS软件仿真85、课程设计体会10附1:源程序代码11附2 系统原理图211.1设计意义体育比赛计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。

plc控制的篮球比赛计时计分器毕业设计

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.1 设计题目篮球计时计分器1.2 系统功能要求本系统可实现功能如下:(1)主控部分:选择单片机为核心元件构成系统。

(2)计时部分:能记录整个赛程的比赛时间,并能修改时间、暂停时间。

(3)计分部分:能随时刷新甲、乙两队在整个赛程中的比分。

(4)中场交换比赛场地时,能交换甲、乙两队比分的位置。

(5)比赛时间结束时,能发出报警指令。

1.3 系统总体方案设计本设计由AT89C51编程控制LED七段数码管作球赛计时计分系统具有赛程定时设置、赛程时间暂停、性能稳定、操作方便且易携带等特点。

1.3.1系统设计方案论证本设计是基于89C52单片机的键盘控制及显示电路设计,从系统的设计功能上看,系统可分为两大部分,即键盘输入控制部分和显示部分,对于每一个部分都有不同的设计方案,起初我拟订了下面两种方案:第一种方案:键盘控制采用矩阵扫描键盘,可以用普通按键构成4×4矩阵键盘,直接接到89C51单片机的P0口,高四位作为行,低四位作为列,通过软件完成键盘的扫描和定位。

显示部分采用动态显示,采用移位寄存器74LS164和译码器74LS138通过显示驱动程序驱动七段数码管显示。

此方案成本低,所用到的两个外围芯片价格都很低廉,而且单片机的I/O口占用较少,可以节约单片机接口资源。

第二种方案:键盘控制采用独立是式键盘,每个按键的"接零端"均接地,每个按键的"测试端"各接一条输入线,通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单。

这种方法比较适合按键较少或操作速度较高的场合。

显示部分采用静态显示方法,所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的接口用于笔划段字形代码。

这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU 的开销小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告篮球比赛计分器设计姓名:学号:专业班级:指导老师:所在学院:年月日摘要本设计是采用单片机AT89C52作为本设计的核心元件。

利用7段共阴LED 作为显示器件。

在此设计中共接入了8个7段共阴LED显示器,其中4个用于记录AB队的分数,每队2个LED显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。

赛程计时采用倒计时方式。

即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。

计时范围可达到0~99分钟,也完全满足实际赛程的需要。

当比赛队A对得1分时,按下A+1键;得2分时,按下A+2键;得3分时,按下A+3键;当加分出现错误时,可以按A-1键减1分,可以达到调整分数的作用;依照同样的方法可以记录B对的得分。

采用单片机控制使这个系统按键操作使用简洁,LED显示,安装方便。

解决了篮球比赛计分器的安装问题,节约了线材,适合在各种规模的体育场馆使用,完全可以代替传统的用钟表进行计时的方法,当然稍加改动也可以用于其他球类比赛,是体育器材向智能化发展的一个实例。

本设计可以实现:1、能记录整个赛程的比赛时间,并能修改比赛时间2、能随时刷新甲、乙两队在整个过程中的比分3、中场交换比赛场地时,能交换甲、乙两队比分的位置4、比赛结束时,能发出报警声,等功能1 概述 31.1设计意义 (3)1.2设计内容 (4)1.3设计任务和要求 (4)2 系统总体方案及硬件设计 42.1AT89C52简介 (4)2.2数码管显示原理 (6)2.3总体方案: (7)2.4硬件原理图: (8)3 软件设计 73.1主流程图: (7)4.PROTEUS软件仿真85、课程设计体会10附1:源程序代码11附2 系统原理图211.1设计意义体育比赛计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。

根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。

篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时系统是一种得分类型的系统。

篮球比赛的计时系统由计时器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。

世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。

篮球比赛计分器就是以单片机为核心的计时计分系统,由于对于单片机是刚刚学习,对于编程也不是十分熟练,故本次设计的内容相较简单,达不到正式比赛需求,仅供学习之用。

1.2 设计内容本系统是采用单片机AT89C52作为本设计的核心元件。

利用7段共阴LED 作为显示器件。

在此设计中共接入了8个7段共阴LED显示器,其中4个用于记录AB队的分数,每队2个LED显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。

赛程计时采用到计时方式。

即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。

计时范围可达到0~99分钟,也完全满足实际赛程的需要。

其次,为了配合计时器和计分器校正调整时间和比分,我特定在本设计中设立了11个按键,其中8个用于设置,交换场地,启动和暂停等功能。

1.3 设计任务和要求任务:设计一个用于赛场的篮球计时计分器。

要求:1、能记录整个赛程的比赛时间,并能修改比赛时间。

2、能随时刷新甲、乙两队在整个过程中的比分。

3、中场交换比赛场地时,能交换甲、乙两队比分的位置。

4、比赛结束时,能发出报警声。

2 系统总体方案及硬件设计2.1 AT89C52简介单片机是在一块芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O 口等计算机所需要的基本部件的大规模集成电路。

其以体积小、功能全、性价比高等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。

如果说C语言程序设计课程设计软件设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。

2.2 数码管显示原理数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。

我们分别把他命名为A,B,C,D,E,F,G,H。

图2.2 数码管内部结构图假设我们要显示一个数字2, 那么A、B、G、E、D这5个段的发光管亮就可以了,C、F、H不亮,同时由于接法为共阴接法,那么为高电平是亮,低电平是灭。

从高往低排列,P1.7-P1.0写成二进制为01011011,把他转化为16进制则为5BH。

我们可以根据硬件的接线把数码管显示数字编制成一个表格,见下表,以后直接调用就行了。

数码管的接口有静态接口和动态接口两种。

静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阴接GND,本次课程设计由于所需数码管不多,故可用些种方法接线。

这种接法占用接口多,仅能接少量数码管。

动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出,另一接口完成各数码管的轮流点亮。

多位一体的数码管原理和单个的差不多。

显示P1.7小数点P1.6GP1.5小FP1.4EP1.3DP1.2CP1.1BP1.0AHE代码0 0 0 1 1 1 1 1 1 3FH1 0 0 0 0 0 1 1 0 06H2 0 1 0 1 1 0 1 1 5BH3 0 1 0 0 1 1 1 1 4FH4 0 1 1 0 0 1 1 0 66H5 0 1 1 0 1 1 0 1 6DH6 0 1 1 1 1 1 0 1 7DH7 0 0 0 0 0 1 1 1 07H8 0 1 1 1 1 1 1 1 7FH9 0 1 1 0 1 1 1 1 6FH 2.3 总体方案:基于单片机系统的篮球赛计时计分器的系统构成图如下图所示:图2.3 系统结构图本系统采用单片机AT89C51作为本设计的核心元件。

利用7段共阴LED作为显示器件。

在此设计中共接入了8个7段共阴LED显示器,其中4个用于记录AB队的分数,每队2个LED显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。

赛程计时采用到计时方式。

即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。

计时范围可达到0~99分钟,也完全满足实际赛程的需要。

其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了11个按键,其中8个用于设置,交换场地,启动和暂停等功能。

2.4 硬件原理图:系统硬件图如下图2.4所示:3 软件设计3.12、源程序代码见附1。

4.Proteus软件仿真1.进入比赛,先设置时间为一节或着半场。

默认是15分钟(按下“A+1”进行分钟加1,按下“A-1”进行分钟减1),如图4.1图4.12、按下“START/PAUSE”开始比赛或者暂停,如图4.2图4.23、上面的液晶显示为计时显示。

下面的液晶显示为分数显示“左侧为攻左半场的队的分数,右侧为攻右半场的对的分数。

”换场后依然如此。

4、按下“CHANGFIELD”交换场地,重新计时。

5、A+1,A+2,A+3,A-1,B+1,B+2,B+3,B-1进行两队分数调整5、课程设计体会通过这两个星期的课程设计,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。

通过单片机课程设计,我加深了对单片机理论的理解,学回了怎样将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的不畏困难的挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了坚持不懈,不轻易言弃。

设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。

此次课程设计充分锻炼了我的设计能力,给我们注入了一些全新的认识,为我以后的设计和实验奠定了基础,也为引导我以理论结合实践起到重要意义。

附1:源程序代码ORG 0000HLJMP MAINORG 0003HLJMP CHANGEORG 000BHLJMP TIMEORG 0013HLJMP TIAOSHIORG 001BHLJMP YANSHIMAIN: MOV SP,#50HMOV TCON,#04HMOV 20H,#00H ;秒MOV 21H,#0CH ;分MOV 22H,#00H ;;;;;;;;;A队分数;;;;;;;;;;;;;;;;;MOV 23H,#00H ;;;;;;;;;;B队分数;;;;;;;;;;;MOV 24H,#02H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 25H,#01HMOV 26H,#0CH ;;;;;;;;;;;分钟定时区;;;;;;;MOV 30H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 31H,#00H ;;;;;;;;;时间缓冲区;;;;;;;;;;MOV 32H,#02H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 33H,#01H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 34H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 35H,#00H ;;;;;;;;分数显示缓冲区;;;;;;;MOV 36H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 37H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV 39H,#03H ;TIAN HEIHEIMOV TMOD,#11HMOV TH0,#0D8HMOV TL0,#0F0HMOV TH1,#0D8HMOV TH1,#0F0HMOV IE,#10001111BMOV IP,#05HMOV R2,#64HCLR P3.6START:LCALL DISPTLCALL DISPFJNB P1.0,PP1 ;A队加一分JNB P1.1,PP2 ;A队加两分JNB P1.2,PP3 ;A队加三分JNB P1.3,PP4 ;A队减一分JNB P1.4,PP55 ;B队加一分JNB P1.5,PP66 ;B队加两分JNB P1.6,PP77 ;B队加三分JNB P1.7,PP88 ;B队减一分JB P3.0,STARTLCALL DELAYJB P3.0,STARTSTOP1:JNB P3.0,STOP1LCALL DELAYJNB P3.0,STOP1CPL TR0 ;按键奇数次开始,偶数次暂停LJMP STARTPP55: LJMP PP5PP66: LJMP PP6PP77: LJMP PP7PP88: LJMP PP8JB P1.0,PPB STOP11:JNB P1.0,STOP11LCALL DELAYJNB P1.0,STOP11INC 22HMOV A,22HLJMP STOREA PP2: LCALL DELAYJB P1.1,PPBSTOP22:JNB P1.1,STOP22LCALL DELAYJNB P1.1,STOP22MOV A,22HADD A,#02MOV 22H,ALJMP STOREA PP3: LCALL DELAYJB P1.2,PPBSTOP33:JNB P1.2,STOP33LCALL DELAYJNB P1.2,STOP33MOV A,22HADD A,#03MOV 22H,ALJMP STOREA PP4: LCALL DELAYJB P1.3,PPB STOP44:JNB P1.3,STOP44LCALL DELAYJNB P1.3,STOP44DEC 22HMOV A,22H STOREA:MOV B,#0AHDIV ABMOV 34H,BMOV 35H,A PPB: LJMP STARTJB P1.4,PPC STOP55:JNB P1.4,STOP55LCALL DELAYJNB P1.4,STOP55INC 23HMOV A,23HLJMP STOREB PP6: LCALL DELAYJB P1.5,PPCSTOP66:JNB P1.5,STOP66LCALL DELAYJNB P1.5,STOP66MOV A,23HADD A,#02MOV 23H,ALJMP STOREB PP7: LCALL DELAYJB P1.6,PPCSTOP77:JNB P1.6,STOP77LCALL DELAYJNB P1.6,STOP77MOV A,23HADD A,#03MOV 23H,ALJMP STOREB PP8: LCALL DELAYJB P1.7,PPC STOP88:JNB P1.7,STOP88LCALL DELAYJNB P1.7,STOP88DEC 23HMOV A,23H STOREB:MOV B,#0AHDIV ABMOV 36H,BMOV 37H,A PPC: LJMP STARTDELAY:MOV R4,#5HDL00: MOV R5,#0FFHDL11: DJNZ R5,DL11DJNZ R4,DL00RET;;;;;;;;;;;;;;;;;;时间中断程序;;;;;;;;;;;;;;;TIME: PUSH ACCPUSH PSWMOV TH0,#0D8HMOV TL0,#0F0HDJNZ R2,RET0MOV R2,#64HMOV A,20HCLR CDEC AMOV 20H,AMOV A,21HCJNE A,#00H,PFF ;;;;;;;;;非0分跳转;;;;;;;;;;;;;;;;;MOV A,20HCJNE A,#00H,PFF ;;;;;;;;;非0分0秒情况跳转;;;;;;;;;;CLR TR0 ;;;;;;;;;比赛结束停止计时;;;;;;;;;;MOV 20H,#00HMOV 21H,#00HMOV 32H,#00HMOV 33H,#00HLCALL MINGYINMOV 21H,26HMOV 30H,#00HMOV 31H,#00HMOV 32H,24HMOV 33H,25HLJMP RET0PFF: MOV A,20HCJNE A,#0FFH,OUTMOV 20H,#59 ;MOV 30H,#09HMOV 31H,#05HMOV A,21HDEC AMOV 21H,AOUT: MOV A,20HMOV B,#0AHDIV ABMOV 30H,BMOV 31H,AMOV A,21HMOV B,#0AHDIV ABMOV 32H,BMOV 33H,ARET0: POP PSWPOP ACCRETIYANSHI:PUSH ACC ;定时器1中断PUSH PSWMOV TH1,#0D8HMOV TL1,#0F0HDJNZ R2,RET1MOV R2,#64HDJNZ 39H,RET1MOV 39H,#03H ;TIAN HEIHEIMOV R2,#64HCLR TR1CLR P3.6RET1: POP PSWPOP ACCRETI;;;;;;;;;;;;;;鸣音子程序;;;;;;;;;;;;MINGYIN: SETB P3.6SETB TR1RETI;;;;;;;时间显示程序;;;;;;;;;;;DISPT: MOV R0,#30HMOV R3,#0F7HMOV A,R3PLAYT:MOV P2,AMOV A,R0MOV DPTR,#DSEG1MOVC A,A+DPTRMOV P0,ALCALL DL1MOV P2,#0FFHMOV A,R3RR AJNB ACC.7,LD1INC R0MOV R3,ALJMP PLAYTLD1: RET ;;;;;;;;;;比分显示程序;;;;;;;;;;;;;; DISPF:MOV R0,#34HMOV R3,#7FHMOV A,R3 PLAYF:MOV P2,AMOV A,R0MOV DPTR,#DSEG1MOVC A,A+DPTRMOV P0,ALCALL DL1MOV P2,#0FFHMOV A,R3RR AJNB ACC.3,LD1INC R0MOV R3,ALJMP PLAYFAJMP LD1 ;;;;;;;;;;调时时间显示程序;;;;;;;;;; DISPW: MOV R0,#24HMOV R3,#0F7HMOV A,R3 PLAYW:MOV P2,AMOV A,R0MOV DPTR,#DSEG1MOVC A,A+DPTRMOV P0,ALCALL DL1MOV P2,#0FFHMOV A,R3RR AJNB ACC.1,LD1INC R0MOV R3,ALJMP PLAYWDL1: MOV R7,#05HDL: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRETDSEG1:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH ;;;;;;;;;调时子程序;;;;;;;;;;;;; TIAOSHI:PUSH ACCPUSH PSWJB P3.3,CHULCALL DELAYJB P3.3,CHUSTOPQ:JNB P3.3,STOPQLCALL DELAYJNB P3.3,STOPQIF10: LCALL DISPWLCALL DISPFJNB P1.3,DECTJB P1.0,WHAIT2LCALL DELAYJB P1.0,WHAIT2STOPE:MOV C,P1.0JNC STOPELCALL DELAYMOV C,P1.0JNC STOPEINC 26HLJMP STORE DECT: MOV C,P1.3LCALL DELAYJC WHAIT2 STOPY:MOV C,P1.3JNC STOPYLCALL DELAYMOV C,P1.3JNC STOPYDEC 26H STORE: MOV 21H,26HMOV 20H,#00HMOV A,26HMOV B,#0AHDIV ABMOV 24H,BMOV 25H,AMOV 30H,#00HMOV 31H,#00HMOV 32H,24HMOV 33H,25HLJMP IF10 WHAIT2:JB P3.3,IF10LCALL DELAYJB P3.3,IF10 STOPG:JNB P3.3,STOPGLCALL DELAYJNB P3.3,STOPG CHU: POP PSWPOP ACCRETI ;;;;;;;;;;交换场地程序;;;;;;;;;;; CHANGE: PUSH PSWPUSH ACCJB P3.2,QULCALL DELAYJB P3.2,QU.STOPCH: JNB P3.2,STOPCHLCALL DELAYJNB P3.2,STOPCHMOV A,22HXCH A,23HMOV 22H,AMOV A,34HXCH A,36HMOV 34H,AMOV A,35HXCH A,37HMOV 35H,A QU: POP ACCPOP PSWRETIEND。

相关文档
最新文档