当前位置:文档之家› 实训项目篮球记分牌单片机设计

实训项目篮球记分牌单片机设计

探※※※※※※※※次2009级学生单片机次课程设计单片机课程设计报告书课题名称篮球赛计时计分电路姓名学号院系通信与电子工程学院指导教师2012年6月14日篮球计时计分电路课程设计(湖南城市学院通电与电子工程学院电子信息工程专业,益阳,413000 )1设计任务设计目的1.了解计时计分器组成及工作原理。

2.进一步掌握计时计分器的设计方法3.进一步掌握芯片的逻辑功能及使用方法。

4.熟悉集成电路的引脚安排.。

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

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

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

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

设计要求1.画出总体设计框图,以说明计时计分器独立的功能模块组成,标出各个模块之间互相联系。

2.设计各个功能模块的电路图,加上原理说明。

3.选择合适的元器件,在面板上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除。

4.在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局,进行整个计时计分电路的接线调试2、设计思路与总体框图本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计 分器。

本设计采用定时器T0中断计时,显示部分分为计时和计分显示两部分, 均采用共阴极LED 显示。

单片机P3 口(一一)是计时计分显示共用的扫描口, P0 口是计时数据输出口, P2 口是计分数据输出口。

计时部分计时范围宽,而 且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足 各种规模赛程需要。

两个显示模块均采用动态扫描方式显示。

图1所示为计时计分器的总体框图。

▲图1 计时计分器结构框图3、系统硬件电路的设计、时钟电路MCS-51内部有一个用于构成振荡器的高增益反相放大器, 此放大器的 XTAL1 和 XTAL2,在 XTAL1 和 XTAL2 上外接时钟P0.0/AD0P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15输入和输出端分别是引脚 XTAL2C319189XTAL1XTAL2RSTPSEN ALE EAP0.0/A匸P0.1/ADP0.2/AD P0.3/AD P0.4/ADP0.5/ADP0.6/AD P0.7/AD P2.0/A P2.1/AP2.2/A1 P2.3/A1 P2.4/A1 P2.5/A1 P2.6/A1、按键控制电路P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C52P3.0/RX —011P3.1/TX P3.27INT P3.37INT P3.4/T)…P3.5/TP3.6/WR { P3.77R」15 1617源即可构成时钟电路。

有内部和外部两种时钟产生方式。

本设计采用的是外部方式。

C1、复位电路复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后, 撤销复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分 -合过程中引起的抖动而影响复位。

上电复位设利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc 相同,随着充电电流的减少, RST/Vpd 的电位下降,最后被嵌位在0V 。

按钮 电平复位是当按下按钮后,电源Vcc 通过电阻R 施加在单片机复位端 RST/Vpd 上,实现单片 机复位。

本设计采用的是上电 +按钮电平复位电路,是上电自动复位与按钮电平复位电路的组合,当振荡频率选时。

电容C 取10uF, R 取10K , Rs 取1K 。

U1U1191 XTAL1XTAL2RSTP0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7P2.0/A8 P2.1/A9P2.2/A10 ■PSEN P2.3/A11 ALE P2.4/A12 ■EAP2.5/A13 P2.6/A14P2.7/A15 P1.0/T2 P3.0/RXD P1.1/T2EX P3.1/TXD P1.2 P3.23/NT0 P1.3 P3.3/IMT1 P1.4 P3.4/TC P1 5 P3 5/T1 P1.6 P3.6/WR P1.7P3.7/RD18 9AT89C52设计采用的是用查询方式的,也就是把按键接在P1 口,用程序查询方式查询那个按键按U1下,执行相应的操作。

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

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

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

从高往低排列,写成二进制为01111110, 把他转化为16进制则为A2H本设计采用的是数码管动态显示。

、定时报警电路19 ,XTAL1XTAL2RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSEN P2.3/A11ALE P2.4/A12EA P2.5/A13P2.6/A14P2.7/A15P1.0/T2 P3.0/RXDP1.1/T2EX P3.1/TXDP1.2 P3.2/INT0P1.3 P3.3/INTTP1.4 P3.4/T0P1.5 P3.5/T1P1.6 P3.6/WRP1.7 P3.7/RD29~30—471891238AT89C52定式报警电路4、软件设计、程序流程图篮球比赛中,得分可分为1分、2分、3分三种情况,但为了方便我们在 这只设置加1分,得2分、3分的情况可用按2次、3次加1分得到。

还设置 了定是报警键。

根据这样的设计要求,结合数码管的显示以及52单片机中计数器的工作实现方式、接口应用、中断控制等可设计出程序流程图如下:U1913=2930」;XTAL1 P0.0/AD0 P0.1/AD1P0.2/AD2 XTAL2P0.3/AD3P0.4/AD4 P0.5/AD5P0.6/AD6 RSTP0.7/AD7 P2.0/A8 P2.1/A9P2.2/A10 ALE P2.4/A12 ■EAP2.5/A13 P2.6/A14P2.7/A15 P1.0/T2 P3.0/RXD P1.1/T2EX P3.1/TXD P1.2 P3.2/INT0 P1.3 P3.3/INT1P1.4 P3.4/T0 P1.5 P3.5/T1 P1 6 P3 6/W^MP1.7P3.7/RD ---三三二三二三_二三三程序初始化7^7<KEYI -O ?> 甲队加一分I——<<EY5=0?>-比分疇交换 比分设逻定时7/ liL :调塹分钟、程序分析本设计采用AT89S52单片机中的一个16位的定时/计数器T o ,分别由TH 和 TL o 组成,它们均是8位寄存器,在特殊功能寄存器中占地址 8AH-8DH 它们用 于存放定时或计数的初始值。

此外,内部还有一个 8位的方式寄存器TMO [和一 个8位的控制寄存器TCON用于选择和控制定时/计数器的工作。

5程序设计仿真在计算机中打开PROTEU 软件,建立新的项目,在元件库中选择相应的元 件,放在编辑窗口中,依次连线,组成仿真原理图计时工作仿真状态图:I半并产12345甲乙两队计分工作仿真状态图: 67896.总结与体会总结1.根据原理和芯片引脚图,分功能设计原理图,并根据接线顺序分步骤验证。

2.容易出现故障为接触不良。

a)集成块引脚方向预先弯好对准面板的金属孔,再小心插入。

b)导线的剥线长度与面包板的厚度相适应(比板的厚度稍短)。

c)导线的裸线部分不要露在板的上面,以防短路。

d)导线要插入金属孔中央。

3.注意芯片的控制引脚必须正确接好4.检查故障时除测试输入、输出信号外,要注意电源、接地和控制引脚。

5.要注意芯片引脚上的信号与面包板上插座上信号是否一致(集成块引脚与面包板常接触不良)。

体会这次课程设计历时二个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对C语言程序设计掌握的不够……通过这次课程设计之后,一定把以前所学过的知识重新温故。

7.参考文献:附1/*******************************************************************************程序名:篮球记分牌测试程序编辑时间:2012-06-14编辑者:修改时间:硬件平台:MCU:At89C51 晶振:12MHz硬件连接:功能说明:按下K1键,甲队加1分按下K2键,乙队加1分按下K5交换记分牌按下K3键,开始/停止比赛按下K4:调整比赛时间第1~4位数码管为比赛时间的分和秒,第5~8位数码管分别为两队的分数测试结果:0K注意:*******************************************************************************///头文件#in clude<>#in clude<>#i nclude""#i nclude""#in clude""//变量定义unsigned char disp_buff1[4]={1,2,0,0}; // un sig ned char disp_buff2[4]={0};un sig ned char minu te=12,sec on d=0;un sig ned char score1=0,score2=0;bit volatile fini sh_flag=0;un sig ned char num=0;un sig ned char key=0;比赛时间显示缓冲区//两队得分显示缓冲区//比赛时分秒//两队的比赛得分//比赛完成标志位//定时累加计数//保存键值II定时器T0初始化函数void in itial(){TMOD=0x80;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;}/******************************************************************************函数名:数码管显示缓冲区数组处理函数入口参数:无出口参数:无*********************************************************************************/void dispose(void){disp_buff1[0]=mi nute/10; //分钟的十位disp_buff1[1]=mi nute%10; //分钟的个位disp_buff1[2]=seco nd/10; //秒钟的十位disp_buff1[3]=seco nd%10; //秒钟的个位disp_buff2[0]=score1/10; //甲队得分的十位disp_buff2[1]=score1%10; disp_buff2[2]=score2/10; disp_buff2[3]=score2%10; //甲队得分的个位//乙队得分的十位//乙队得分的个位//主函数void mai n(void){un sig ned char temp;in itial();while(1){key=key_sca n();switch(key){case 1:score1++;break;case 2:score2++;if(score仁=100)if(score2==100)break; //定时器T0初始化//按键扫描〃K1按下,甲队加1分score 仁99;//K2按下,乙队加1分score2=99;case 5:temp=score1; //K5 按下,交换记分牌score仁score2;score2=temp;break;case 3:TR0=~TR0; //K3按下,停止或开始比赛break;F K4键可以调整比赛时间case 4:if(TR0==0) // 停止比赛时,按{minu te++;if(mi nute==60)minu te=0;}break;default:break;}dispose();diaplay(disp_buff1,disp_buff2);if(fini sh_flag){P1A=0x08;minu te=sec on d=0;}}}//定时器T0中断服务函数void T0_time( )in terrupt 1{TH0=(65536-20000)/256;TL0=(65536-20000)%256;nu m++;if(num==250){num=O;if(sec on d==0){if(minute==0) //比赛时间到,则停止计时{TR0=0;fini sh_flag=1;}else{second=60;minu te--;}}sec on d--;}}[未****************************************************************************程序名:8位共阳七段数码管动态显示程序编辑时间:2012-06-14编辑者: x_z_yQ Q : 6修改时间:硬件平台:MCU At89c51 晶振:12MHz 8 位共阳七段数码管硬件连接:第1~4位数码管段选 ----------- P0 位选---------------- P3A0,P3A1,P3A2,P3A3第5~8位数码管段选P2 位选P3A0,P3A1,P3A2,P3A3 注意:*****************************************************************************///头文件#in clude<>#in clude<>#i nclude""#i nclude""//变量定义unsigned char code disptable[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //定义0~F所对应的十六进制数组disptable/****************************************************************************函数名:一位数码管显示函数入口参数:unsigned char num对应的第几个数码管unsigned char dat1 ,dat2对应要显示的数出口参数:无****************************************************************************/void seg_display (un sig ned char num,un sig ned char dat1, un sig ned char dat2)/****************************************************************************函 数名:八位数码管显示函数入口参数:un sig ned char *disp_buff1,*disp_buff2对应要显示的数缓冲数组指针 出口参数:无****************************************************************************/ void diaplay (un sig ned char *disp_buff1, un sig ned char *disp_buff2) {un sig ned char i;for(i=0;i<4;i++) //循环扫描数码管{seg_display(i,disp_buff1[i],disp_buff2[i]);delay_ms(3);}}/**************************************************************程序名:STC89C52RD+四个独立按键的程序编辑时间:2012-06-14编译环境:keil c硬件平台:STC89C52RD 单片机,晶振四个独立按键 功能描述: sbit K 仁P1A 0; 〃K1 ――甲对加分键P3&=0xf0; P0=~disptable[dat1]; P2=~disptable[dat2]; P3=_cror_(0x08, nu m); }//消影//第1~4位数码管段选//第5~8位数码管段选//位选sbit K2=P1A1; 〃K2 —-一乙队加分键sbit K3=P1A2; 〃K3 —-一开始/停止比赛sbit K4=P1A5; 〃K4 —-一调整比赛时间sbit K5=P1A6; 〃K5 —-一甲乙队交换记分牌注意:**/*************************************************************//头文件#in clude<>#i nclude""#in elude""//硬件定义sbit K仁P1A0;〃K1 —甲对加分键sbit K2=P1A1;〃K2 —-一乙队加分键sbit K3=P1A2; 〃K3 —-一开始/停止比赛sbit K4=P1A5; 〃K4 —-一调整比赛时间sbit K5=P1A6; 〃K5 —-一甲乙队交换记分牌/***************************************************************************************函数名:三个独立键盘扫描函数函数入口:无函数出口:无*************************************************************************************un sig ned char key_sca n( void) { un sig ned char key=0;if(K1==O){delay_ms(2);if(K1==0){while(K1==0);key=1;}}else if(K2==0){delay_ms(2);if(K2==0){while(K2==0);key=2;}}else if(K3==0){delay_ms(2);if(K3==0) //甲对加分键//乙队加分键//开始/停止比赛while(K3==0);key=3;}}else if(K4==0) //调整比赛时间{delay_ms(2);if(K4==0){while(K4==0);key=4;}}else if(K5==0) //甲乙队交换记分牌{delay_ms(2);if(K5==0){while(K5==0);key=5;}}return key;}〃延时函数******************************* ********************//头文件#in elude <>#in elude <>#i nclude ""//延时xus的函数void delay_us( un sig ned int xus){while(xus-)_n op_();}//延时xms的函数void delay_ms( un sig ned int xms){while(xms--)delay_us(1);}#ifndef __DISPLAY_H__#defi ne __DISPLAY_H__ void seg_display (un sig ned char num,un sig ned char dat1, un sig ned char dat2);//数码管显示函数void diaplay (un sig ned char *disp_buff1, un sig ned char *disp_buff2);〃示函数2121一位八位数码管显#en dif#ifndef __DELAY_H__#defi ne __DELAY_H_exter n void delay_us( un sig ned int xus); // 微秒延时exter n void delay_ms( un sig ned int xms); // 毫秒延时#en dif。

相关主题