设计一个带时间显示的电子秒表,具体内容如下:
1.电子秒表的初始状态为零,分别显示分、秒、毫秒;
2.设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;
3.有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。
微机原理与接口技术电子秒表
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了实现这个电子秒表的设计,我们可以使用8051单片机(比如AT89C51)配合 proteus 软件进行硬件电路设计,并编写相应的汇编语言程序。下面我会提供一个基本的设计框架,包括电路设计和程序代码。
电路设计
在 Proteus 中,我们需要以下元件:
- AT89C51 单片机
- LED 数码管显示器(共阴极)
- 按钮开关(例如 SW1、SW2 和 SW3 分别对应开始、暂停和停止功能)
- 74HC595 驱动器(用于驱动数码管)
- 两个定时器(Timer 0 和 Timer 1)
连接方式:
- LED 数码管通过 74HC595 驱动器连接到单片机的 P0 口(P0.0 到 P0.7),并设置其控制信号(CS, RCLK, SCLK)。
- SW1、SW2 和 SW3 分别连接到单片机的 P2.0, P2.1 和 P2.2 引脚。
- 定时器配置:Timer 0 作为系统时钟,Timer 1 用于计时。
程序代码 (8051汇编语言)
; 常量定义 COUNT_PER_SEC EQU 12 COUNT_PER_MIN EQU COUNT_PER_SEC * 60 COUNT_PER_HOUR EQU COUNT_PER_MIN * 60 MAX_TIME EQU 23*COUNT_PER_HOUR + 59*COUNT_PER_MIN + 59*COUNT_PER_SEC + 999 ; 寄存器定义 TMR1H equ 0x85 ; Timer 1 高字节 TMR1L equ 0x86 ; Timer 1 低字节 TH1 equ TMR1H ; TH1 = Timer 1 的高字节 TL1 equ TMR1L ; TL1 = Timer 1 的低字节 TMR0 equ 0x8A ; Timer 0 TMOD equ 0x8D ; Timer 控制寄存器 SCON equ 0xB9 ; Serial Control Register ; 初始化子程序 init: MOV TH1, #0 ; Timer 1 计数初值 MOV TL1, #0 MOV TMOD, #0x21 ; Timer 1 工作于模式1, 8位自动重载计数 MOV TM0, #0 ; Timer 0 计数初值 MOV TCON, #0x01 ; Timer 0 开启中断 MOV P2, #0xFF ; 设置所有输入口为高电平 MOV P0, #0x00 ; LED 显示清零 MOV R0, #0 ; 当前时间存储变量 MOV R1, #0 MOV R2, #0 MOV R3, #0 RET ; 定时器0中断服务子程序 timer_isr: INC R3 ; 每隔1ms增加1 JNB TF0, timer_isr_end ; 如果TF0未置位,继续检查 SETB TF0 ; 清除TF0标志 JC overflow ; 时间溢出处理 timer_isr_end: RETI ; 时间溢出处理子程序 overflow: INC R2 ; 秒加1 CPL P2.0 ; SW1 状态翻转 CJNE R2, #COUNT_PER_SEC, overflow_end ; 若未满1s,跳过 MOV R2, #0 ; 重置秒计数 INC R1 ; 分加1 CPL P2.1 ; SW2 状态翻转 CJNE R1, #COUNT_PER_MIN, overflow_end ; 若未满1min,跳过 MOV R1, #0 ; 重置分钟计数 INC R0 ; 小时加1 CPL P2.2 ; SW3 状态翻转 CJNE R0, #COUNT_PER_HOUR, overflow_end ; 若未满1小时,跳过 MOV R0, #0 ; 重置小时计数 overflow_end: MOV TH1, #0 ; 重新装载Timer 1计数初值 MOV TL1, #0 CLR TR1 ; 关闭Timer 1中断 MOV P0, R0 ; 更新小时显示 MOV P0, R1 ; 更新分钟显示 MOV P0, R2 ; 更新秒显示 MOV P0, R3 ; 更新毫秒显示 SETB TR1 ; 开启Timer 1中断 RETI main: CALL init start: JMP start
注意事项
由于篇幅限制,这里仅提供了关键部分的代码和电路设计概述。你需要在 Proteus 中搭建电路,并将上述代码烧录到单片机中。同时,还需要根据实际使用的 LED 数码管类型调整显示逻辑,因为不同的数码管可能有不同的段选线和公共线连接方式。
此外,由于汇编语言的复杂性,建议学习一些基础知识后再尝试理解代码。如果你对汇编语言不熟悉,可以考虑使用 C 语言或其他高级语言进行编程,这样会更易于理解和调试。
在 Proteus 中,确保正确连接各个元件,并在单片机的 Keil uVision 或其他集成开发环境(IDE)中编译和下载程序。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 反激PWM控制芯片调研
- ¥15 Python for loop减少运行时间
- ¥15 fluent模拟物质浓度udf
- ¥15 Collection contains no element matching the predicate
- ¥20 冻品电商平台的搜索是怎么实现的
- ¥15 如何搞一个可以控制、显示马达频率
- ¥15 WPF动态创建页面内容
- ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
- ¥15 SQL数据库操作问题
- ¥15 Matlab安装yalmip和cplex功能安装失败