用AT89C51单片机设计一个秒表:00.0~99.9

本文介绍了如何使用AT89C51单片机设计一个秒表,具备开始、暂停和复位功能。通过按下开关K1启动和暂停计时,开关K2用于复位。提供了电路图和汇编语言编程实现,同时附有PROTEUS仿真实例。

求用单片机设计一个秒表AT89C51
要求1、按开关K1秒表开始计时,再按开关K1计时暂停,按开关K2秒表复位。
2、电路图
3、汇编编写程序
 

;--------------------------------------------------------
;说明:为了提高精度,下列给出的程序和电路图,比楼主提出的要求
; 增加了一位0.1秒的计数和显示功能,所以计时范围是00.0~99.9s。
; 想得到以00~99形式计秒的网友,可到原题的网址去看原文。
;--------------------------------------------------------
;汇编程序如下。
;使用T0定时方式1,每隔50ms中断一次,用于修改时间及显示
;使用外部中断0、1,用于控制启动和清零
;========================================================
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP X0_INT
ORG 000BH
AJMP T0_INT
ORG 0013H
AJMP X1_INT
MAIN:
MOV TMOD,#01H ;T0定时方式1
MOV TH0, #(65536-50000) / 256 ;50ms@12MHz
MOV TL0, #(65536-50000) MOD 256;
SETB TR0
SETB ET0 ;开启定时中断
SETB EX0
SETB EX1
SETB EA ;开中断
MOV R1, #0 ;0~99秒计数
MOV R2, #0 ;0.1秒数
MOV R7, #1 ;50ms计数

MOV P0, #0C0H ;显示00.0
MOV P2, #0C0H
mov p1, #0C0H
LOOP:
SJMP LOOP
;-----------------------------------------------------------
DELAY: ;延时子程序.
MOV R4, #0
DJNZ R4, $
DJNZ R4, $
RET
;-----------------------------------------------------------
X0_INT: ;启动/停止
CPL F0
RETI
;-----------------------------------------------------------
X1_INT: ;清零
MOV R1, #0
MOV P0, #0C0H
MOV P2, #0C0H
mov p1, #0C0H
RETI
;-----------------------------------------------------------
T0_INT: ;50ms中断执行一次.
MOV TL0, #(65536-50000) MOD 256;
MOV TH0, #(65536-50000) / 256 ;50ms@12MHz
DJNZ R7, T0_END ;中断不到20次.
MOV R7, #2 ;#20
JNB F0, T0_END
mov a, r2
add a, #1
da a
anl a, #0fh
mov r2, a
jnz disp
MOV A, R1
ADD A, #1
DA A
MOV R1, A
disp:
mov a, r2
anl a, #0fh
movc a, @a+dptr ;查出段码
mov p1, a ;显示0.1秒
MOV A, R1
ANL A, #0FH
MOV DPTR, #TAB
MOVC A, @A+DPTR ;查出段码
MOV P2, A ;显示个位
MOV A, R1
SWAP A
ANL A, #0FH
MOVC A, @A+DPTR ;查出段码
MOV P0, A ;显示十位
T0_END:
RETI
;-----------------------------------------------------------
TAB:
DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H, 90H
END
;-----------------------------------------------------------


;PROTEUS仿真截图如下:

 

摘要 随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也 逐步加深。秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各 领域中。其中启/停开关的使用方法与传统的机械计时器相同,即按下启/停开关,启 动计时器开始计时,再按下启/停开关计时终止。而复位开关可以在任何情况下使用, 即使在计时过程中,只要按下复位开关,计时应立即终止,并对计时器清零。本设计 就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停 止、时间显示采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控 制秒表的"开始"、"暂停"、"复位",按"开始"按键,开始计时;按"暂停"按键,系统暂 停计时;再按"开始"键,系统继续计时;数码管显示当前计时值;按"复位"按键,系统 清零。 目 录 设计任务 3 二、设计题目 3 三、功能分析 3 四、总体设计 3 4.1硬件设计 4 4.1.1 89C51单片机 4 4.1.2晶体振荡电路 5 4.1.3复位电路 6 4.1.4按键电路 7 4.1.5显示电路 9 4.2引脚控制 10 五、电路原理图 10 六、程序流程图及程序设计 11 6.1程序流程图 11 6.2程序设计 12 七、程序仿真 23 八、心得体会 24 九、致谢 25 十、参考文献 26 设计任务 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停 止、时间显示。 二、设计题目 秒表设计 三、功能分析 采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键 控制秒表的"开始"、"暂停"、"复位",按"开始"按键,开始计时;按"暂停"按键,系统 暂停计时;再按"开始"键,系统继续计时;数码管显示当前计时值;按"复位"按键,系 统清零。 四、总体设计 本实验利用单片机的定时器/数器定时和数的原理,通过采用Proteus仿真软件 来模拟实现。模拟AT89C51单片机、LED数码管以及控件来控制秒表数以及计时的开 启、暂停、继续、与复位。其中有三个数码管来显示数据,两个数码管显示秒(两位) ,另一个数码管显示十分之秒,十分之秒的数码管数从0~9,满十进显示秒 得数码管的个位加,并且十分之显示清零重新从零数。同理当个位满十进后 个位也清零重新数 ,当计时超过范围(即超过99.9秒)后,所有数码管全部清零从新数 4.1硬件设计 4.1.1 89C51单片机 MCS- 51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分 : 1. CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器 2. R0M:4KB的片内程序存储器,存放开发调试完成的应用程序 3. RAM:256B的片内数据存储器,容量小,但作用大 4. I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线 5. 中断系统:共5个中断源,3个内部中断,2个外部中断 6. 定时器/数器:2个16位的可编程定时器/数器 7. 通用串行口:全双工通用异步接收器/发送器 8. 振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号 9. 总线控制:89C51对外提供若干控制总线,便于系统扩展 89C51单片机引脚如下图: 4.1.2晶体振荡电路 89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为 反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放 大器可以配置为片内振荡器。 这里选用51单片机12MHZ的内部振荡方式,电路如下:C2、C3起稳定振荡频率、快 速起振的作用。 晶振电路 4.1.3复位电路 采用上电复位,上电后,由于电容充电,使RST持续段时间的高电平,从而实现 上电复位操作。这不仅能使单片机复位,还能是单片机的外设备同时复位,当程序出 现错误时,可以随时使电路复位。 电路图如下: 复位电路 4.1.4按键电路 当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序, 因此按下不同的按键,将执行不同的功能程序。 电路图如下: 按键电路 4.1.5显示电路 采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发 光二极管,根据各管的亮暗组成字符。 在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、 P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉电阻才能输出高电平 ,这里使用8个4.7k的电阻作为上拉电阻。 电路图如下: 显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歇歇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值