1、重庆航天职业技术学院2010届毕业设计(论文)题目基于单片机的篮球赛计分器学院、系电子工程系专业电子信息工程技术学生姓名班级学号指导老师王用伦摘要进入21世纪,伴随着电子,信息通信技术的应用与普及开发,人们对电子技术的要求也越来越高。目前嵌入式单片机渗透到我们生活的各个领域,由于它具有功能强大,体积小,功耗低,可靠性高,易扩展,性价比高,使用方便等特点,因此它广泛应用于工业控制,智能仪表等有关系统设备。本设计主要利用单片机STC89C52作为核心元件,利用3组4位共阳极的数码管作为显示器件,以C语言作为编程语言,在PROTUES和KEIL搭建的软件仿真平台下进行仿真,本设计包含了STC89C5
2、2系列单片机的最小系统的构成,同时在此基础上扩展了一些实用性强的外围接口,可以进一步了解译码器74LS247的应用,LED七段数码管的结构和工作原理,主要实现了计时和显示A/B队的分数,并能及时进行加分,减分,鸣笛警示等功能。系统设计完成后应有成本低廉、性能稳定、高准确度显示、操作方便且易携带等特点。广泛适合各类学校和小团体作为赛程计分。关键词篮球赛计分器;STC89C52;74LS247;七段数码管;仿真ABSTRACTENTERINGTHETWENTYFIRSTCENTURY,ALONGWITHTHEMOREANDMOREPOPULARIZATIONAPPLICATIONOFTHEELEC
3、TRONICS,INFORMATIONANDCOMMUNICATIONTECHNOLOGY,PEOPLESREQUIREMENTISMOREANDMOREHIGHINTHEELECTRONICTECHNOLOGY,THEEMBEDDEDMICROCONTROLLERISPENETRATINGINTOEVERYASPECTOFOURLIVESWITHITSSTRONGFUNCTION,SMALLVOLUME,LOWPOWERCONSUMPTION,HIGHLIABILITY,EASYEXPANSION,HIGHPERFORMANCEPRICERATIO,USECONVENIENTANDSOON,
4、SOITISWIDELYUSEDININDUSTRIALCONTROLMENT,SMARTINSTRUMENTATIONANDRELATEDSYSTEMEQUIPMENTTHECOREELEMENTOFTHEDESIGNISSTC89C52,3GROUPSOF4BITCOMMONANODEDIGITALTUBEISDISPLAYDEVICESTHEDESIGNISUSINGCLANGUAGE,SIMULATINGINASOFTWARESIMULATIONPLATFORMBETWEENPROTEUSANDKEIL,THEDESIGNINCLUDEDTHESTC89C52SERIESMCUMINI
5、MUMSYSTEM,ANDATTHESAMETIMETHEDESIGNEXPANDEDSOMEPRACTICALPERIPHERALINTERFACETODEEPLYUNDERSTANDTHEAPPLICATIONOF74LS247,LEDSEVENDIGITALTUBESTRUCTUREANDITSWORKINGPRINCIPLE,ANDTHEDISPLAYINTERFACECOMMUNICATIONTHEDESIGNMAINLYFINISHEDTHETIMINGANDDISPLAYINGA/BTEAMSCORESANDTIMELYPOINTS,DEDUCTION,THEALARMINGFU
6、NCTIONETCAFTERFINISHINGSYSTEMDESIGN,ITSHOULDBELOWCOST,STABLEPERFORMANCE,HIGHACCURACYTODISPLAY,CONVENIENTTOOPERATEEASYTOCARRYANDSOONSUITABLEFORALLKINDSOFSCHOOLSANDSMALLGROUPSASTHETOURNAMENTSCORINGKEYWORDSBASKETBALLSCORINGDEVICESTC89C5274LS247LEDSIMULATION目录第一章绪论611引言612国内外研究现状及发展趋势6第二章系统总体方案设计821系统硬件
7、方案设计822系统软件方案设计923本章小结10第三章系统硬件设计1131硬件设计原理11311STC89C52简介11312数码管动态扫描显示原理13313BCD七段数码管驱动/译码器14314按键接口原理1532硬件电路设计16321元器件的选择17322计时显示屏的设计17323计分显示屏的设计18324鸣笛器的设计1833本章小结19第四章系统软件设计2041软件设计原理20411定时器/计数器20412发音原理及音乐知识2242系统软件设计23421系统主程序设计23422时间显示设计24423计分显示设计26424鸣笛器设计2843本章小结30第五章KEILC与PROTUES联调及
8、仿真3051KEILC与PROTUES简介3052KEILC与PROTUES联调及仿真3053本章小结32第六章总结32参考文献33附录34致谢42第一章绪论11引言进入21世纪,伴随着电子,信息通信技术的应用与普及开发,人们对电子技术的要求也越来越高,目前嵌入式单片机渗透到我们生活的各个领域。1单片机是一种集成在电路芯片,是采用超大规模集成电路技术,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。按照历史性、本质性、普遍性要求,嵌入式系统应定义为“嵌入到对象体系中的专用计算机
9、系统”,可分软件部分和硬件部分,而当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在单片机上。所以,以MCU为核心,就是各种各样的单片机,是嵌入式硬件部分的实现方式之一,它主要是因为把处理器和存储器等部件集成在一块芯片上。体育比赛计时计分器是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录、加工处理、传递利用的工具。篮球比赛的计时计分器是一种得分类型的工具。虽然篮球比赛中很早就开始研究应用了电子计分器,但通常都是利用模拟电子器件、数字电子器件或是模拟、数字混合组成的,其稳定性和高准确度计分仍存在一些问题。以嵌入式单片机为核心,利用3组4位共阳极的数码管
10、作为显示器件的篮球比赛计分屏,计分准确,具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点。12国内外研究现状及发展趋势伴随着科技的日新月异,各式各样的电子产品的问世和发展层出不穷,篮球计分屏是一个无处不在的电子产品,经过多年的发展,技术已经相当成熟了。根据目前高水平篮球比赛要求,完善的篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。随着电子技术的产业结构调整,生产工艺的飞速发展和篮球的广泛推广,市场对篮球计分器的需求也越来越大。本设计用STC89C52单片机编程控制LED七段数码管作
11、显示,设计篮球赛计分屏,嵌入式单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。随着单片机的发展,人们对事物的要求越来越高,单片机的应用软件技术也发生了巨大的变化,从最初的汇编语言,开始演变到C语言开发,不但增加了语言的可读性,结构性,而且对于跨平台的移植也提供了方便,另外一些复杂的系统
12、开始在单片机上采用操作系统,一些小的RTOS等,一方面加速了开发人员的开发速度,节约开发成本,另外也为更复杂的实现提供了可能。当前比较流行的RTOS有WINCE,UCLINUX,LINUX,UC/OS等等。第二章系统总体方案设计本设计主要利用单片机STC89C52作为核心元件,利用3组4位共阳极的数码管作为显示器件,分别用于记录A、B两队的分数,以及赛程时间,每个队的数码管显示分数范围可达到09999分,足够满足赛程需要。以C语言作为编程语言,在PROTUES和KEIL搭建的软件仿真平台下进行仿真,本设计包含了STC89C52系列单片机的最小系统的构成,同时在此基础上扩展了一些实用性强的外围接
13、口,可以进一步了解译码器74LS247的应用,LED七段数码管的结构和工作原理,主要实现了计时和显示A/B队的分数,并能及时进行加分,减分,鸣笛警示等功能3。21系统硬件方案设计该系统硬件电路包括单片机STC89C52、时钟电路、复位电路、电源电路、按键控制电路、计分电路、计时电路、报警电路。软件包括用KEIL进行C语言编程,用PROTUES进行仿真,具体系统硬件结构框图如图21所示。图21篮球赛计分器的硬件结构框图AT89C51计分显示时钟电路计分电路报警电路计时电路计时显示鸣笛警示按键控制复位电路电源电路22系统软件方案设计软件部分要求实现的功能有开始时所有显示屏都显示0;有预置比赛时间的
14、功能;具有AB两队分别计分的功能;有鸣笛警示功能;只有当预置时间后,并按开始按钮,计时器才能开始计时,只有当开始计时后,AB两队才能加分等。3结合数码管以及51单片机计数器的工作实现方式、接口应用、中断控制等可设计出程序流程图如下图22所示图22主程序流程图NY将BCD码转化为7段码显示出来,并确认比赛是否结束将当前的分数转化为BCD码确认按下的是哪个键鸣笛休息A队减1分A队加1分YYNOOO读P3口的值取出P36启动按键是否按下去抖确认是否有按键按下B队加1分B队减1分读取功能键等待按键释放N停止比赛开始,并初始化比赛结束23本章小结本章主要阐述了本设计的总体设计方案,通过模块化的设计来实现
15、硬件部分的功能,软件部分的实现主要通过控制单片机的I/O口和相应按键操作来完成,先确定系统总体方案,后续章节的详细方案设计就迎刃而解了。第三章系统硬件设计设计一个基于51单片机的篮球赛计分屏,初步确定本设计的总体框架结构,再根据具体设计要求选定合适的设计方案以及选取合适的元器件进行系统硬件设计。具体设计概念如下选择STC89C52型单片机,通过不同的I/O口控制按键电路、显示电路、鸣笛警示电路等部分,设计一个简易的篮球赛计分屏。31硬件设计原理311STC89C52简介2STC89C52是一种带4K字节FLASH存储器(FPEROMFLASHPROGRAMMABLEANDERASABLEREA
16、DONLYMEMORY)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的STC89C52是一种高效微控制器,STC89C52是它的一种精简版本。STC89C52单片机为很多控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图31所示图31STC89C52外形及引脚排列主要特性与MCS51兼容4K字节可编程FLASH存储器寿命1000写/擦循环数据保留时间10年全静态工作0HZ24
17、MHZ三级程序存储器锁定1288位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明VCC供电电压。GND接地。P0口P0口的8位皆为漏极开路输出简称OD;内部无上拉电阻,所以执行输出功能时,外部必须接上拉电阻;若要实现输入功能,必须先输入高电平“1”,才能读取该端口所连接的外部数据;若系统连接外部存储器,则P0可作为地址总线和数据总线的多功能引脚,此时内部具有上拉电阻,无需外接上拉电阻。P1口P1口为8位,可位寻址的双向I/O口;内部具备约30千欧姆的上拉电阻,实现输出功能时,不需要连接外部上拉电阻;实现输入功能时,
18、必须先输入高电平“1”,才能读取该端口所连接的外部数据;P1口的8位类似漏极开路输出,但内部已接上上拉电阻,每个引脚可驱动4个LS型TTL负载。P2口P2口为8位、可位寻址的双向输入/输出口,内部具备约30千欧姆的上拉电阻,实现输出功能时,不需要连接外部上拉电阻;实现输入功能时,必须先输入高电平“1”,才能读取该端口所连接的外部数据;P2口的8位类似漏极开路输出,但内部已接上上拉电阻,每个引脚可驱动4个LS型TTL负载;若系统连接外部存储器,而外部存储器的地址线超过了8根时,则P2可作为地址总线(A8A15)的引脚。P3口P3口为8位,可位寻址的双向I/O口;内部具备约30千欧姆的上拉电阻,实
19、现输出功能时,不需要连接外部上拉电阻;实现输入功能时,必须先输入高电平“1”,才能读取该端口所连接的外部数据;P3口的8位类似漏极开路输出,但内部已接上上拉电阻,每个引脚可驱动4个LS型TTL负载。P3口也可作为STC89C52的一些特殊功能口,如下表31所示表31STC89C52的一些特殊功能口I/O口备选功能/特殊功能P30/RXD串行输入口P31/TXD串行输出口P32/INTO外部中断0P33/INT1外部中断1P34/T0计时器0外部输入P35/T1计时器1外部输入P36/WR外部数据存储器写选通P37/RD外部数据存储器读选通RST复位信号。当振荡器复位器件时,要保持RST脚两个机
20、器周期的高电平时间,用以完成单片机的复位初始化操作。ALE/PROG地址锁存控制信号。在系统扩展,访问外部存储器时,ALE用于控制把P0口输出的低8位的地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出脉冲,因此可作为外部时钟或者外部定时脉冲使用。ALE只有在执行MOVX,MOVC指令时,ALE才起作用。PSEN外部程序存储器读选通信号。在读外部ROM时,PSEN有效(低电平有效),以实现外部ROM的读操作。在具体应用时,外部ROM读取时,在每个机器周期会动作两次,外部RAM读取时,两个PSEN信号被跳过不会输出。EA/VPP访问程序存储控制信号。当信号保持
21、低电平时,对ROM的读操作仅仅限定在外部程序存储器,当信号为高电平或者悬空时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2来自反向振荡器的输出。312数码管动态扫描显示原理4在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。用数码管显示信息时,由于每个数码管至少需要8个I/O口,如果需要多个数码管,则需要太多I/O口,而单片机的I/O口是有限的。在实际应用中,一般采用动态显示的方式解决此问题。动态显示是多个数码管,交替显示,利用人的视觉暂留作用使人看到多个数码管同时显示
22、。通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形成段选线的多路复用。而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间
23、后,再选中另一个数码管,再输出对应的段码,高速交替。313BCD七段数码管驱动/译码器3常用的BCD对七段显示器译码器/驱动器的IC包装设计有TTL之7446、7447、7448、7449与CMOS之4511等。其中7446、7447必须使用共阳极七段数码显示器,7448、7449、4511等则使用共阴极七段显示器。74LS247的功能用于将BCD码转化成数码块中的数字,通过它解码,可以直接把数字转化为数码管的显示数字,从而简化了程序,节约单片机的I/O开销,因此是一个非常好的芯片。74LS247的引脚如下图32所示图3274LS247引脚图引脚的功能(1)A、B、C、D为输入端,ABCDEF
24、G为输出端。当输入DCBA0010时,则输出ABCDEFG0010010,使数码管显示“2”;当输入DCBA0110时,则输出ABCDEFG1100000,使数码管显示“6”;关系如表32所示表32BCD七段译码真值表输入DCBA输出FAFBFCFDFEFFFG字形000011111100000101100001001011011012001111110013010001100114010110110115011010111116011111100007100011111118100111110119(2)LT、RBI与BI/RBO为控制引脚,其功能分述如下74LS247电路是由与非门、输入缓
25、冲器和七个与或非门组成的BCD7段译码器/驱动器。7个与非门和一个驱动电路成对连接,以产生可用的BCD数据及其补码至7个与或非译码门。剩下的与非门和3个输入缓冲器作为试灯输入(LT)、灭灯输入/动态灭灯输出(BI/RBO)以及动态灭灯输入(RBI)端。该电路接受4位二进制编码十进制数(BCD)输入并借助于辅助输入端状态将输入数据译码后去驱动一个七段显示器。输出结构设计能承受7段显示器所需要的相当高的高压,驱动显示器各段所需要的高达24MA的电流可以由其高性能的输出晶体管来直接提供。BCD输入计数9以上的显示图案是鉴定输入条件的唯一信号。该电路有自动前、后沿灭零控制(RBI和RBO)。试灯(LT
26、)可在端处在高电平的任何时刻去进行,该电路还含有一个灭灯输入(BI)。它用来控制灯的亮度或禁止输出。1)需要015的输出功能时,灭灯输入(BI)必须为开路或者保持在高电平状态,若不要灭掉十进制零,则动态灭灯输入(RBI)必须开路或者处于高电平状态。2)当低电平直接加到灭灯输入(BI)时,不管其他任何输入端的电平如何,所有段的输出端都关死。3)当动态灭灯输入(RBI)和输入端A、B、C、D都处于低电平而试灯输入(LT)为高电平时,则所有段的输出端进入关闭且动态灭灯输出(RBO)处于低电平状态。4)当灭灯输入/动态灭灯输出(BI/RBO)开路或者保持在高电平状态,且将低电平加到试灯试灯输入(LT)
27、时,所有段的输出都得打开。注BI/RBO是用做灭灯(BI)与/或动态灭灯输出(RBO)的线与逻辑。314按键接口原理键盘往往分成编码键盘和非编码键盘,编码键盘由按键和键处理电路组成,直接为计算机提供经过编码的按键键码;而非编码键盘则只提供按键,其余由计算机自己处理。非编码键盘结构简单,可自由裁量设计,非常适用于单片应用系统。1按键特性与抖动处理按键是一种机械弹性开关,当键按下时闭合,松开时断开。因为有机械的接触,在触点闭合或断开的瞬间会出现电压抖动。为了避免键输入错误,必须进行键抖动的处理。去抖动由硬件和软件两种方法硬件方法就是在键盘中附加去抖动电路消除抖动;而软件方法则是采用时间延迟以躲避抖
28、动,待触点状方法处理。2键盘接口及功能非编码键盘是所用按键组成的集合。为了保证键盘的正确输入,键接口必备以下功能(1)键扫描与识别,判断有无键按下以及按键位置,键扫描与识别是通过“行扫描”与“列状态”的配合来确定是否有键按下以及所在行、列的位置。所谓行扫描就是一次给每条行线送低电平,而其余各行线送高电平,并检测对每一行扫描时所产生的列状态。键盘扫描有下列三种方式程控扫描方式只有单片机空闲时才调用扫描程序响应用户键入请求。定时扫描方式单片机定时调用扫描程序对键盘进行扫描,即时响应用户键入请求。中断扫描方式与中断请求电路配合,当有键按下时产生中断请求,由单片机响应并执行中断服务程序扫描键盘。(2)
29、去键抖动消除按键抖动带来的误输入。检测键关闭后,延时10MS后再检测一次,两次检测相同再进一步进行键处理。(3)键编码生成易于处理的键码。由于键位码比较零乱,因此接下来的工作是根据需要把反映闭合键和键位置的键位码换乘反映键功能的键码。有了键码,才好通过散转指令把程序执行到闭合键所对应的服务程序上去。键码既可以根据键位码查询表求得,也可以根据键码编排规律计算得到。(4)等待键释放为了保证键一次闭合仅进行一次处理,编键码之后,再以延时扫描的方法等待键释放。键释放后键处理工作完成。32硬件电路设计硬件部分的设计是整个设计的一个很重要的部分。在进行硬件设计时,首先要确定元器件,并且知道这些元器件的工作
30、原理和功能,然后才可以进行设计。本设计的主要硬件电路包括三个部分计时显示电路、计分显示电路、鸣笛警示电路。一般来说,对硬件部分的设计都应包括绘制SCH原理图和PCB印刷图,由于本次设计我主要负责软件部分的设计,硬件参与得不是很多,所以硬件部分元器件的功能就不详细介绍了。321元器件的选择3本设计主要选择了以下元器件如表33所示表33元器件列表序号元件名称功能1STC89C52单片机27SEGMPX4CABKUE37SEGMPX4CA4SWSPDT574LS2476RES7BUTTON874049SOUNDER322计时显示屏的设计计时电路主要由计时按键、单片机STC89C52、译码器74LS2
31、47、4位共阳极的数码管以及反相器7404构成。P10P13分别控制计时数码管的4个位的位线,P16和P17分别连接计时器时间的十位和个位的初值按钮,P00P03分别与74LS247的输入端A、B、C、D相连接,74LS247的QA、QB、QC、QD、QE、QF、QG分别与计时数码管的A、B、C、D、E、F、G七段的阴极相连接,用74LS247驱动4位数码管的动态显示。设计出的计时显示电路如下图33所示图33计时显示屏电路图323计分显示屏的设计计分电路主要由四个计分按键、单片机STC89C52、译码器74LS247、两个4位共阳极的数码管以及反相器7404构成。P20P23分别控制B队计分数
32、码管的4个位的位线,P24P27分别控制A队计分数码管的4个位的位线,P00P03分别与74LS247的输入端A、B、C、D相连接,74LS247的QA、QB、QC、QD、QE、QF、QG分别与计时数码管的A、B、C、D、E、F、G七段的阴极相连接,用74LS247驱动4位数码管的动态显示。设计出的计分显示电路如下图34所示图34计分显示屏电路图324鸣笛器的设计鸣笛警示电路如下图35所示,采用蜂鸣器作为音响器件,该电路主要由单片机、蜂鸣器、按键以及反相器构成。P14接蜂鸣器,用一个按键接到P23上,当按下该按键时,产生一个外部中断,蜂鸣器发出警报声。图35鸣笛器电路图33本章小结本章设计了以
33、8位单片机STC89C52为核心的篮球计分屏硬件平台方案,并搭建了相应的I/O口控制按键电路、显示电路、鸣笛警示等外围电路,实现一个简易的篮球赛计分屏硬件部分的设计。第四章系统软件设计本系统是利用单片机的定时功能来进行时间处理,实现计时显示功能,利用单片机的计数功能来进行分数处理,实现计分显示功能,对时间和分数进行处理的过程中,要通过中断来控制实现,当有按键按下时,计分器就会有相应的加分减分处理,然后通过数码管显示器动态扫描并显示出来。通过发声的原理和规律,利用单片机的I/O口输出高低电平,产生矩形波,外接喇叭就会发出一定频率的声音,从而实现鸣笛功能。41软件设计原理411定时器/计数器251
34、单片机内部有两个16位可编程的定时器/计数器,分别称为定时器/计数器0和定时器/计数器1,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。特殊控制器有工作方式控制寄存器(TMOD,定时/计数器控制寄存器(TCON,中断允许控制寄存器IE。定时/计数器的核心是的16位加法计数器,定时器T0的加法计数器用特殊功能寄存器TH0、TL0表示,TH0表示加法计数器的高8位,TL0表示加法计数器的低8位。TH1和TL1则分别表示定时/计数器T1的高8位和低8位。它们均是8位寄存器,在特殊功能寄存器中占地址8AH8DH。它们用于存放定时或
35、计数的初始值。此外,内部还有一个8位的工作方式寄存器TMOD和一个8位的控制寄存器TCON,用于选择和控制定时/计数器的工作。这些寄存器可根据需要由程序读写。当然16位加法计数器的输入端每输入一个脉冲,16位加法计数器的值自动加1,当计数器的计数值超过加法计数器字长所能表示的二进制数的范围而向第17位进位,即计数溢出时,置位定时中断请求标志,向CPU申请中断。1、工作方式寄存器TMODTMOD用于控制T0和T1的工作方式,其格式如表41所示表41方式控制寄存器TMOD位D7D6D5D4D3D2D1D0位符号GATEC/TM1M0GATEC/TM1M0门控开关计数/定时方式选择门控开关计数/定时
36、方式选择T1方式字段T0方式字段各位定义如下M1,MO工作方式控制位,可构成表42所示四种工作方式表42方式控制寄存器TMOD的工作方式M1M0工作方式说明00013位定时器;01116位计数器;102可自动再装载的8位计数器;113T0分成两个独立的8位计数器C/T计数工作方式/定时工作方式选择位。置0时,设置为定时工作方式;置1时,设置为计数工作方式。GATE门控位,用以决定是由软件还是硬件启动/停止计数。GATE0,INTO/INT1被封锁,只要用软件对TR0或TR1置“1”就启动了定时器;GATA1时,定时器/计数器的计数受外部引脚输入电平的控制。TMOD的所有位在复位后清0。TMOD
37、不能位寻址,只能按字节操作设置工作方式。2、定时/计数控制寄存器TCONTFL,TRL,TF0和TR0位用于定时器计数器;IEL,ITL,IE0和IT0位用于中断系统。其格式如表43所示表43控制寄存器TCON位D7D6D5D4D3D2D1D0位符号TF1TR1TF0TR0IE1IT1IE0IT0各位定义如下TF1定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置“1”,并且申请中断。进入中断服务程序后,由硬件自动清“0”,在查询方式下用软件清“0”。TR1定时器1运行控制位。由软件清“0”关闭定时器1。当GATE1,且INT1为高电平时,TR1置“1”启动定时器1;当GATE0,TR
38、1置“1”启动定时器1。TF0定时器0溢出标志。其功能及操作情况同TF1。TR0定时器0运行控制位。其功能及操作情况同TR1。IE1外部中断1请求标志位。IT1外部中断1触发方式选择位。当IT10,为低电平触发方式;当IT11,为下降沿触发方式。IE0外部中断0请求标志位。IT0外部中断0触发方式选择位。当IT00,为低电平触发方式;当IT01,为下降沿触发方式。TCON中低4位与中断有关。由于TCON是可以位寻址的,因而如果只清溢出或启动定时器工作,可以用位操作命令。412发音原理及音乐知识41声音的产生我们知道,声音的产生是一种音频振动的效果。振动的频率越高,则为高音;振动的频率越低,则为
39、低音。声音的频率范围为20HZ200KHZ之间,人类耳朵比较容易辨识的声音频率范围是200HZ20KHZ,一般音响电路是用正旋波信号驱动喇叭,从而产生悦耳的音乐;在数字电路里,则是用数字脉冲信号驱动喇叭,从而产生声音。若要STC89C52产生声音,可利用程序来控制单片机某个I/O口的“高”电平或者“低”电平,则在该I/O口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”、“低”电平的持续时间,就能改变输出频率,从而改变音调。2音调(音阶)的产生若以频率来表示声音,有点抽象,又有点无趣,通常是以DO、RE、MI、FA、SO、LA、SI、DO分别代表某一频率
40、的声音,我们称之为“音调”,如表44所示,为C调音符频率对照表,它包括3个音阶(高音、中音、低音)。一首音乐是由许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率组合,构成想要的音乐了。当然对于单片机来说,产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号。因此,我们只要把一首歌曲的音阶对应频率关系确定即可。表44C调各音符频率对照表音阶N123456789101112DODOREREMIFAFASOSOLALASI低音频率262277294311330349370392415440464494简谱1234567中音频率523554
41、587622659698740784831880932988简谱1234567高音频率104611091175124513181397148015681661176018651976简谱1234673节拍的产生若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快慢速度。“节拍”,即BEAT,简单说就是打拍子,就像我们听音乐不自主的随之拍手或其他动作。若1拍为04S,则1/4拍为01S,其他节拍都是它的倍数,只要设定延时时间即可。至于1拍多少S,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好
42、。节拍也是用延时子程序或者定时器中断来实现的。如1/4拍一次延时01S,1拍延时4次01S。42系统软件设计6421系统主程序设计在主程序循环中,主要工作是扫描是否有键按下,若有键按下则要确认是哪个键按下并做相应的处理,并做同步显示处理。VOIDMAINVOIDTMOD0X01/设置T0为工作方式1,作为16位计数器TH06553550000/256/设置T0的高8位,并且T0的计数值为50MSTL06553550000256/设置T0的低8位MUSIC0/初值喇叭不响EA1/开放所有中断ET01/允许定时/计数器T0溢出中断EX01/允许外部中断0IT01/设置外部中断0为边沿触发方式(下降
43、沿)WHILE1/无穷循环,程序一直运行KEY_Y/预置场次比赛时间IFSTAR0/按下“开始键“,设置好比赛时间,比赛正式开始TR01/启动定时器T0,开始计时KEY_IF/开始计分IFF0/比赛还未开始或比赛结束时间到,停止计时JS_JF_SCAN/将相应的分数、时间同步进行显示422时间显示设计系统要实现时间的计时功能,所以要用定时/计数器的定时功能进行时间处理,在本程序设计中,用一个定时50MS的时间中断函数VOIDJS_50MS(VOID),一个时间处理函数VOIDPTIME(UCHAR)。由于时间显示屏用的是4位的数码管进行显示,用动态扫描显示驱动,用VOIDJS_JF_SCANV
44、OID处理动态扫描显示。时间预置用按键实现,首先进行按键判断处理,用VOIDKEY_Y(VOID)函数处理。篮球计分器实现时间显示屏的部分源程序如下设置场次比赛时间/VOIDKEY_YVOIDIFYK10/初始状态,分钟的十位为0DELAY1WHILEYK1FSFS1/分十位加1分IFFS10FS0/延时去抖动IFYK20/初始状态,分钟的个位为0DELAY1WHILEYK2/延时去抖动FGFG1IFFG10FG0FYFS10FG/求出预置时间的分钟值FFY/中间变量/T0中断服务函数,每隔50MS产生一次中断/VOIDJS_50MSVOIDINTERRUPT1USING1/定时器T0中断,用
45、工作寄存器组1TH06553550000/256/定时器T0的高8位TL06553550000256/定时器T0的低8位NUM/每50MS累加一次PTIMENUM/调用时间处理函数/时间处理函数/VOIDPTIMEUCHARTIMEIFTIME20NUM0MIFM1M59FIFF1F0MSM/10MGM10FSF/10FGF10423计分显示设计本系统是利用按键来实现两队的计分功能的,当按一次加分键,在程序中要用两个整形的变量作为A、B队的分值计分器,程序里用SUM及SUM1分别表示B和A队的分值。如分别要在数码管的每位上动态扫描显示出来,就必须对两队所得的分数进行分位计算。程序里分别用Q、B
46、、S、G表示B队显示屏的千位、百位、十位、个位;用Q1、B1、S1、G1表示A队显示屏的千位、百位、十位、个位。通过按键判断处理,判断是加分还是减分,用函数VOIDKEY_IF(VOID)来实现,用VOIDJS_JF_SCANVOID函数进行动态扫描显示分值。篮球计分器显示的部分实现程序如下/数码管动态扫描显示/VOIDJS_JF_SCANVOIDUCHARJFORJ0J1/减分按键按下并且中得分不得少于1分DELAY5/延时去抖动WHILEKEY2SUMSUM1/B队减1分IFKEY30/当按键按下时DELAY1/延时去抖动WHILEKEY3SUM1SUM11/A队加1分IFKEY40/延时
47、去抖动WHILEKEY4SUM1SUM11/A队减1分Q0/A队分值的千位默认为0BSUM/100/求出A队分值的百位SSUM/10B10/求出A队分值的十位GSUM10/求出A队分值的个位Q10/B队分值的千位默认为0B1SUM1/100/求出B队分值的百位S1SUM1/10B110/求出B队分值的十位G1SUM110/求出B队分值的个位424鸣笛器设计声音的频率范围约在几十到几千赫兹,利用程序来控制单片机的P14口线的“高”电平或者“低”电平,在该口线上产生一定频率的矩形波,街上喇叭就能发出一定频率的声音,通过延时程序控制“高”、“低”电平的持续时间,就能改变输出频率,从而改变音调。要使喇
48、叭出声,就要给P14引脚上不同频率的电平信号,如果我们要想喇叭发出“嘀嗒”、“嘀嗒”的鸣笛声,只要给P14脚的高低电平延时不同即可。当P32脚上的按键按下,就开始鸣笛,鸣笛的长短用循环值控制。判断鸣笛按键是否按下即P23脚上有没有低电平,当键按下,就鸣笛。本程序用VOIDSOUND(VOID)来处理鸣笛。篮球计分器鸣笛报警的部分实现程序如下/鸣笛处理/VOIDSOUNDVOIDINTERRUPT0USING0/外部中断0(INT0),用工作寄存器组0UCHARI,JIFINT_KEY0/判断鸣笛键是否按下,有按下就鸣笛FORI0IDEFINEUCHARUNSIGNEDCHARDEFINEUIN
49、TUNSIGNEDINTVOIDDELAYUCHARX/延时(时间较短)VOIDDELAY1UCHARX/延时(时间较长)VOIDJS_JF_SCANVOID/数码管动态扫描显示函数VOIDKEY_IFVOID/A、B两队分值处理函数VOIDJS_50MSVOID/定时50MS中断函数VOIDKEY_YVOID/预置时间函数VOIDPTIMEUCHAR/时间处理函数VOIDSOUNDVOID/鸣笛警示函数SBITCL1P20/B队4位计分数码管位控线SBITCL2P21SBITCL3P22SBITCL4P23SBITKL1P24/A队4位计分数码管位控线SBITKL2P25SBITKL3P26SBITKL4P27SBITS1P13/驱动4位计时数码管位控线SBITS2P12SBITS3P11SBITS4P10SBITYK1P16/预置分钟的十位SBITYK2P17/预置分钟的个位SBITMUSICP14/P14接喇叭,发声,鸣笛SBITKEY1P30/B队加分键SBITKEY2P31/B队减分键SBITKEY3P34/A队加分键SBITKEY4P35/A队减分键SBITINT_