篮球赛计时计分器
篮球赛计时计分器设计毕业论文
篮球赛计时计分器设计毕业论文目录第一章引言 (1)1.1 背景知识介绍 (1)1.2 设计意义 (1)1.3 设计目的 (2)第二章方案设计 (3)2.1 系统方案设计 (3)2.1.1 系统构成框图 (3)2.1.2 器件选择 (3)2.1.3 基本功能介绍 (4)2.2 硬件总体设计 (5)第三章硬件电路设计 (7)3.1 系统硬件介绍 (7)3.1.1 单片机AT89C51简介 (7)3.1.2 显示器及其接口 (7)3.1.3 CD4511芯片介绍 (8)3.1.4 CD4094芯片介绍 (8)3.1.5 74LS21芯片介绍 (9)3.1.6 报警器 (9)3.2 计时电路部分 (9)3.2.1 振荡电路 (9)3.2.2 计时电路原理 (10)3.2.3 计时电路原理图 (10)3.2.4 计时电路的工作原理 (11)3.3 计分电路部分 (12)3.3.1 串行接口工作原理 (12)3.3.2 比分校正控制电路 (12)3.3.3 计分电路原理图 (12)3.3.4 计分电路的工作原理 (14)3.4 球赛计时计分器的工作过程 (14)第四章软件编程及调试 (16)4.1 软件设计 (16)4.1.1 编程设置及总流程框图 (16)4.1.2 主要模块说明 (17)4.2 系统调试 (19)4.2.1 软件调试 (19)第五章结论 (21)致谢 (22)参考文献 (23)附录 (24)第一章引言1.1 背景知识介绍篮球比赛是根据运动队在规定比赛时间里得分多少来决定胜负的,一次比赛的计时计分至关重要。
在以前的传统体育比赛里,基本都是采用的人工手段计时计分。
人工手段存在诸多弊端。
首先,需要安排专门的人士负责计时和计分,这就引出了专业计时计分人员的需求。
其次,即使是专业计时计分员操作,也难免百密一疏,不能完全保证时间和分数记录的准确性,这就会引起比赛公平性方面的问题。
再者,如果比赛赛程频密,对人工计时计分的效率是一大考验。
篮球比赛计时计分器
内容摘要:篮球比赛计时计分器是为了解决篮球比赛时计时与计分准确的问题,更加方便篮球比赛时的计时与计分问题。
此装置利用单片机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等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。
篮球比赛计时计分器
设计任务: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);。
毕业设计:篮球赛计时计分器设计
篮球赛计时计分器摘要单片机自20世纪70年代问世以来,以极为高的性价比受到人们的重视和关注,因此应用很广,进展专门快。
由于单片机的集成度高,功能强,通用性好,专门是它具有体积小、重量轻、能耗低、价钱廉价、靠得住性高、抗干扰能力强和利用方便等独特的优势,使单片机迅速取得了推行应用。
目前已经成为测量操纵应用系统中的优选机种和新电子产品的关键部位,许多用单片机做操纵的球赛计时计分系统也应运而生,如:用单片机操纵液晶显示(LCD)计时计分器,用单片机操纵LED七段显示器计时计分器等。
篮球计时计分器以单片机为核心,由计时器、计分器、综合操纵器等组成。
系统采纳模块化设计,主体分为计时显示模块、计分显示模块、按时报警、按键操纵键盘模块。
每一个模块的程序结构简单、任务明确,易于编写、调试和修改。
程序可读性好,对程序的修改可局部进行,其他部份可维持不变。
编程后利用Keil C51软件来进行编译,再将生成的HEX文件装入芯片中,采纳Proteus软件仿真,查验功能是不是能够正常实现,随后可用Protel99画出硬件电路图。
本设计中系统硬件电路要紧由以下几个部份组成:单片机AT89C51、计时电路、计分电路、报警电路和按键开关。
本次设计用由AT89C51编程操纵LED七段数码管作显示的球赛计时计分系统。
该系统具有赛程按时设置、赛程时刻暂停、及时刷新甲乙两边的成绩和赛后成绩暂存等功能。
它具有价钱低廉、性能稳固、操作方便而且易于携带等特点,普遍适合各类学校或小型集体作为赛程计时计分。
关键词:单片机,计时,计分,显示器,接口TIME BASKETBALL SCORING DEVICEABSTRACTSince the inception the 20th century 70 years, single-chip microcomputer (SCM) causes people’s attention and concern because of extremely cost-effective, so its application is very broad and rapid developing. SCM has many advantages, such as small size, light weight, anti-interference ability, less demanding on the environment, low cost, high reliability, good flexibility, developing more easily and so on. Now, it has become the preferred model in measurement control system and a key component of new electronic products. Many time scoring matches using SCM has also come into being, such as the timer with liquid crystal display (LCD), the timer with LED seven-segment display ,etc. Time basketball scoring device as the core of SCM includes the timer, scoring devices, integrated controller and other components.This system is used of the modular design, in which the main display module is divided into time display module, scoring display module, timing alarm module, and key control keyboard module. Program structure of each module is simple and clear. So it is easy to write, debug and modify. Because the program is readable, part of program can be modified and other parts may remain unchanged. After programming, firstly we can use Keil C51 software to compile and then generate the HEX file into the chip. Secondly we use the Proteus software simulation to test whether the normal function to achieve. Finally we draw the hardware circuit diagram with Protel99. The design of hardware circuit mainly consists of the five components, including AT89C51, timing circuit, scoring circuit, alarm circuit and key switch circuit.The design uses AT89C51 to program and to control LED digital tube for seven-segment display of match time scoring. The system has many features, such as setting the schedule time, scheduling time to pause, refreshing result ofboth parties timely, storing temporarily results after the match and so on. Because this system has low price, stable performance, and easy to operate and carry, it is widely suitable for all types of schools and small groups as the calendar time points.KEY WORDS:Microcontroller, Timing, Scoring, Display, Interface前言 (1)第1章系统方案说明 (1)方案选择 (2)篮球赛计时计分器设计的现状 (2)系统整体设计方案 (2)系统大体功能介绍 (3)第2章系统硬件电路设计 (6)篮球赛计时计分电路原理图 (6)篮球赛计时计分器电路工作进程 (6)系统硬件电路组成 (6)计时电路 (6)计分电路 (13)器件选择及介绍 (17)§2.4.1 AT89C51 (18)§2.4.2 CD4511芯片介绍 (21)§2.4.3 CD4094芯片的介绍 (22)§2.4.4 74LS21芯片介绍 (23)第3章软件编程及调试 (24)整体程序设计 (24)初始化程序设计 (25)计时系统程序设计 (26)计分系统程序设计 (27)系统调试 (28)软件调试 (28)仿真调试 (29)结论 (29)参考文献 (31)致谢 (32)附录 (33)随着单片机在各个领域的普遍应用,许多用单片机做操纵的球赛计时计分系统也应运而生,如用单片机操纵LCD液晶显示器[1]计时计分器,用单片机操纵LED七段显示器计时计分器等。
篮球赛计时计分器
硬件部分 原理图
• 系统硬件电路的组成
– – – – – 单片机AT89C52 按键开关 LCD1602显示 报警电路 L2对时间进行设置,按K1是对分 钟的十位数进行加1,到10时自动清零,按下K2时对分钟的个 位数进行加1调整,到10时自动清零。设置完后,按下K3, 进行倒计时,比赛开始。
开始
定时器清零 两队分数清零 设置时间 是否启动 Y 开始倒计时 时间到? N Y 暂停? N N
软件流程图
N
蜂鸣器响10s,LED闪10次 交换?
是否分数调整? Y 两队分数对应加减
N
Y 两队分数对换 队伍号交换
篮球赛计时计分器
篮球赛计时计分器系统图
时间设置按键 分数调整按键
LCD1602显示
暂停启动 AT89C52 复位 晶振 蜂鸣器 LED
系统说明
本系统采用AT89C52作为本设计的核心元件,利用LCD1602 作为显示器元件,显示的你内容包过队伍好、时间倒计时、两队的分 数记录,期中时间设置最长为99分钟,为半场时间,基本已经满足蓝 球赛的时间要求。分数范围为0~999分,也满足计分的需求。 时间设计在开始前设置,设置完按启动键完成,并开始倒计 时,分数调整为4个按键,在比赛的任何时刻能对两队分数的加减。 时间倒计时完毕,系统通过扬声器发出报警,时间为十秒, 同时LED闪烁10次。半场结束后,再对时间进行设置,按下启动后, 连队分数对换,队伍号也进行对换,时间进行倒计时!
单片机课程设计篮球计时计分器正文精选全文完整版
可编辑修改精选全文完整版基于单片机的篮球赛计时计分器的设计一系统设计方案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 的开销小。
篮球计时计分器
3.12 篮球计时计分器设计(8学时)一、设计原理该篮球计时计分器,由九个功能模块组成: 时钟产生模块、按键输入模块、系统的计时模块、24秒计时模块、数码管输出模块、led输出模块、计分模块、lcd输出模块、比分交换模块实现的主要功能:S1、S2分别用于两队比分的减1,S3、S4分别用于两队比分的加1,S5用于控制比赛的开始和暂停,S6用于24秒的重新置位,和进入下一节的显示切换,S7用于系统的复位,S8用于对比赛总时间减一分(调试时用,实际中不需要这个按键)。
液晶屏显示比分,数码管显示一节时间和24秒倒计时;当按下S7时,系统复位,液晶屏显示000:000 1st,数码管显示12 00 24;当按下S5时系统开始计时,若再按下S5则处于暂停状态;当24秒倒计时剩余时间小于一秒时,则显示为秒表计时方式;当24秒时间到了,则8个led灯全亮,比赛暂停,此时先按下S5再按S6则重新从24秒开始倒计时;当一节比赛结束时,8个led灯全亮,比赛暂停,此时先按下S5再按S6则进入下一节;当比赛进行到第三节时,则比分交换显示。
二、设计1、顶层图:2、各子模块及对应程序:(1)数码管输出模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity shumaguan isport( clk : in std_logic;ledag : out std_logic_vector(7 downto 0);del : out std_logic_vector(2 downto 0);m10 : in std_logic_vector(3 downto 0);m : in std_logic_vector(3 downto 0);s10 : in std_logic_vector(3 downto 0);s : in std_logic_vector(3 downto 0);s24_10 : in std_logic_vector(3 downto 0);s24 : in std_logic_vector(3 downto 0)); end shumaguan;architecture rtl of shumaguan issignal cq: std_logic_vector(3 downto 0);signal dount : std_logic_vector(2 downto 0);beginprocess(clk) --数码管动态扫描beginif(clk'event and clk='1' )thendount<=dount+1;end if;del<=dount;end process;process(dount,s24,s24_10,s,s10,m,m10)beginif(dount=0)thencq<=m10;elsif(dount=1)thencq<=m;elsif(dount=2)thencq<=s10;elsif(dount=3)thencq<=s;elsif(dount=4)thencq<="1111";elsif(dount=5)thencq<="1111";elsif(dount=6)thencq<=s24_10;elsif(dount=7)thencq<=s24;end if;end process;process(cq)--数码管显示begincase cq iswhen "0000" => ledag <="11000000";when "0001" => ledag <="11111001";when "0010" => ledag <="10100100";when "0011" => ledag <="10110000";when "0100" => ledag <="10011001";when "0101" => ledag <="10010010";when "0110" => ledag <="10000010";when "0111" => ledag <="11111000";when "1000" => ledag <="10000000";when "1001" => ledag <="10010000";when "1010" => ledag <="11111111";when "1011" => ledag <="11111111";when "1100" => ledag <="11111111";when "1101" => ledag <="11111111";when "1110" => ledag <="11111111";when "1111" => ledag <="11111111";when others => null;end case;end process;end rtl;(2)时钟产生模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity shizhong isport(clk:in std_logic;beep:out bit;clk_25hz,clk_100hz,clk_1khz:out std_logic); end shizhong;architecture rtl of shizhong issignal clk_100hz_s:std_logic;beginprocess(clk_100hz_s)variable q2:integer range 0 to 9;beginif(clk_100hz_s='1'and clk_100hz_s'event)then if(q2=3)thenclk_25hz<='1';q2:=q2+1;elsif(q2=4)thenclk_25hz<='0';q2:=0;else clk_25hz<='0';q2:=q2+1;end if;end if;end process;process(clk)variable q3:integer range 0 to 499999; beginif(clk='1'and clk'event)thenif(q3=499999)thenq3:=0;elseif(q3<250000)thenclk_100hz<='0';clk_100hz_s<='0';else clk_100hz<='1';clk_100hz_s<='1';end if;q3:=q3+1;end if;end if;end process;process(clk)variable q4:integer range 0 to 49999;beginif(clk='1'and clk'event)thenif(q4=49999)thenq4:=0;elseif(q4<25000)thenclk_1khz<='0';else clk_1khz<='1';end if;q4:=q4+1;end if;end if;end process;beep<='1';end rtl;(3)led输出模块library ieee;use ieee.std_logic_1164.all;entity led isport(ledin:in std_logic;ledout:out std_logic_vector(7 downto 0));end led;architecture rtl of led isbeginprocess(ledin)beginif(ledin='0')thenledout<="00000000";else ledout<="11111111";end if;end process;end rtl;(4)lcd输出模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity lcd isPort ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间Aout_100,Aout_10,Aout,Bout_100,Bout_10,Bout: in std_logic_vector(3 downto 0);period:in std_logic_vector(2 downto 0);LCD_RS : out std_logic; --寄存器选择信号LCD_RW : out std_logic; --液晶读写信号LCD_EN : out std_logic; --液晶时钟信号LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号end lcd;architecture Behav of lcd istype STATE_TYPE is (START,write_C,write_D,WRITE_BYTE_C,WRITE_BYTE_D,wait_3m1,wait_3m2,wa it_5m1,wait_5m2,wait_100m); --12个状态,START:初始化各信号量,write_C(write_D):判断初始化指令(显示数据)是否输出完毕,WRITE_BYTE_C (WRITE_BYTE_D):输出一个指令(数据),wait_3m1,wait_3m2,wait_5m1,wait_5m2,wait_100m:延时type MY_ARRAY_C is array(0 to 4) of std_logic_vector(7 downto 0); --初始化的数据(控制指令)type MY_ARRAY_D is array(0 to 11) of std_logic_vector(7 downto 0);constant c_d: MY_ARRAY_C:=(x"38",x"0c",x"06",x"01",x"C3");signal d_d: MY_ARRAY_D;signal STATE: STATE_TYPE:=START;signal w_c_flag : integer range 0 to 2:=0; --写指令时用到的标志 signal w_d_flag : integer range 0 to 2:=0; --写数据时用到的标志signal write_c_cnt : integer range 0 to 5:=0; --指令的指针signal write_d_cnt : integer range 0 to 12:=0; --数据的指针signal cnt : integer range 0 to 100:=0; --延时用到的计数器beginLCD_RW <= '0' ; --写数据d_d(0)<="0000"&Aout_100+x"30";d_d(1)<="0000"&Aout_10+x"30";d_d(2)<="0000"&Aout+x"30";d_d(3)<="00111010";d_d(4)<="0000"&Bout_100+x"30";d_d(5)<="0000"&Bout_10+x"30";d_d(6)<="0000"&Bout+x"30";d_d(7)<="00100000";d_d(8)<="00100000";d_d(9)<="00000"&period+x"31";d_d(10)<="01110011";d_d(11)<="01110100";process(Clk,STATE) --液晶驱动控制器beginif rising_edge(Clk) thencase STATE iswhen START=>LCD_EN<='0';w_c_flag<=0;w_d_flag<=0;write_c_cnt<=0;write_d_cnt<=0;STATE<=WRITE_C; --下一个状态(即要执行的)是WRITE_C(相当于跳转)when WRITE_C=>case write_c_cnt iswhen 0 to 4=> --小于5,五个初始化指令未输出完,则要输出STATE<=WRITE_BYTE_C;when 5=>write_c_cnt<=0; --等于5,五个初始化指令已输出完,转入数据输出STATE<=WRITE_D; --转入数据输出end case;when WRITE_BYTE_C=>if(w_c_flag=0) then --w_c_flag=0,通道选择,数据输出LCD_RS<='0';LCD_Data<=c_d(write_c_cnt);w_c_flag<=1;STATE<=wait_3m1; --延时elsif(w_c_flag=1) then --w_c_flag=1,使能en='1' LCD_EN<='1';w_c_flag<=2;STATE<=wait_5m1; --延时elsif(w_c_flag=2) then --w_c_flag=2,使能en='0' LCD_EN<='0';w_c_flag<=0;write_c_cnt<=write_c_cnt+1; --当前数据已输出完,write_c_cnt加一指向下一个数据,并转入下一个数据输出WRITE_CSTATE<=WRITE_C;end if;when WRITE_D=>case write_d_cnt iswhen 0 to 11=>STATE<=WRITE_BYTE_D;when 12=>write_d_cnt<=0;STATE<=wait_100m; --所有数据输出完毕 end case;when WRITE_BYTE_D=>if(w_d_flag=0) thenLCD_RS<='1';LCD_Data<=d_d(write_d_cnt);w_d_flag<=1;STATE<=wait_3m2;elsif(w_d_flag=1) thenLCD_EN<='1';w_d_flag<=2;STATE<=wait_5m2;elsif(w_d_flag=2) thenLCD_EN<='0';w_d_flag<=0;write_d_cnt<=write_d_cnt+1;STATE<=WRITE_D;end if;when wait_3m1=>if (cnt>=3) thenSTATE<=WRITE_BYTE_C;cnt<=0;elsecnt<=cnt+1;STATE<=wait_3m1;end if;when wait_5m1=>if (cnt>=5) thenSTATE<=WRITE_BYTE_C;cnt<=0;elsecnt<=cnt+1;STATE<=wait_5m1;end if;when wait_3m2=>if (cnt>=3) thenSTATE<=WRITE_BYTE_D;cnt<=0;elsecnt<=cnt+1;STATE<=wait_3m2;end if;when wait_5m2=>if (cnt>=5) thenSTATE<=WRITE_BYTE_D;cnt<=0;elsecnt<=cnt+1;STATE<=wait_5m2;end if;when wait_100m=>if (cnt>=100) thenSTATE<=START; --该轮次的所有数据(指令,显示)都已输出,回到START,开始新一轮的输出cnt<=0;elsecnt<=cnt+1;STATE<=wait_100m;end if;end case;end if;end process;end Behav;(5)24秒计时模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY jishi24_cnt10 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END jishi24_cnt10;ARCHITECTURE rtl OF jishi24_cnt10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt1_10 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt1_10;ARCHITECTURE rtl OF cnt1_10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=4;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=4;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt_2 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt_2;ARCHITECTURE rtl OF cnt_2 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 2;BEGINIF(res='1')THENq:=2;borrow<='0';ELSIF(reset='1'AND en='0')THENq:=2;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=2;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux1 isport(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec:in std_logic_vector(3 downto 0);s10_out:out std_logic_vector(3 downto 0);s_out:out std_logic_vector(3 downto 0);ctrl_1,ctrl_2:in std_logic;pause:out std_logic;res:in std_logic);end mux1;architecture rtl of mux1 isbeginprocess(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec,ctrl_1,ctrl_2)beginif(ctrl_1='1')thenif((s1_10<s10)or(s1_10=s10 and s1<=s))thens10_out<=s1_10;s_out<=s1;elses10_out<=s10;s_out<=s;end if;elsif(ctrl_2='1') thens10_out<=sec10;s_out<=sec;elseif(s1_10=0 and s1=0)thens10_out<=sec1_10;s_out<=sec1;elses10_out<=s1_10;s_out<=s1;end if;end if;end process;process(s1_10,s1,sec1_10,sec1,s10,s,sec10,sec,ctrl_1,ctrl_2)beginif(res='1')thenpause<='1';elsif((s1_10=0 and s1=0 and sec1_10=0 and sec1=0)or((ctrl_1='1'orctrl_2='1')and s10=0 and s=0 and sec10=0 and sec=0))then pause<='0';else pause<='1';end if;end process;end rtl;(6)计分模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jifen_cnt10 isport(res,decA,decB,incA,incB:in std_logic;Aout,Bout:buffer std_logic_vector(3 downto 0);b_decA,b_incA,b_incB,b_decB:out std_logic);end jifen_cnt10;architecture rtl of jifen_cnt10 issignal alter_A,alter_B:std_logic;beginalter_A<=decA or incA;alter_B<=decB or incB;process(res,decA,incA)beginif(res='1')thenAout<="0000";b_decA<='0';elsif(alter_A='1'and alter_A'event)thenif(decA='1')thenif(Aout="0000")thenAout<="1001";b_decA<='1';elseAout<=Aout-1;b_decA<='0';end if;elsif(incA='1')thenif(Aout="1001")thenAout<="0000";b_incA<='1';elseAout<=Aout+1;b_incA<='0';end if;end if;end if;end process;process(res,decB,incB)beginif(res='1')thenBout<="0000";b_decB<='0';elsif(alter_B='1'and alter_B'event)thenif(decB='1')thenif(Bout="0000")thenBout<="1001";b_decB<='1';elseBout<=Bout-1;b_decB<='0';end if;elsif(incB='1')thenif(Bout="1001")thenBout<="0000";b_incB<='1';elseBout<=Bout+1;b_incB<='0';end if;end if;end if;end process;end rtl;(7)系统计时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dectect isport(datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0); datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_sec10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_sec:IN STD_LOGIC_VECTOR(3 DOWNTO 0);discon:out std_logic;resetin:in std_logic;res:in std_logic;resetout:out std_logic;extra:out std_logic);end dectect;architecture rtl of dectect isbeginprocess(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thenresetout<='0';elsif(datain_m10="0000" and datain_m="0000" and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")then resetout<=resetin;else resetout<='0';end if;end process;process(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thenextra<='0';elsif(datain_m10="0000" and datain_m="0000" and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")then if(resetin='1'and resetin'event)thenextra<='1';end if;end if;end process;process(datain_m10,datain_m,datain_s10,datain_s,datain_sec10,datain_s ec,resetin)beginif(res='1')thendiscon<='0';elsif(((datain_m10="0010" ANDdatain_m="0100")or(datain_m10="0011" AND datain_m="0110")or(datain_m10="0001" AND datain_m="0010")) and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")thenif(resetin='1' and resetin'event)thendiscon<='1';end if;elsif(((datain_m10="0010" AND datain_m="0011")or(datain_m10="0011" AND datain_m="0101")or(datain_m10="0001" AND datain_m="0001")) and datain_s10="0000" and datain_s="0000" and datain_sec10="0000" and datain_sec="0000")thendiscon<='0';end if;end process;end rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt4 ISPORT(res,en,clk: IN STD_LOGIC;reset:IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END cnt4;ARCHITECTURE rtl OF cnt4 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 4;BEGINIF(res='1')THENq:=4;borrow<='0';ELSIF(reset='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=4;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt6 ISPORT(res,en,clk: IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt6;ARCHITECTURE rtl OF cnt6 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 5;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=5;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY cnt10 ISPORT(res,en,clk: IN STD_LOGIC;borrow:OUT STD_LOGIC;dataout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt10;ARCHITECTURE rtl OF cnt10 ISBEGINPROCESS(res,en,clk)VARIABLE q:INTEGER RANGE 0 TO 9;BEGINIF(res='1')THENq:=0;borrow<='0';ELSIF(en='1')THENIF(clk='1'AND clk'EVENT)THENIF(q=0)THENq:=9;borrow<='1';ELSEq:=q-1;borrow<='0';END IF;END IF;END IF;dataout<=CONV_STD_LOGIC_VECTOR(q,4);END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY conv ISPORT( discon:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);dataout_m10:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);dataout_m:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);extra:IN STD_LOGIC);END conv;ARCHITECTURE rtl OF conv ISBEGINPROCESS(datain_m10,datain_m)BEGINIF(extra='1')THENdataout_m10<=datain_m10;dataout_m<=datain_m;ELSIF((datain_m10="0001" AND datain_m<2)OR(datain_m10="0000")OR(datain_m10="0001" AND datain_m=2 AND discon='1'))THENdataout_m10<=datain_m10;dataout_m<=datain_m;ELSIF((datain_m10="0010" AND datain_m<4 AND datain_m>=2)OR(datain_m10="0001" AND datain_m>=2)OR(datain_m10="0010" AND datain_m=4 AND discon='1'))THENdataout_m10<=datain_m10-1;dataout_m<=datain_m-2;ELSIF(datain_m10="0010" AND datain_m<2)THENdataout_m10<="0000";dataout_m<=10+datain_m-2;ELSIF((datain_m10="0011" AND datain_m<6 AND datain_m>=4)OR(datain_m10="0010" AND datain_m>=4)OR(datain_m10="0011" AND datain_m=6 AND discon='1'))THENdataout_m10<=datain_m10-2;dataout_m<=datain_m-4;ELSIF(datain_m10="0011" AND datain_m<4)THENdataout_m10<="0000";dataout_m<=10+datain_m-4;ELSIF((datain_m10="0100" AND datain_m<=8 AND datain_m>=6)OR(datain_m10="0011" AND datain_m>=6))THENdataout_m10<=datain_m10-3;dataout_m<=datain_m-6;ELSIF(datain_m10="0100" AND datain_m<6)THENdataout_m10<="0000";dataout_m<=10+datain_m-6;END IF;END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ctrl ISPORT(res:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ctrl_1:OUT STD_LOGIC;ctrl_2:OUT STD_LOGIC);END ctrl;ARCHITECTURE rtl OF ctrl ISBEGINPROCESS(res,datain_m10,datain_m,datain_s10,datain_s)BEGINIF(res='1')THENctrl_1<='0';ctrl_2<='0';ELSIF((datain_m10="0000" AND datain_m="0000" )AND ((datain_s10="0010" AND datain_s<=4)OR(datain_s10="0001")OR(datain_s10="0000" AND datain_s>=1)))THENctrl_1<='1';ctrl_2<='0';ELSIF((datain_m10="0000" AND datain_m="0000" )AND (datain_s10="0000" AND datain_s="0000"))THENctrl_1<='0';ctrl_2<='1';ELSEctrl_1<='0';ctrl_2<='0';END IF;END PROCESS;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY period ISPORT(res:IN STD_LOGIC;reset:IN STD_LOGIC;discon:IN STD_LOGIC;datain_m10:IN STD_LOGIC_VECTOR(3 DOWNTO 0);datain_m:IN STD_LOGIC_VECTOR(3 DOWNTO 0);period:out std_logic_vector(2 downto 0);extra:IN STD_LOGIC);END period;ARCHITECTURE rtl OF period ISSIGNAL period_s:STD_LOGIC_VECTOR(2 downto 0);BEGINPROCESS(res,datain_m10,datain_m,extra,discon,RESET)BEGINIF(res='1')THENperiod_s<="000";ELSIF(extra='0')THENIF((datain_m10=1 AND datain_m<2)OR(datain_m10=0)OR(datain_m10=1 AND datain_m=2 AND discon='1'))THENperiod_s<="011";ELSIF((datain_m10=2 AND datain_m<4)OR(datain_m10=1 AND datain_m>=2)OR(datain_m10=2 AND datain_m=4 AND discon='1'))THENperiod_s<="010";ELSIF((datain_m10=3 AND datain_m<6)OR(datain_m10=2 AND datain_m>=4)OR(datain_m10=3 AND datain_m=6 AND discon='1'))THENperiod_s<="001";ELSIF((datain_m10=4 AND datain_m<=8)OR(datain_m10=3 AND datain_m>=6))THENperiod_s<="000";END IF;ELSIF(reset='0'AND reset'EVENT)THENperiod_s<=period_s+1;END IF;period<=period_s;END PROCESS;END rtl;(8)交换模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jiaohuan isport(Ain_100:in std_logic_vector(3 downto 0); Ain_10:in std_logic_vector(3 downto 0);Ain:in std_logic_vector(3 downto 0);Bin_100:in std_logic_vector(3 downto 0); Bin_10:in std_logic_vector(3 downto 0);Bin:in std_logic_vector(3 downto 0);period:in std_logic_vector(2 downto 0);Aout_100:out std_logic_vector(3 downto 0); Aout_10:out std_logic_vector(3 downto 0); Aout:out std_logic_vector(3 downto 0);Bout_100:out std_logic_vector(3 downto 0); Bout_10:out std_logic_vector(3 downto 0); Bout:out std_logic_vector(3 downto 0));end jiaohuan;architecture behav of jiaohuan isbeginprocess(Ain_100,Ain_10,Ain,Bin_100,Bin_10,Bin,period)beginif(period<=1)thenAout_100<=Ain_100;Aout_10<=Ain_10;Aout<=Ain;Bout_100<=Bin_100;Bout_10<=Bin_10;Bout<=Bin;elseAout_100<=Bin_100;Aout_10<=Bin_10;Aout<=Bin;Bout_100<=Ain_100;Bout_10<=Ain_10;Bout<=Ain;end if;end process;end behav;(9)按键输入模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY anjian ISPORT(S1,S2,S3,S4,S5,S6,S7,S8,clk2: IN STD_LOGIC;dec,pause,res,reset,decA,decB,incA,incB: OUT STD_LOGIC); END anjian;ARCHITECTURE behav OF anjian ISSIGNALres2,res1,re,incA2,incA1,incB2,incB1,decA2,decA1,decB2,decB1,pause2,p ause1,pause_s,pause_s1,reset2,reset1,dec1,dec2:STD_LOGIC;BEGINPROCESS(S7,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENres2<=res1;res1<=S7;END IF;re<=res1 AND (NOT res2) AND clk2;END PROCESS;PROCESS(S1,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENincA2<=incA1;incA1<=S1;END IF;incA<=incA1 AND (NOT incA2) AND clk2; END PROCESS;PROCESS(S2,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENincB2<=incB1;incB1<=S2;END IF;incB<=incB1 AND (NOT incB2) AND clk2; END PROCESS;PROCESS(S3,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdecA2<=decA1;decA1<=S3;END IF;decA<=decA1 AND (NOT decA2) AND clk2; END PROCESS;PROCESS(S4,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdecB2<=decB1;decB1<=S4;END IF;decB<=decB1 AND (NOT decB2) AND clk2; END PROCESS;PROCESS(S5,clk2)BEGINIF(clk2='0' AND clk2'EVENT) THENpause2<=pause1;pause1<=S5;pause_s<=pause1 AND (NOT pause2) AND clk2; END PROCESS;PROCESS(pause_s)BEGINIF(re='1')THENpause_s1<='0';ELSIF(pause_s='1'AND pause_s'EVENT) THEN pause_s1<=NOT pause_s1;END IF;pause<=pause_s1;END PROCESS;PROCESS(S6,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENreset2<=reset1;reset1<=S6;END IF;reset<=reset1 AND (NOT reset2) AND clk2; END PROCESS;PROCESS(S8,clk2)BEGINIF(clk2='1' AND clk2'EVENT) THENdec2<=dec1;dec1<=S8;END IF;dec<=dec1 AND (NOT dec2) AND clk2;END PROCESS;END behav;三、引脚分配表四、设计结果当按下S7时,系统复位,液晶屏显示000:000 1st,数码管显示12 00 24当24秒时间到了,则16个led灯全亮,比赛暂停:。
篮球计时计分器设计
篮球计时计分器设计摘要单⽚机发展极为迅速,⾃从问世以来就以极⾼的性价⽐受到⼈们的关注,由于它体积⼩,环境适应性好,价格低,易开发,所以在各个领域都得到了推⼴。
⼴泛应⽤于智能仪器仪表、⼯业控制、家⽤电器、计算机⽹络、医疗设备、汽车设备等领域中。
当前世界上各⼤芯⽚公司都推出了⾃⼰的单⽚机,从8位、16位到32位等,但它们各具特⾊,互成互补,为单⽚机的应⽤提供了⼴阔的天地。
本次设计就是采⽤单⽚机AT89C51编程控制 7段共阴LED数码管作显⽰的篮球⽐赛计时计分系统。
在体育⽐赛的计时计分系统中包括测量类、评分类、命中类、制胜类、得分类等多种类型。
⽽篮球⽐赛时根据运动队在规定时间内得分多少来决定胜负的,因此篮球⽐赛的计时计分器是⼀种得分类型的系统。
本系统采⽤模块化设计,主体部分可分为计时显⽰模块、计分显⽰模块、定时报警模块、按键控制模块。
利⽤Keil C51软件进⾏编程,程序编写完成后通过编译⽣成HEX⽂件装⼊AT89C51芯⽚中,采⽤仿真软件Proteus检验功能是否能够正常实现。
最后采⽤Protel DXP画出电路原理图并⽣成印刷电路板图。
本系统由计时电路、计分电路、报警电路和控制电路四个电路组成。
篮球⽐赛计时计分器的主要功能有赛程时间设置、赛程时间启动/停⽌设置、⽐分交换控制和⽐分刷新控制等。
它具有很⾼的灵活性,同时操作步骤也很简单且具有低功耗,可靠性,安全性以及低成本等特点。
关键词:单⽚机;篮球⽐赛计时计分器;AT89C51AbstractSCM develops rapidly since its inception to the high price people pay attention, because of its small size, adaptability to environment, low price, easy to develop, so in all fields have been promoted. Widely used in smart instrumentation, industrial control, home appliances, computer networks, medical equipment, automotive equipment, and other areas. Currently the world's major chip companies have launched their own microcontroller, from the 8-bit, 16-32, etc., but they are distinctive, each into a complementary application for the microcontroller provide a vast world。
篮球计时记分
一设计总体思路篮球计时记分系统的计时部分包括每节比赛的12分钟,以及每次进攻的24秒。
这两个模块可以利用12进制,60进制,以及24进制的减法计数器来表示。
用一个四位的循环移位寄存器连接四个LED来表示比赛的四个赛节。
计分模块可以使用2个可逆计数器来分别表示双方的比分。
其中,使用一个数据选择器来选择得分的一方。
在得分后,24秒的计数器需要清零,以表示下一次进攻的开始。
程序总体框图为:二单元电路设计2.124秒减法计数器24秒减法计数器是用来显示每一次进攻的时间。
根据实际比赛需要,在每一次得分后,无论24秒是否结束计数器都要清零。
若在24秒内没有打完一次进攻,则需要在24秒结束后发出报警信号。
为了实现这个目的,所以将得分器的输出信号作为24秒计数器的清零端。
当CLK有效时进行减法计数,CR等于1时整个计数器清零,EN等于1时计数器暂停计数。
当计数器减到0之后,CO输出一个高电平,即报警信号。
程序可以表示为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY c24 ISPORT( clk : IN STD_LOGIC;cr : IN STD_LOGIC;en : IN STD_LOGIC;co : OUT STD_LOGIC;q1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);y10: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END c24;ARCHITECTURE a OF c24 ISSIGNAL bcd1n : STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL vcd10n : STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINPROCESS (clk,cr)BEGINIF (cr = '0') THENbcd1n <= "0000";ELSIF (clk'EVENT AND clk = '1') THENIF ((bcd1n=0) and (vcd10n=1 or vcd10n=2)) THENbcd1n<="1001";ELSEIF ((bcd1n=0) and vcd10n=0 ) THENbcd1n <= "0011";else IF (en='1') THENbcd1n <= bcd1n - 1;ELSE bcd1n <= bcd1n;END IF;END IF;END IF;END IF;END PROCESS;q1 <= bcd1n;y10<=vcd10n;PROCESS (clk, cr)BEGINIF (cr = '0')THENvcd10n<="0000";ELSIF (clk'EVENT AND clk = '1') THENif(vcd10n=0 and bcd1n=0)thenvcd10n<="0010";elsIF (en='1'and bcd1n=0) THENvcd10n <= vcd10n - 1;ELSEvcd10n <= vcd10n;END IF;END IF;END PROCESS;PROCESS (bcd1n,vcd10n)beginif (bcd1n=0 and vcd10n=0) thenco<='1';else co<='0';END IF;END PROCESS;END A;仿真波形如下:2.212进制减法计数器这个计数器用来表示每一节比赛的分钟位,它的时钟脉冲应由前一个60进制计数器的CO提供。
篮球计时记分操作说明
篮球计时记分操作说明一、引言篮球比赛中的计时记分系统是比赛的核心组成部分,对于保证比赛的公正性和准确性至关重要。
本文将详细阐述篮球计时记分系统的操作流程和注意事项,帮助相关工作人员更好地理解和掌握该系统。
二、操作流程1、开场准备:在比赛开始前,计时员需要检查记分板和计时器是否工作正常,确认比分初始值为0。
同时,要与裁判员确认比赛时间规则和暂停次数。
2、比赛开始:当裁判员吹响比赛开始的哨声时,计时员需要按下计时器开始按钮,让比赛计时开始。
3、计时操作:每场比赛有四个计时器,分别对应四个节。
在每个节的比赛开始和结束时,计时员需要手动按下开始和结束按钮。
同时,裁判员会在每个节开始和结束时吹哨,提供清晰的时间点。
4、暂停操作:当球队请求暂停时,计时员需要记录暂停次数,并在记分板上更新比分。
同时,需要与裁判员确认暂停时间是否超出规定时间。
5、比赛结束:当裁判员吹响比赛结束的哨声时,计时员需要立即停止计时器,并确认比赛时间是否超出规定时间。
如果比赛时间未超出规定时间,则比赛结束;否则,需要进行加时赛。
6、加时赛操作:如果需要进行加时赛,计时员需要在记分板上更新比分,并重新开始计时器。
加时赛的规则和正常比赛相同。
7、赛后整理:比赛结束后,计时员需要将比赛数据整理保存,以便后续分析和统计。
三、注意事项1、准确性:计时员需要时刻保持注意力集中,确保准确记录比赛时间和比分变化。
2、公正性:在处理暂停、犯规等情况下,计时员需要遵循裁判员的判断,保证比赛的公正性。
3、及时性:计时员需要在规定时间内完成各项操作,如暂停记录、比分更新等,确保比赛的顺利进行。
4、稳定性:在比赛过程中,计时员需要保持稳定的心态,应对突发情况,如设备故障、比分争议等。
5、培训与沟通:计时员需要定期参加培训,熟悉比赛规则和操作流程。
同时,要加强与裁判员和其他工作人员的沟通协作,确保比赛过程的顺利进行。
6、预防与处理:在比赛前,计时员需要对设备进行仔细检查,预防可能出现的问题。
单片机课程设计——篮球计时计分器
单片机课程设计报告篮球比赛计时计分器设计2009年6月18日摘要本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计分器。
本设计采用定时器T0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极LED显示。
计时部分计时范围宽,而且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足各种规模赛程需要。
两个显示模块均采用动态扫描方式显示。
在本设计中P3口(P3.0——P3.3)是计时计分显示共用的扫描口,P0口是计时数据输出口,P2口是计分数据输出口,计时计分均设有显示缓冲区(40H ——43H计分显示缓冲区,30H——33H计时显示缓冲区)。
本设计共有K1——K5六个设置按键,K1是甲加分建(按一次加一分),K2是乙加分键(按一次加一分),K3是定时切换键(定时设置与计时调时切换),K4是分钟调整键(计时与定时分钟调整),K5是分数位置交换键(交换甲、乙两队比分的位置)。
按键与P1口相接,低电平输入有效.。
报警部分由扬声器组成,当计时时间到时,输出低电平有效,由P1.3口输出脉冲信号驱动扬声器发出声音。
计时定时的原理与定时闹钟相同,为定时设置定时分钟计数单元,通过比较定时与计时的分计数单元判断比赛是否结束是否报警,定时与计时共用一个显示缓冲去,通过K3(定时切换键)进行显示切换,本设计可通过定时显示的秒位判断定时是否有效,如果秒位显示00说明无效(上次用过的定时),显示11说明有效(本次定时)。
定时时间到,扬声器报警,比赛结束,按K3键可停止报警(否则一直报警)。
关键词:单片机篮球计时计分器数码管按键报警器目录1 概述 (3)1.1单片机简介 (3)1.2课程设计的意义 (4)1.3任务与要求 (4)2 系统总体方案与硬件设计 (5)2.1、系统总体方案设计 (5)2.2、硬件系统设计 (5)2.2.1单片机的选择 (5)2.2.2、时钟电路模块 (6)2.2.3、复位电路模块 (7)2.2.4、按键控制模块 (8)2.2.5、数码管显示原理 (8)2.2.6、定时报警模块 (9)3、软件设计 (10)3.1、程序流程图 (10)3.2、程序分析 (11)4 PROTEUS软件仿真 (12)4.1、简介 (12)4.2、仿真过程 (12)5、调试分析 (15)6、课程设计心得体会 (16)参考文献: (16)附1、源程序代码 (17)附2、系统原理图 (24)1 概述1.1单片机简介单片机是指一个集成在一块芯片上的完整计算机系统。
篮球计时计分器
1.2基本功能介绍………………………………………………………………………3
1.2.1比赛时间设置………………………………………………………………3
1.2.2按键及操作说明………………………………………………………………3
1.2.3比赛结束………………………………………………………………3
关键词:单片机;计时计分;AT89SC52;1602LCD;实时显示
Abstract
This design is based on the basic rules of basketball as the basis, to realize the real-time control of the basketball match. The hardware of system is mainly composed of singlechip AT89C52, 1602LCD, alarm circuit, a power switch / reset circuit, button control circuit of 5 parts. The part of software is programmed by C language to control the hardware, to display the scoring etc.. The design of the time basketball scoring device can carry out real-time display of scoring basketball game process, but also on the emergency situation in the game pause / continue processing. At the end of the game, the two teams score statistics can beselected, which team will win the game.
篮球比赛计时计分器
篮球比赛计时计分器篮球比赛计时计分器是一种用于帮助裁判员和观众准确记录篮球比赛时间和比分的设备。
它在篮球比赛中起着至关重要的作用,不仅能够提供准确的时间和比分数据,还能够帮助裁判员控制比赛的节奏和做出正确的判决。
一、计时计分器的基本功能篮球比赛计时计分器通常具有以下基本功能:1. 比分显示功能:计分器能够显示双方队伍的得分情况,包括总分和当前分数。
2. 时间显示功能:计分器能够显示比赛的剩余时间,包括总时间和当前时间。
3. 比赛阶段显示功能:计分器能够显示比赛的阶段,如四节制比赛中的第一节、第二节等。
4. 比赛控制功能:计时计分器可根据裁判员的操作进行比赛控制,例如开始/暂停比赛、结束比赛等。
二、计时计分器的特殊功能除了基本功能外,一些高级的篮球比赛计时计分器还具有一些特殊功能,以满足不同比赛场景的需求:1. 分段计时功能:对于某些需要分段计时的比赛,计分器可以提供定时器,用于记录比赛各个阶段的时间,如篮球训练中的分组练习。
2. 超时计时功能:在篮球比赛中,每队通常有若干次暂停机会,计分器可以倒计时并提醒裁判员和队伍剩余暂停次数。
3. 预设比赛时间功能:有些比赛需要设定固定的比赛时间,计分器可以接收设定的比赛时间,并在比赛结束时自动停止计时。
4. 串口输出功能:一些高级计分器还可以通过串口输出比分和时间数据,以便于其他系统进行数据采集或显示。
三、计时计分器的使用注意事项为了确保计时计分器的正常运行和数据准确性,以下是一些使用注意事项:1. 操作规范:裁判员和工作人员应该熟悉计分器的使用方法,并按照规范进行操作,避免误操作导致计分器故障或数据错误。
2. 维护保养:计分器需要定期进行维护保养,包括清洁、更换电池等,以保证其长期稳定运行。
3. 备用计分器:在重要比赛或关键场合,应准备备用计分器,以防止计分器故障影响比赛进行。
4. 安全防护:计分器应放置在安全可靠的位置,避免因外力或触碰而造成损坏或数据错误。
篮球电子计分器操作方法
篮球电子计分器操作方法篮球电子计分器是一种用于计分和计时的设备,广泛应用于篮球比赛中。
操作篮球电子计分器可以帮助裁判、教练和观众准确记录比赛进展和结果。
下面将详细介绍篮球电子计分器的操作方法。
1. 打开电子计分器大多数篮球电子计分器都有一个开关按钮,通常位于设备的一侧或底部。
按下开关按钮,电子计分器的屏幕将亮起,并显示默认的初始数字。
2. 设置比赛时间在大多数篮球比赛中,比赛时间一般为四个十分钟的节,每个节之间还包括两分钟的休息时间。
操作电子计分器设置比赛时间的方法通常如下:- 按下或旋转计时器上的"分钟/秒钟" 按钮或旋钮,以调整比赛时间。
- 按下或旋转计时器上的"加号" 和"减号" 按钮或旋钮,以调整时间的分钟或秒钟。
一般来说,比赛开始时将时间设置为40分钟(4个十分钟的节),每个节之间的休息时间设置为2分钟。
当倒计时开始,屏幕上会显示剩余比赛时间。
3. 记录比分篮球电子计分器通常具有两个用于记录比分的屏幕:主队得分屏幕和客队得分屏幕。
记录比分的操作方法如下:- 按下主队得分屏幕上的加减按钮,可以增加或减少主队的得分。
- 按下客队得分屏幕上的加减按钮,可以增加或减少客队的得分。
比分屏幕通常显示两个数字,一个用于表示主队的得分,另一个用于表示客队的得分。
当按下加分按钮时,屏幕上的数字会增加对应的分数。
当按下减分按钮时,屏幕上的数字会减少对应的分数。
4. 控制暂停和恢复比赛篮球比赛中,通常有各种原因需要暂停比赛,比如叫暂停、换人或其他情况。
电子计分器通常具有暂停和恢复比赛的功能,操作方法如下:- 在电子计分器上找到暂停按钮,按下该按钮可以停止比赛计时,并将屏幕上的时间暂停在当前秒数。
- 按下恢复按钮,可以恢复比赛计时,使屏幕上的时间继续递减。
5. 重置计时器和比分比赛结束后,需要将计时器和比分重置为初始状态,准备下一场比赛。
操作方法通常如下:- 按下电子计分器上的重置按钮,可以将比赛时间设置为初始时间,将比分归零。
基于单片机的篮球赛计时记分器设计
篮球赛计时计分器设计院系自动化学院专业自动化班级学号姓名指导教师负责教师摘要体育比赛中的计时计分系统是对体育比赛过程中所产生的时间、比分等数据信息进行快速采集、加工处理、传递和利用的系统。
此系统能否清晰、稳定、精确的反应体育比赛中的客观数据,直接影响到比赛的公平性和公正性。
本文针对上述情况研制了篮球赛计时计分器。
该系统以单片机为核心,利用7段共阴LED作为显示器件。
为了调整比赛中的时间和比分,在本设计中设立了8个按键,分别用于记录甲、乙两队的分数,设置赛程时间,调整赛程时间,启动和暂停赛程时间等功能,本系统还设计了定时报警系统。
实践证明,该系统精度高、稳定性好、抗干扰性强,具有一定的应用前景。
关键词:计时器;计分器;单片机;LED显示AbstractThe system of time and score recorded in the sporting games is the one like this: the data about time and socres that generated in the process of the games can be collected rapidly, processed, transmited and be used. If the system can reflect the objective data in the games clearly, stably and accurately, it will affect the fairness and impartiality of the games. According to this, calculagraph and scores recorder of the basketball games are researched and designed in this paper. The core of the system is the MCU, using seven segments LED as the display. In order to adjusting the time and the scores of the game, eight keys are used in this paper. The functions of these keys are: recording the scores of the team A and B, setting up or adjusting the time of the game, and starting or suspending the time of the game. The timing alarm system is also designed in the system. Experiments has proved that the system has high precision, good stability, strong anti-interference and it have a application prospects.Key words: calculagraph;scores recorder; MCU; LED display目录第1章绪论 (1)1.1 课题背景 (1)1.1.1 篮球赛计时计分器发展过程 (2)1.1.2 篮球赛计时计分器研究目的与意义 (2)1.2 课题任务及要求 (3)1.3 课题内容及安排 (3)第2章篮球赛计时计分器的总体方案论证 (4)2.1 篮球赛计时计分器的硬件方案论证 (4)2.2 篮球赛计时计分器的软件方案论证 (5)2.3 篮球赛计时计分器部分器件方案论证 (6)2.3.1 硬件译码与软件译码的比较 (6)2.3.2 CD4511与MC14495的比较 (8)第3章篮球赛计时计分器的硬件设计 (11)3.1 球赛计时计分器的工作原理 (11)3.2 计时电路的设计 (11)3.2.1 计时电路的工作原理 (12)3.2.2 赛程时间设置 (13)3.2.3 赛程时间启/停设置 (14)3.3 计分电路的设计 (14)3.3.1 计分电路的工作原理 (14)3.3.2 比分交换控制的实现 (14)3.3.3 比分刷新控制器 (14)3.3.4 比分校正控制电路 (16)3.4 报警电路设计 (16)3.5 单片机的选择 (17)3.6 显示电路的设计 (18)3.7 复位电路的设计 (20)第4章篮球赛计时计分器的软件设计 (22)4.1 监控程序设计 (22)4.2 计时显示子程序设计 (23)4.3 计分显示子程序设计 (25)4.4 LED显示子程序设计 (27)第5章篮球赛计时计分器的整体调试 (29)5.1 调试分析 (29)5.2 故障调试及解决方式 (30)5.3 联调结果 (32)结论 (35)社会经济效益分析 (37)参考文献 (38)致谢 (40)附录Ⅰ篮球赛计时计分器的硬件原理图 (41)附录Ⅱ程序清单 (42)附录Ⅲ元器件清单 (565)第1章绪论在我们生活的大千世界上,人类已进入了科学技术空前发展的信息社会。
篮球比赛计时计分器
毕业设计(论文)篮球比赛计时计分器设计学号:08100000姓名:木云三告专业:自动化系别:电子信息与控制工程系指导教师:郭彬讲师二○一二年六月摘要单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小、重量轻、能耗低、价格便宜、可靠性高、抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用。
目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位,许多用单片机做控制的球赛计时计分系统也应运而生,如:用单片机控制LED七段显示器计时计分器等。
篮球计时计分器以单片机为核心,由计时器、计分器、综合控制器等组成。
系统采用模块化设计,主体分为计时显示模块、计分显示模块、定时报警、按键控制键盘模块。
每个模块的程序结构简单、任务明确。
程序可读性好,对程序的修改可局部进行,其他部分可保持不变。
编程后利用Keil C51软件来进行编译,采用Proteus软件仿真,检验功能是否能够正常实现。
本设计中系统硬件电路主要由以下几个部分组成:单片机AT89C52、计时电路、计分电路、报警电路和按键开关。
本次设计用由AT89C52编程控制LED七段数码管作显示的球赛计时计分系统。
该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩以及赛后成绩暂存等功能。
它具有价格低廉、性能稳定、操作方便并且易于携带等特点,广泛适合各类学校或者小型团体作为赛程计时计分。
关键词:单片机;篮球赛计时;篮球赛计分;显示器ABSTRACTSCM since the nineteen seventies since, with extremely high price and more attention, so the application is very wide, development is very rapid. As the single-chip high integration, strong function, good versatility, especially it has the advantages of small volume, light weight, low energy consumption, low price, high reliability, strong anti interference ability and convenient use and other unique advantages, so that the chip has been promoted rapidly application. Has now become a measurement control in the application system of optimization models and new electronic product key parts, many do MCU control of match time scoring system also emerge as the times require, such as: using MCU to control LED seven segment display time scoring device. Time basketball scoring device with single chip computer as the core, by the timer, scoring device, integrated controller.The system adopts modular design, main body is divided into a timing display module, display module, timing alarm, scoring keys to control the keyboard module. Each module of the program is simple in structure, clear mission. Program readability, modification of programs can be local, the other part can be kept constant. After programming using Keil C51software to compile, use Proteus software simulation, test function to normal implementation. The design of the system hardware circuit is mainly composed of the following components: SCM AT89C52, a timing circuit, scoring circuit, the alarm circuit and the key switch.The design used by the AT89C52 programming control of LED seven digital tube display game timing and scoring system. The system has a race timing settings, schedule time to pause, timely refresh a and B both score and the game after the temporary success function. It has the advantages of low cost, stable performance, convenient operation and easy portability and other characteristics, are widely suitable for all types of schools or small groups as schedule time scoring.Key words: single chip timing; basketball; basketball score ;display目录摘要 (i)ABSTRACT ...................................................................................................................... i i 目录 ............................................................................................................................. i ii 第1章绪论 .. (1)1.1国内外的研究现状分析: (1)1.2设计目的: (1)1.3设计内容 (2)第2章系统硬件介绍 (3)2.1 MCS-51单片机简述 (3)2.1.1单片机AT89C52简介 (3)2.1.2 主要特性: (4)2.1.3 管脚说明: (4)2.1.4 中断 (6)2.1.5 Flash存储器的编程 (7)2.1.6 空闲节电模式 (7)2.1.7 掉电模式 (8)2.1.8 程序储存器的加密 (9)2.1.9 AT89C52的极限参数 (9)2.2 报警器 (9)2.2.1 报警器的分类 (9)2.2.2 报警器工作原理 (9)2.3 芯片74HC154 (9)2.3.1 简介 (10)2.3.2 引脚说明 (10)2.4 RESPACK—8 (10)2.5 显示器及接口 (11)2.5.1 显示器介绍 (11)2.5.2结构与原理 (11)2.5.3 LED显示器显示方式 (13)第3章电路方案设计 (16)3.1 功能控制电路 (16)3.2 时钟产生方式 (17)3.3 复位电路 (17)3.4 显示电路 (18)3.5电路总图 (19)第4章软件设计与流程图 (20)4.1 软件keil的简介与应用 (20)4.2 部分程序设计 (21)4.2.1 计时程序 (21)4.2.2 计分程序 (22)4.2.3 程序总流程图 (22)第五章仿真 (24)5.1 Proteus简介 (24)5.2 Proteus功能特点 (24)5.3 proteus的应用 (25)5.4 电路仿真 (26)结论 (27)致谢 (28)参考文献 (29)附录一 (30)附录二 (33)附录三 (41)第1章绪论1.1国内外的研究现状分析单片机自面世以来,以其体积小、价格低、功能强、可靠性高等特点倍受人们的青睐。
基于51单片机的篮球计时计分器
基于51单片机的篮球计时计分器目录摘要 (1)Abstract (2)绪论 (3)1.设计原理 (4)1.1原理图设计 (4)1.2各元器件介绍 (5)1.2.1数码管介绍 (5)1.2.2排阻 (5)1.2.3AT89C52单片机芯片 (6)1.3各部分电路分析 (8)1.3.1振荡电路 (8)1.3.2外部复位电路 (8)1.3.3开关电路 (9)1.3.4显示电路 (9)1.3.5扬声器电路 (10)3.软件设计 (11)3.1设计思路 (11)3.2设计框图 (12)3.3编程前的准备 (13)4仿真结果 (14)6心得体会 (16)附录 (17)本科生课程设计成绩评定表 ................................... 错误!未定义书签。
摘要篮球比赛计分器的设计是为了解决篮球比赛时计分与计时准确方便和灵活适用的问题而提出的,我组设计的篮球比赛计分器硬件部分主要利用AT89S52单片机完成了计分与计时的功能,并通过两个四位七段数码管分别用来显示比赛时间和甲、乙比赛双方的分数,软件部分利用Keil C51软件来进行编译,通过Proteus软件进行仿真,最后将生成的HEX 文件烧入到单片机芯片中。
采用该系统可根据实际情况进行时间的准确显示和比分修改,具有低功耗、可靠性强、安全性高以及低成本等特点,主要不足之处在于计时显示部分有时会出现显示不稳定的情况,基本满足了本次设计要求。
关键词:单片机;篮球赛计分;篮球赛计时;数码管AbstractBasketball match score indicator is designed to solve the basketball game scoring and timing is accurate, convenient and flexible applicable problem, and that my 14-year-old basketball game hardware part of the group design mainly USES AT89S52 MCU to complete the scoring and timing functions, and through the two four seven segment digital tube is used to display the match time and party a and b both sides score, software part use Keil C51 software to compile, through the Proteus software simulation, finally will generate burn-in HEX file to the MCU chip. Using the system can according to the actual situation to the accurate display and modify the score of time, with low power consumption, high reliability, safety and low cost etc., the main shortcoming in the timer display part can appear sometimes unstable situation, basic meet the requirement of the design.Key words: single chip microcomputer; The basketball game scoring; The basketball game timing; Digital tube绪论体育比赛计时计分系统是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录,加工处理,传递数据的信息系统。
基于单片机的篮球赛计时计分器单片机期末课程设计报告
目录第1节引言 (1)1.1本设计的任务和主要容 (1)第2节系统主要硬件电路设计 (2)2.1 单片机控制原理 (2)2.2 单片机主机系统电路 (3)2.2.1计时电路 (4)2.2.2计分电路 (6)第3节系统的软件设计 (7)3.1 篮球赛计时计分器程序源代码 (7)3.2篮球赛计时计分器程序流程图 (17)结束语 (18)参考文献 (19)基于单片机的篮球计时计分器第1节引言随着单片机载各个领域的广泛应用,许多用单片机作控制的球赛计时计分器系统也应运产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分器等。
本文介绍一种有AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。
本系统具有赛程定时设置、赛程时间暂停、及时刷新甲、乙队双方的成绩以及赛后成绩暂存等功能。
它具有价格低廉、性能稳定、操作方便且易携带等特点。
广泛适合各类学校和小团体作为赛程计时计分。
1.1本设计的任务和主要容这次课程设计的主要任务是:设计制作一个用于赛场的篮球赛计时计分器。
主要容如下:①能记录整个赛程的比赛时间,并能修改比赛时间、暂停比赛时间。
②能随时刷新甲、乙两队在整个赛程中的比分。
③中场交换比赛场地时,能交换甲、乙两队比分的位置。
④比赛时间结束时,能发出报警指令。
第2节系统主要硬件电路设计2.1 单片机控制原理图2-1 球赛计时计分器系统图2.2 单片机主机系统电路本系统采用单片机AT89C51作为本设计的核心元件。
利用7段共阴LED作为显示器件。
在此设计中共接入10个7段共阴LED显示器,其中6个用于记录甲、乙两队的分数每队3个LED显示器显示分数围可达到0-999分,足够满足赛程需要。
另外4个LED显示器则用来记录赛程的时间,其中2个用于分钟;2个用于显示秒钟。
赛程设计采用倒计时方式。
即比赛前将时间设置好,比赛开始启动计时,直至计时到零为止。
计时围可达到0~99分钟也满足实际赛程的需要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湘潭职业技术学院毕业设计题目篮球赛计时计分器学生姓名专业应用电子指导教师班级电子053012007年6月13日目录前言一、功能说明……………………………………二、效果图……………………………………三、使用说明……………………………………四、原理图及工作原理…………………………五、PCB………………………………………六、主要芯片资料应用说明……………………七、程序框图及说明……………………………八、调试…………………………………………九、总结…………………………………………十、参考文献……………………………………十一、附录(原程序)…………………………前言在之前的篮球比赛记录中,人们多用手写记录数据,到了赛程结束的时候,也是人们用哨子或枪声作为结束的暗号。
随着中国体育的发展,中国在国际上的运动知名度越来越高,体育设备也越来越完善。
渐渐地,篮球赛的出赛频率也越来越高了,很多学校、单位都开展了此类活动。
人们开始使用翻牌计时计分器来记录球赛的赛程情况。
此器具价格低廉、易随身携带,但无法记录赛程时间,且性能不很稳定,一旦遇到狂风暴雨就可能消除数据。
为了方便各类学校和小团体篮球赛的赛程清楚的显示,我们利用单片机AT89S51编程控制LED七段数码管设计了能显示的球赛计时计分器。
同之前的记录器相比,它具有价格低廉、性能稳定、操作方便、易随身携带、功能多、运用范围广且扩展范围大等特点。
还具有赛程定时设置、赛程时间暂停、及时刷新甲、乙队双方的成绩、赛后成绩暂存以及定时报警(比赛时间到时,我们立即通过蜂鸣器发出报警声,提示整个赛程结束)等功能。
为记录篮球赛情况减少了人力和脑力资源,也为以后的全自动化奠定扎实的基础。
因为时间和精力的问题,我们暂时只设计到此,以后还要不断的去扩展、完善,如:1.增加结束前15分钟的自动报时系统;2.可以设计双面功能:篮球赛时可作计时计分器,赛后可作为挂表,预报时间。
3.增加赛时的场比系统等。
通过制作篮球计时计分器,我们更加熟悉、了解有关单片机开发设计实例,并加深了对单片机的理解和运用以及掌握单片机与外围接口的一些方法和技巧。
一、功能说明:基于单片机系统的篮球赛计时计分器的系统构成框图如图5.1所示。
器件选择:本系统在设计过程中主要选取了一下一些器件:单片机:AT89S51。
四—七段BCD译码芯片:CD4511。
并行/串行转换芯片:CD4094。
显示器件:7段共阴LED显示器。
按键:欧姆龙按键。
本系统采用单片机AT89S51作为本设计的核心元件。
利用7段共阴LED作为显示器件。
在此设计中共接入10个7段共阴LED显示器,其中6个用于记录甲、乙两队的分数,每队3个LED显示器显示分数范围可达到0—999分,足够满足赛程需要。
另外4个LED 显示器则用来记录赛程的时间,其中2个用于显示分钟,2个用于显示秒钟。
赛程计时采用倒计时方式。
即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。
计时范围可达到0—99分钟,也完全满足实际赛程的需要。
其次,为了配合计时器和计分器校正、调整时间和比分,我们特定杂一本设计中设立了7个按键。
其中4个用于输入甲、乙两队的分数;另外3个则用于完成设置、调整、启动和暂停赛程时间等功能。
再次,我们还设计了定时报警系统,即比赛时间到时,我们立即通过扬声器发出报警声,提示整个赛程结束。
二、效果图三、使用说明3.0球赛计时计分器的工作过程整个篮球计时计分器的工作过程如下:首先在比赛之前,接通电源,系统复位,此时计时电路与计分电路中的共阴极数码管全部显示为0000和000 000;然后我们按计时电路中的K2按键来设置比赛时间的十位数,例如比赛时间上半场为20分钟,则通过K2即可。
一般比赛时间为40分钟,所以只需按K2显示4,按K3显示0即可。
时间设置好时,等待赛程开始,当裁判吹响开始哨声时,立即按K4键,启动计时,这时计时电路便工作,计时采用倒计时方式,即从20分钟减为0分钟表示上半场结束。
上半场结束时,蜂鸣器会发出10秒钟响声,通知上半场结束,这时按一下K9键,便完成了甲、乙两队的分数交换。
在整个赛程中,我们还要对两队比分进行及时刷新,这时我们通过计分电路中的K5~K9键完成此功能,K5和K6键完成甲队加、减分,K7和K8完成乙队加、减分。
按键每按一下,表示加或减1分,K9键完成分数交换。
由于加、减分我们采用中断完成,且加、减分的中断优先权小于计时电路的中断优先权,所以不会对计时电路造成影响。
如果在赛程过程中,一方教练申请暂停时,经裁判批准,我们立即按K4键,即可以暂停计时,暂停时间到时,在按K4键继续计时,直至上半场赛程结束,蜂鸣器会发出响声。
下半场同上半场一样。
3.1 赛程时间设置在图5.9所示的计时电路中,按键开关K2、K3用来设置赛程时间。
比如:比赛时间上半场时间为20分钟,则通过按K2键,使数码管1显示“2”即可;再按K3键,设置比赛时间的个位数,使数码管2显示“0”即可。
一般比赛时间为40分钟,所以只需要按K2键使数码管1显示“4”,按K3使数码管2显示“0”即可。
时间设置好后,等待赛程开始。
当比赛结束时,如果由于一些特殊原因需增加比赛时间,这时增加比赛时间同样由按键开关K2、K3用来设置,且方法跟上面一样,但一般情况下只需按K3设置即可。
因为加赛时间只有几分钟。
3.2 赛程时间启/停设置当时间设置完后,比如设置赛程时间为45分钟,则在图5.9所示的LED显示器上则显示为4500,45表示分钟,00表示秒钟。
这时,如果裁判吹响开始哨声时,则应立即按下按键K7,表示赛程开始,计时显示则由4500变成4459,4458…直计为0000时表示赛程结束。
如图5.9所示,按键K4为赛程启动和暂停控制。
3.3 比分交换控制比分交换控制由图5.9所示的K9键完成。
我们知道,因为比分交换是在上半场赛程结束进行的,也就是说比分交换受赛程时间控制,只有当上半场计时器指示为0000时,按K9键,则会自动交换甲、乙两队分数。
如果上半场赛程时间没有到0000时,则此时按下K4键,只会暂停比赛,不能交换分数。
如果要继续赛程,再按一次K4即可。
因此,K4键完成二重功能,即:启动、暂停、。
3.4 比分刷新控制由于在比赛中,甲、乙两队的比分是不断变化的,所以需设置比分刷新控制装置;此部分功能由图5.14所示的计分电路中的按键开关K5—K8完成:K5 键:完成甲队加1分操作;K6 键:完成甲队减1分操作;K7键:完成乙队加1分操作;K8键:完成乙队减1分操作。
3.5 计分计时显示计分计时显示器是采用7段共阴LED显示器显示。
其中计分是用6个LED显示器,计时用4个LED显示器;显示格为000 000和00 00。
3.6 赛程结束报警当比赛结束时,系统会自动发出报警声,提示赛程结束。
四、原理图及工作原理4.1 原理图4.2 计时电路工作原理计时电路如图 5.9所示,主要由按键开关K2~K3,单片机AT89S51,译码器以及LED显示器构成。
其工作过程如下:当调时(十位)开关K2按下时,产生一个低电平;立即数00H取出,同时对应调分(十位)控制端P2.0的LE输出高电平,表示此时可以向调分(十位)的CD4511发送数据,但CD4511的输出端a~g不会有输出,因为LE=1时,CD4511锁存。
这时只要将要显示数据的代码经P1口的P1.0送到CD4511的输入端A~D端,送完后,将LE清零。
这时便可以将要显示数据的代码经CD4511译码后,从输出端a~g 输出,送LED显示器显示。
调时按键开关每按一次,数字自动加1,直到调到需要设置的时间即可。
调时(个位)的操作方法与上一样。
时间设置完后,启动定时器T0开始定时计数。
计时采用倒计时,比如:设置的时间为45分钟,则在LED上显示4500四位数。
定时T0计数60秒后中断返回,继续定时计数下一个60秒;同时则在4位LED显示器上显示4459四位数,表示时间已过去1秒钟,即为44分59秒。
这样一直持续下去。
直到变为“0000”时表示赛程结束。
如果比赛中,裁判叫暂停,则只要按一下K4键,即可暂停计时。
4.3 计分电路的工作原理计分电路主要由单片机AT89S51、串/并转换器、LED显示器以及按键开关组成。
其工作过程如下:按键开关K5~K8组成甲、乙两队加减分控制。
按键开关K5~K8一端接地,另一端输入与单片机AT89S51的P3.5、P3.4、P0.2、P0.1。
当K5~K8四个按键的任何一个一位按下时,单片机发生中断,从而使相应LED显示。
因为按键开关按下时为低电平。
例如:现在以乙队加分为例,来说明整个过程。
假设比赛刚开始,双方比分为000 000,某一时刻后,当乙队加分时,则按下K7,这时K7=0(低电平),单片机AT89S51的P3.2脚为低电平,使其外部中断INT0发生中断,从而调用中断服务程序,将要显示的数据从程序中定义的LED显示常数表TAB中取出06H(因为LED显示常数表TAB的偏移地址为33H,33H首先是指向LED显示常数表TAB中第一个数据3FH的,当K7按下时,相当于将33H地址加1,这时便指向第二数据06H)经串行口发送端P3.0送至串/并转换器CD4094的输入端第2脚(数据输入DATA)。
由于串行口的工作方式设置为方式0。
所以在串行数据通过RXD引脚输出时,则TXD引脚会输出多位时钟作为移位脉冲。
将8位数据顺利送到CD4094中。
另外在RXD引脚输出数据的同时,单片机P3.7脚输出高电平给CD4094的第1脚STR(使能端控制),使前一片CD4094中的8位数据从QS移位至下一片CD4094输入端的第2脚。
在RXD 引脚输出数据过程中,连续使单片机P3.7脚输出6次高电平,这样便使6片CD4094中得到不同的显示代码。
然后使单片机P3.7脚输出低电平,将6片CD4094中显示代码送LED显示器显示,便得到显示为000 001。
因为,在程序中定义33H、34H、35H、36H、37H、38H,6个地址单元,分别对应乙队、甲队3个LED显示器在程序中定义的LED 显示常数表TAB中的偏移首地址。
单片机的RXD每次发送6个数据,分别33H、34H、35H、36H、37H、38H为偏移首地址单元里的数据。
例如:乙队加分表示以33H为偏移首地址的单元加1,指向第二个数据06H,其他以34H、35H、36H、37H、38H为为偏移首地址单元里的数据仍然指向第一个数据3FH,这样将这6个数据:06H、3FH、3FH、3FH、3FH、3FH经单片机的RXD发送出去,再在单片机P3.7脚输出的6次高电平作用下产生6次移位,便在6片CD4094中得到显示代码:3FH、3FH、3FH、3FH、3FH、06H。