24秒计时器设计篮球比赛24秒计时器采用倒计时的方式,以AT89C51芯片为核心,主要由按键控制部分、显示部分和报警部分组成,具有启动计时、暂停、继续、复位和到零报警等基本功能。
硬件电路设计和软件编程设计完成之后,利用Keil u Vision4软件生成HEX文件,将HEX文件导入Proteus软件下设计出的仿真电路中,检查设计要求的各项基本功能是否满足设计要求。
通过不断的对软件和硬件进行调试和改进,最终完成了二者的良好适配。
本设计采用模块化设计,思路明确,易于编程和调试。
关键词:单片机;计时器;篮球赛第一章设计要求及方案论证1.1 设计目的及要求1.1.1 设计目的通过本次利用51单片机设计篮球比赛24秒计时器,大致掌握单片机开发设计的基本过程,了解和熟悉单片机与外围接口电路的综合应用,加深对单片机的理解,体会单片机在我们生产生活中的重要意义。
其次,通过本计时器的设计,学习利用C语言进行单片机编程,梳理学习的C语言知识,提升编程能力,对以后的工作和学习可以起到奠定基础的作用。
1.1.2 功能要求(1)能够进行比赛的24秒倒计时,并具有启动、暂停、继续和复位等基础功能;(2)能够通过LED数码管将倒计时显示出来,便于观看;(3)当24秒倒计时结束时,能够发出报警信号。
1.2 方案论证1.2.11.2.3 系统结构图以下是本计时器的系统结构图,以51单片机为控制芯片,主要包括晶振电路、计时器复位、按键控制、计时显示和报警信号等组成部分。
图1 系统结构图第三章硬件电路设计3.1 各部分电路设计本计时器功能要求主要是24秒倒计时,实现启动、暂停、继续和复位等操作,同时将计时显示出来。
当计时倒为零时发出报警信号。
基于这些要求,设计出本计时器的各电路模块如下所述:3.1.1 晶振电路图3.1 晶振电路示意图单片机电路是由许多的门电路组成,由于门电路工作时需要时钟信号作为触发信号,所以单片机工作必不可少的便是晶振电路,即晶振电路为单片机正常工作提供时钟信号流。
因而在同样电路的情况下,脉冲频率越高,单片机性也越高。
本计时器中我们使用12MHz的晶振,其原因是51单片机内部时钟频率是外部时钟的12分频,即12MHz晶振分频后就是12MHz/12=1MHz,一个指令周期为1/1M=1us,这样为我们获得一秒的延时提供了便利。
在本电路中,电容起到了很重要的作用。
振荡回路交联电容,若没有这两个电容,振荡电路会因没有回路停振,电路无法正常工作。
3.1.2 复位电路图3.2 复位电路示意图本计时器使用低电平触发复位。
由于电容对直流而言容抗较大,当KEY未按下时,通过电容和电阻分压是的RST端为高电平;当KEY键按下时,通过电阻分压RST端为低电平,从而实现复位。
3.1.3 独立按键电路图3.3 独立按键电路示意图独立按键部分采用低电平触发,当按键按下时,p口电位被拉低,相应的操作被触发。
在连接按键时可选接上拉电阻,但是若要加则电阻不能太小,防止灌电流过大。
51单片机I/O口军事开漏输出,P1-P4都内置弱上拉电阻(为了输出时能拉高输出电平),P0口没有内置上拉,故用作普通I/O口时必须外接若上拉电阻。
3.1.4 显示电路图3.4 显示电路示意图显示电路主要由二位八段数码管组成,其中a、b、c、d、e、f、g引脚控制数码管的七个LED段,dp控制小数点(本设计未用到,可始终置高电平或者不接线),1、2两引脚进行显示片选。
电路中个电阻的作用如下所述:上拉电阻R1-R8:单片机P0口内无上拉电阻,用做普通接口时需外接上拉电阻。
电阻R9、R10:保护三极管。
电阻R11、R12:当三极管不导通时,由下拉电阻将数码管公共端拉成低电平。
3.1.5 报警电路(蜂鸣器及LED灯)图3.5 报警电路蜂鸣器电路示意图图3.6 报警电路LED电路示意图当计时器从24秒减到零时,蜂鸣器BZ端由高电平变为低电平,蜂鸣器发出响声;LED负极电平由高变低,发光二级管导通开始发光。
经过1秒之后,蜂鸣器停响,LED灯熄灭。
3.2 电路设计仿真图图3.7 仿真电路图如上图所示为本计时器的硬件电路仿真图。
其中P1口接按键电路,P2口接显示模块的片选位和报警电路部分,P3口空闲,均未添加上拉电阻。
P0口接八段数码管的数码管脚,前文提到的,P0口未内置电阻,用作普通接口时需接上拉电阻。
晶体振荡器由12MHz的晶振构成。
独立按键部分设置启动、暂停和继续三个键位,分别起到三个不同的作用。
在后续程序及仿照时便会体现出来。
第四章编程及仿真分析4.1 程序流程图图4.1 程序流程图程序流程图如上所示。
由图我们可以看出,最主要的部分在于按键的操作,即对于按键的检测是最关键的,不同的按键操作之后对应不同的系统处理,比如当计时暂停状态下,当我们直接按下复位键时,直接回到复位状态,此时不同考虑继续计时的情况。
需要指出的一点是,在此程序流程图中,为了简易流程图结构,我们将暂停状态下的“继续”计时操作统一到“开始计时”当中,但在实际操作的过程中,二者的区别也仅在于是否是从原值24的基础上开始倒计时。
4.2 各程序模块设计4.2.1 延时程序中的延时函数如下所示:void delay(unsigned int tms){unsigned int i , j;for(i = 0; i < tms; i++);for(j = 0; j < 120; j++);}函数的作用是利用双层循环生成一个t毫秒的延时。
此函数主要用于数码管的显示和警报的持续时间。
如若没有延时函数,计数器则无法正常运行,具体表现在无法显示和发出报警信号。
因此,延时是必不可少的。
4.2.2 LED显示程序中的显示函数如下所示:void Led(){S1=0;P0=dis_code[time/10];delay(20);S1=1;P0=0xff;delay(20);S2=0;P0=dis_code[time%10];delay(20);S2=1;P0=0xff;delay(20);}显示程序中主要分为两段,第一段将显示代码发送到P0口,显示计时器的十位数字;第二段将显示代码同样发送到P0口,但其显示的是计时器的个位数字。
由此函数我们可以看到delay延时的作用,其主要原因是数码管是不断地按照单片机脉冲接受显示的编码,因为其频率非常高,因此必须要添加延时使之可以显示出来,否则我们观察不到计时显示。
4.2.3 计时器配置和中断程序中关于计时器的初始化和中断设置的函数如下:void init()//计时器配置函数{TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=0;}void time0(void) interrupt 1//定时器中断函数{TH0=0x3c;TL0=0xb0;count++;if(count==20){count=0;if(time>0)time--;if(Q==1){time=24;TR0=0;BEEP=1;ledd=1;Q=0;}if(time==0){BEEP=0;ledd=0;Q=1;}}}计时器配置函数如上第一段所示,T0工作在方式1,计时器预设初始值,产生50ms中断,开启总中断,开启计时器0中断,紧接着便开始计时。
上面第二段函数则为中断,函数中count从0自加到20,由此我们可以计算得出产生了20×50ms=1000ms=1s的延时。
每次1秒计时结束后count重新回归于0,然后依情况采取不同的操作处理。
4.3 仿真及结果分析4.3.1 Keil软件应用Keil 软件是美国Keil Software公司出品的单片机软件开发系统。
利用Keil 软件我们可以直接编写、调试、编译单片机开发程序,并且利用其强大的功能生成Hex文件,然后将Hex文件拷贝入芯片中,便可实现单片机的软件设计。
4.3.2 Proteus软件应用Proteus软件是英国Lab Center Electronics公司出版的硬件电路仿真工具软件,其具有其它EDA工具软件的仿真功能,还能配套仿真单片机及外围器件,是目前比较好的模拟仿真单片机及外围器件的工具。
利用Proteus我们构造了本计时器的硬件电路,并且可以在仿真电路完成设计之后,通过点击芯片,加载Keil 生成的Hex文件,可以直接进行仿真,此时单片机的操作结果均可以直观的观察到。
4.3.3 仿真结果及分析整个计时器的仿真电路图如下所示:图4.2 仿真图(1)点击proteus软件左下角的开始仿真时如下所示:图4.3 仿真图(2)按下仿真电路图中的“启动”按键时倒计时开始,期间我们可以按下“暂停键”,则计时暂停,如图所示:图4.4 仿真图(3)当然我们可以直接按下“复位”按键则直接复位,也可以在暂停的状态下回到复位。
暂停时我们按下“继续”按键,计时继续,当倒计时到达0时,蜂鸣器发出报警信号,LED报警灯点亮,如图所示:图4.5 仿真图(4)可以看到的是右下角的LED灯点亮,同时通过仿真软件可以听到蜂鸣报警。
至此,所有要求功能均已完成。