单片机99秒计时器

发布时间:2018-08-02 14:30:01

1设计背景

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

计时器广泛应用于实际生活当中,有倒计时器和计时器,我们本次设计为计时器。计时器广泛应用于各种比赛当中用来计时,往往都精确到百分秒的精度,其次也应用于计时闹钟等。生活中计时器比较常见,而设计计时器是很具有实际意义的。

2 硬件设计

2.1 99秒计时器的总体设计方案

利用单片机的定时器设计一个秒计时器,其中设有一个按键,当第一次按下按键时,开始计时,第二次按下按键时,停止计时,送入P0P2端口显示,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。第三次按下按键时使定时器清零,等待下一次按键。本设计中需要一个时钟电路,一个复位电路和一个控制电路来实现整个电路的运行,实现0099的循环计时。

2.2 99秒计时器的组成及其原理图

秒计时器由以下几个部件组成:单片机AT89C51、两个静态数码显示、一个按钮等其它组件。

该电路的工作原理:AT89C51从稳压电路中获得稳定的+5V电压,接到VCC端,提供稳定的电压;P2P0口通过电阻接到显示电路的七段数码管的a b c d e f g 端口上,利用数码管显示数字;RST接复位电路,实现电路的复位;XTAL1XTAL2接晶振电路;整个电路实现循环动态显示数字00~99.

2.3 AT89C51简单介绍及引脚说明

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,216位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。本设计中采用P0口显示计时器的十位数字。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。本设计中采用P2口显示计时器的个位数字。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0

P3.3 /INT1(外部中断1

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

振荡器特性:

XTAL1XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

2.4复位电路、时钟电路及控制电路

复位电路

单片机的复位电路有上电自动复位和按键手动复位两种。

上电自动复位通过电容的放电实现。在时钟电路工作后,在RST端给出两个周期的搞点评就可完成复位操作;上电加按键手动复位的工作方式,当复位键按下时,复位端通过小电阻与电源接通,电容迅速放电使RST引脚为高电平,当复位键弹起后,电源通过电阻重新给电容充电,使RST端出现复位正脉冲,实现复位,本电路采用上电自动复位

时钟电路

单片机的时钟方式有内部时钟方式和外部时钟方式,本电路采用内部时钟方式。内部时钟电路利用芯片内部的振荡器,在XTAL1XTAL2两端跨接晶振,构成了稳定的自激振荡器,发出的脉冲直接送入内部时钟电路。外界晶振时C1C2都在30pF左右;C1C2对频率都有微调作用,晶振的频率范围一般是1.2—12 MHz。为了减小寄生电容,更好的保证振荡器稳定、可靠地工作,振荡器和电容应尽可能的与XTAL1XTAL2靠近。本设计时钟由12MHZ的晶振来组成振荡电路,来控制单片机对数码管的动态扫描。

按键电路图

上图为本电路的按键(控制)电路,第一次按下按键,电平由高电平变为低电平,计时器从此刻开始计数;第二次按下按键时,电平由高电平变为低电平,计时器计时暂停,数码管显示暂停时的数字;第三次按下按键时,电平由高电平变为低电平,计时器复位,计时器数字变为00,当按键再次按下时重新开始计时。

2.5 数码管的显示方法与工作方式

显示方法

发光二极管显示器一般由若干个发光数码管组成,数码管的每一位数码段是一支发光二极管。当发光二极管导通时,相应的一个点或一个笔划发光,控制发光二极管发光组合,可以显示出所需字符。

若一个数码管的若干只发光二极管的阳极连接在一起,通过阴极控制其显示,则构成共阳极结构;若将发光二极管阴极连接在一起,通过阳极控制其显示,则构成共阴极结构。

无论是共阴极数码还是共阳极数码,其显示字形中碼段的定义是一致的。微机进行显示控制时,一般通过I/O口送出七段码。显然即使送出的七段码相同,若I/O口线与数码管引脚连线不同,显示的字形也不相同。在本设计中我们组采用了共阴极的显示方法。

工作方式

根据控制原理不同,显示方式分为静态显示方式和动态显示方式。

若数码管显示为某一个字符时相应的发光二极管恒定的导通或截止,则该显示方式为静态显示方式。静态显示方式时所有数码管同时点亮,字符显示期间加在数码管上的七段码不变,即每一个数码管对应一个8I/O接口,所以占用的硬件资源较多。

动态显示则是轮流点亮各数码光即对显示器进行扫描。任何时刻只给一个数码管通电,通电一定时间后再给下一个数码管通电。只要刷新率足够高,动态显示方式同样可以实现稳定显示。动态显示的最大优点是节约I/O

。静态显示方式简单不容易出错,如果电路设计合适,也能够用较少的线完成多个数码管的显示。但与动态显示相比,动态显示电路连接更简单,节省单片机I/O口,从而节省单片机的资源,如今已经有很多这样成熟的基于动态扫描的芯片,并且采用动态显示方式极大的节省单片机的资源,特别是在单片机的I/O数量比较紧张的情况下,更能体现采用动态显示的优越性。因此,在现在的多数电子系统中,数码管多数采用动态扫描技术来显示,本设计中我们采用的事动态显示方法

2.6仿真电路图及电路连接

数码管显示图

系统硬件连接

1 把“单片机系统”区域中的P0.0/AD0P0.6/AD6端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ae端口上;要求:P0.0/AD0对应着aP0.1/AD1对应着b,……,P0.6/AD6对应着e

2 把“单片机系统”区域中的P2.0/A8P2.6/A14端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ae端口上;要求:P2.0/A8对应着aP2.1/A9对应着b,……,P2.6/A14对应着e

3 把“单片机系统“区域中的P3.7/RD用导线连接到”独立式键盘“区域中的SP1端口上;

4. 把三极管提供电压的蜂鸣器连接到按键电路上,当按键按下时,蜂鸣器响起,提示开始计时、暂停计时或者复位;

5 8排阻按照顺序连接到数码显示管的电路中通过控制电阻的大小来控制a b c d f e g管的灭或者亮从而控制数码管显示的数字;

6 连接复位电路和时钟电路。

2.7利用PROTUES进行仿真电路图的连接

利用工具栏中的PICK 利用关键字寻找所需要的仿真元器件。如图所示

利用鼠标将找到的各个元器件连接起来。如下图所示

KEIL软件编译无误后生成的HEX文件导入到仿真电路图的AT89C51单片机中,如图所示

最后,在所有的步骤无误后即可进行软件仿真。利用左下角的按钮可控制仿真的运行和停止。

完成后的仿真电路图如下

3软件设计

3 .1流程图

此程序采用汇编语言用十六进制算法编写了两位数码管循环扫描动态显示的专用程序。通过软件的控制使两位数码管能从00计数到99,再回到00,依次进行循环。若在计数期间有复位高电平出现时,便重新从00开始计数。并有电源开关控制让电路是否工作,且有指示灯只是电源是否正常。

主程序流程图如下图所示

中断程序流程图

在正常计时状态下,若按下P1.1口按键,则进行时钟 /秒表功能的转换,转换后计时从开始。当按下P1.2口的按键时,可实现清0、计时启动、暂停功能。

3.2 程序代码

second equ 30h

tcount equ 31h

kcount equ 32h

key bit p3.7

org 00h

sjmp start

org 00h

sjmp start

org 0bh

ljmp int_t0

start:mov dptr,#table

mov p2,#3fh

MOV P0,#3fh ;开始显示器显示00

mov second,#00h

mov tcount,#00h

mov kcount,#00h

mov tmod,#01h ;定时器0工作在方式1

mov tl0,#(65536-50000)/256

mov th0,#(65536-50000) mod 256

k1: jb key,$

lcall delay

jb key,$ ;等待按键

mov a,kcount

cjne a,#00H,k2 ;判断按键次数

setb TR0 ;第一次按键启动定时器

mov ie,#82h

jnb key,$

inc kcount ;抬起按键 定时器次数加1

ljmp k1

k2: cjne a,#01h,k3

clr tr0 ;第二次按键关闭定时器

mov ie,#00h

jnb key,$

inc kcount ;按键抬起按键次数加1

ljmp k1

k3: cjne a,#02h,k1 ;第三次按键返回初始状态

jnb key,$

ljmp start

int_t0:mov th0,#(65536-50000)/256

mov tl0,#(65536-50000) mod 256

inc tcount

mov a,tcount

cjne a,#20,i2 ;是否积够1

mov tcount,#00h

inc second

mov a,second

cjne a,#100,i1

mov second,#00h

i1:mov a,second

mov b,#10

div ab

movc a,@a+dptr ;显示时间

mov p0,a

mov a,b

movc a,@a+dptr

mov p2,a

i2: reti

table:db 3fh,06h,5bh,4fh,66h

db 6dh,7dh,07h,7fh,6fh

delay:mov r6,#20

d1:mov r7,#250

djnz r7,$

djnz r6,d1

ret

end

3.3利用KEIL软件进行程序编译

打开keil之后新建工程,选择ateml,如下图所示在选择方式为atmel之后,在选择单片机是选择AT89C51,选择情况如下图所示,选择为完成后,新建程序并将程序编写后打入,保存为asm格式保存玩之后设置其他的要求的要求,比如要设置晶振为12MHz在设置完成后可利用软件本身的编译程序进行编译,编写正确就会提示无错误无警告;假如程序有问题的话,就会显示所编写的程序的错误类型及错误所在的位置程序正确后就能把文件转换为hex格式,兵将其输入到设计的计时器电路的AT89C51单片机中,将编写的程序展示出来。

将编译无误的程序导入仿真电路图中运行

运行过程中,第一次按下按键,计时器开始从00开始计时;第二次按下按键,计时器计时暂停,若计时超过99秒,计时器从00开始循环计时;第三次按下按键,计时器复位00

计时器复位图

第二次按下按键计时器显示当前计数

第三次按下按键计时器复位

4结论

使用软件和编写程序时一定要注意每一个细节,一个分号的遗漏也会造成错误。制作前一定要做好规划设计,反复论证和计算,防止考虑不到的地方使得做好的东西需要翻工。如果制作或使用中发现问题,既极大地打击积极性和自信心,还会极大地消耗时间,拖延项目的进度。制作硬件也一定要耐心细致,极小的失误都会造成短路等问题而直接造成大错。

这门课的学习确实给了我们很多,而且不单单是知识和技能,还有精神层面上的东西。而在项目制作过程中的困难和喜悦,希望和失望,成功和失败,也都是我们心中永远的宝贵财富。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。

这个设计过程中,我们通过在原有的计数器系统进行了改进,使之增添了暂停、计数、清零等的三个控制功能,使之成为一个更加适用,功能更加完备的属于自己的一个系统。设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。

课程设计的建议

1. 从分析解决实际问题出发学习了解单片机的知识和技能,案例教学。

2. 由于单片机的内容较多且琐碎,应增加课时量,以满足同学们对单片机知识的需要。

3. 教师在讲授某一知识时,最好再多做一些当堂演示。

5 参考文献

[1] 牛煜光,单片机原理与接口技术,电子工业出版社

[2]豆丁网. MCS-51单片机99秒计时器设计

[3] 百度文库吧,PROTUES软件中英文名称对照表

[4] 李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社.2005

[5] 百度文库,单片机课程设计

[6]李群芳. 单片机微型计算机与接口技术[M].电子工业出版社.

[7]何立民 .单片机高级教材[M].北京:航空航天大学出版社.2000.

附录

BUS 总线

CAP 电容
CAPACITOR 电容器
CRYSTAL 晶振
GROUND

POWER 电源
RES 电阻
RESISTOR 电阻器
Transistors 晶体管(三极管,场效应管)
Capacitors 电容集合
73EG-COM-CAT-GRN 数码显示管

AT89C51 单片机

BUTTON 按键

RESPACK 8排阻

DIOAE-LED 反光二级管

单片机99秒计时器

相关推荐