课程设计(论文)题目名称基于单片机的篮球计分器课程名称单片机原理与应用学生姓名彭金科学号0941301388系、专业信息工程系指导教师周晓燕年月日目录第一章绪论………………………………………………………………………….………11.1系统功能…....................................................................................................................11.2课题运用的知识点……………………………………………………………………1第二章系统原理的设计…………………………….………………..……….………..……….……..22.1课题的技术与量化要求………………………………………………………………22.2系统的组成框图………………………………………………………………………2第三章硬件部分的设计……………………………………………………………………..33.1单片机接口电路………………………………………………………………………33.2数码显示电路…………………………………………………………………………4第四章软件部分的设计……………………………………………………………………..74.1按键模块………………………………………………………………………………..74.1.1键盘处理的流程图………………………………………………………….………74.1.2源代码………………………………………………………….……………………84.2显示模块………………………………………………………………………………..94.2.1简介………………………………………………………………………………….94.2.2显示的流程图……………………………………………………………………….94.2.3源代码………………………………………………………………………….........94.3成绩调整模块………………………………………………………………………….104.3.1简介…………………………………………………………………………………104.3.2成绩调整流程图……………………………………………………………………114.3.3源代码………………………………………………………………………………124.4延时模块……………………………………………………………………………….134.4.1简介…………………………………………………………………………………144.4.2延时的流程图………………………………………………………………………144.4.3延时的源代码………………………………………………………………………14附录一原理图…………………………………………………………………………...15附录二仿真……………………………………………………………………………...16附录三源程序设计……………………………………………………………………...17参考文献………………………………………………………………………………….23总结……………………………………………………………………………………….231第一章绪论1.1系统功能随着科技的迅猛发展,单片机在计算机应用领域中起到了越来越重要的作用.单片机体积小,功能强,集成了微型机的各部件,大大缩短了系统内信号传送的距离,从而提高了系统的可靠性及运行速度。该系统主要是线以下两种功能:①计分:能同时显示甲、乙两队比分,最大计分数为99。能分别对甲、乙两队比分进行加分。②计时:从比赛开始时启动计时工作方式,初始时间为00,最大计时为99分钟,经过修改后应该还能实施计时暂停,还能设定为倒计时。③交换比分:中场交换比赛场地时,能交换甲、乙两队比分的位置。④哨音提示:设定的比赛时间到了,能自动哨音提示比赛结束.1.2课题运用的知识点本课题主要运用单片机设计知识设计篮球赛记时计分器,因此涉及到的知识点主要有以下几点:(1)AT89C51单片机的运用(2)LED数码管的运用(3)人机接口2第二章系统原理的设计2.1课题的技术和量化要求2.能记录整个赛程的比赛时间,并能修改比赛时间、暂停比赛时间。3.能随时刷新甲、乙两队在整个赛程中的比分。4.中场交换比赛场地时,能交换甲、乙两队比分的位置。5.比赛时间结束时,能发出报警指令;2.2系统的组成框图为了实现原理图的设计目标,同时结合自己获取的各种资料以及要达到的具体功能,所确定的组成框图见图3.1.1。一、组成框图的组成说明图2.1.1:系统原理框图二、组成框图的组成及其功能说明1、LED能够显示比赛成绩和比赛时间,并且能够显示调整后的比赛成绩和时间2、控制按钮由两队的加分按钮组成、以中场中止按钮组成。3、暂停比赛时间按钮单片机芯片时间显示比分显示3第三章硬件部分的设计3.1单片机接口电路图3.1.1单片机接口电路见图3.1.1,其电路分析如下:1)复位电路复位是指单片机的CPU或系统中其它的部件处于某一确定的初试状态,并从这一状态开始工作。除了进入系统的正常初始化之外,当由于程序运行出错或是操作错误使系统处于锁死状态,为摆脱困境,需要进行按键复位。通常单片机的复位操作有上电复位、信号复位、运行监视复位,运行监视复位有程序运行监视和电源监视。上电复位上电复位是指单片机上电是的复位操作,保证单片机上电后立即进入规定的复位状态。4信号复位信号复位是指单片机在正常供电的情况下,在复位引脚端加以复位信号。根据不同情况有按键操作复位、唤醒复位、控制复位等。系统运行监视复位系统运行监视复位是指系统出现非正常情况下时的复位操作,通常有电源监视复位和程序监视复位。电源监视复位是指在电源下降到一定电平状态或未达到额定电平要求时的系统复位;程序运行监视复位是指程序运行时常时的系统复位。在本设计中,则是采用上电复位,复位电路见图2,原理是当电源接通后,上电瞬间RESET引脚获取高电平,该高电平需要电容充电来维持,当高电平维持在两个机械周期以上则单片机能被复位。一般为了能够可靠复位,复位时间一般在10ms以上,对于振荡频率为12MHZ的复位电路,典型RC系数为:C3=10uF,R29=8.2千欧。2)晶体振荡电路晶体振荡电路用于产生单片机工作时所需的时钟信号,从而保证各部分工作的同步。单片机内部有一个高增益反相反大器,只要在输入端XTAL1与输出XTAL2之间挂一个晶体振荡器和微调电容就可以构成一个稳定的自激震荡器并在单片机内部产生的时钟脉冲信号。振荡电路见图3,电容器C1与C2用于稳定频率和快速起振,电容一般在5PF—30PF,本设计电容为30PF。3)键盘接口电路与通用单片机相比,单片机应用系统中的键盘种类很多,键盘中按键数量设置依系统操作要求而定。单片机应用系统中的键盘有独立式和行列式两种。(1)独立式键盘独立式键盘中,每个按键占用一个I/O口线,每个按键相对独立。I/O口通过按键与地相连,无按键按下时,引脚端为高电平,有按键按下时,引脚为低电平,I/O口内部有上拉电阻外部不可接上拉电阻。(2)行列式键盘用I/O口线组成行列结构,按键设置在交叉点上,在按键数目较多时运用这种连接方式,可节省I/O口连线。行列式键盘的标识最常用的两种方法:行扫描法和线反转法。本次设计中由于按键较少,采用三按键独立式键盘即可满足需要见图(3.1.2)。5图3.1.23.2数码显示电路LED显示器通常所说的LED显示器由七个发光二极管组成,因此也称作七段LED显示器,通过七段发光二极管的不同组合,可以显示多种数字、字母或其它符号。图3.1.31)LED的接法共阴极接法是指把发光二极管的阴极连接在一起构成公共阴极,使用时公共阴极接地,阳极输入高电平段的二极管则会导通发光,而输入低电平的则不会亮。62)显示方式动态显示是指依次轮流点亮显示器的各个位,每隔一段时间则点亮一次,设置足够短的时间,利用人的视觉暂停效应和发光二极管的熄灭时的余辉,达到多个字符同时显示的效果。运行这种显示方式可以降低成本与功耗,但需要较大的驱动电流。本设计中采用的共阴极连接方式,由于没有有足够的I/O口可以使用采用动态示方式,显示电路见图3.1.3。此外P0需外加上拉电阻(图3.1.4)。图3.1.47第四章软件部分设计4.1按键模块4.1.1键盘处理的流程图图4.1.1N有键按下吗?Y延时N真的有键按下吗?Y按键处理等待按键释放84.1.2源代码voidkey_sc()//键盘扫描模块{ucharkey_bt,i;while(1){P1=0xff;delay_t(80);key_bt=P1;switch(key_bt){case0xfe://初始化,显示0;for(i=0;i9;i++){//display_buf[i]=0;display_rt(display_buf);}break;case0xfd://A队modify_sc();break;case0xfb://B队modify_sc();break;case0xf7://时间modify_st();break;}}}94.2显示模块4.2.1简介显示部分通过P0口外加上拉电阻进行显示,数码管采用7段共阴极数码管,通过查表指令进行显示,首先将要显示的缓存单元,送入累加器中,通过累加器进行查表,将要显示的数值存储起来,然后通过位选信号,将要显示的位的数码管打开,进行现实。并通过延时子程序进行延时,使其显示的数值稳定下来。然后再通过位选信号,将显示的数值关断,从而显示下一个数值。但当显示完一圈后程序跳出,等待数据的传输,再次进行显示。考虑到显示的数据比较多有10个数据,而且需要相当多的位选线。所以把整个显示缓看做一个整体。低6位传输的是比赛数据,高4位传输得是比赛时间。4.2.2.显示的流程图4.2.3.源代码延时延时P2=~bit_disp2P3=0xffP21P31P3=~bit_disp3p2=0xff显示显示P2、P3初始化P0=show[dis_code[i]]i6?NY10voiddisplay_rt(uchardis_code[])//显示任务{charbit_disp2,bit_disp3,i;bit_disp3=0x20;bit_disp2=0x08;for(i=0;i=9;i++){P2=0xff;P3=0xff;P0=show_t[dis_code[i]];if(i6){bit_disp2=0x08;P3=~bit_disp3;P2=0xff;bit_disp3=bit_disp31;}else{bit_disp3=0x20;P2=~bit_disp2;P3=0xff;bit_disp2=bit_disp21;}delay_t(1);}}4.3成绩调整模块4.3.1简介11成绩调整模块用用于记录两队比赛成绩,显示Led中前3位用于记录A队比赛成绩,后三位用于记录B队的比赛成绩。成绩的记录范围从000~999其中。4.3.2成绩调整流程图获取键盘K2和K3信息P1==0xfd?P1==0xfb?B队P1==0xfbA队P1==0xfduS_b++uS_a++NNuS_b9uS_a9YdS_a++usYdS_b++dS_b9dS_a9NNYhS_a++YhS_b++hS_b9hS_a9NNuS_b=0dS_b=0hS_b=0uS_a=0dS_a=0hS_a=0显示延时等待再次获取P1的键盘信息124.3.3源代码voidmodify_sc()//调整比赛结果{while(1){display_rt(display_buf);while(P1==0xfd)//A队{uS_a++;if(uS_a9){dS_a++;uS_a=0;}if(dS_a9){dS_a=0;hS_a++;}if(hS_a9){uS_a=0;dS_a=0;hS_a=0;}display_buf[3]=uS_a;display_buf[4]=dS_a;display_b