汇编语言与接口技术实践——秒表

1. 设计要求

基于 51 开发板,利用键盘作为按键输入,将数码管作为显示输出,实现电子秒表。

功能要求:

(1)计时精度达到百分之一秒;

(2)能按键记录下5次时间并通过按键回看

(3)设置时间,实现倒计时,时间到,数码管闪烁 10 次,并激发蜂鸣器,可通过按键解除。

2. 设计思路

实现过程:
代码实现了一个简单的单片机程序,其中包含了数字显示、按键检测、正/反倒计时、数据存储、按键判断、复位功能、显示控制和延时等基础功能。通过设置程序结构、定义变量和寄存器、使用标签以及相关指令,实现了LED灯阵列的数字显示、按键状态的检测、倒计时功能、数据存储、按键判断和跳转、系统复位、LED灯的显示控制以及延时等功能。整体而言,该代码是一个综合性的单片机程序,展现了在嵌入式系统中常见的基础操作和功能。

程序结构:

ORG 0000H: 设置程序的起始地址为0000H。

LJMP MAIN: 无条件跳转到MAIN标签,即程序的主入口。

ORG 0100H: 设置程序的代码段起始地址为0100H。

主要变量和寄存器说明:

R0, R1, R2, R3, R4, R5, R6, R7: 寄存器,用于临时存储数据。

A, B: 通用寄存器。

P0, P1, P2: 用于控制端口的寄存器。

SRC、DPTR: 数据指针寄存器。

数字显示:

使用SHOW和LLSHOW等标签,通过LED灯阵列实现数字的显示。

按键检测:

使用KEY2标签,通过检测键盘输入状态实现按键的检测,按键状态保存在A寄存器中。

倒计时功能:

使用COUNT和COUNT1等标签,实现了一个简单的倒计时功能。

使用LLLSHOW和LLLDARKSHOW标签,通过LED灯阵列实现了倒计时数字的显示和清除。

数据存储和保存:

使用SAVE和SAVE1等标签,实现了将数据存储到指定的内存位置。

数据存储的起始位置是由R1寄存器表示。

按键判断和跳转:

使用CHECK、CHECK1、WAIT等标签,根据按键的状态进行条件判断和跳转。

复位功能:

使用RESET标签,实现了系统的复位功能。

显示控制和延时:

使用SHOW、DARKSHOW、DELAY等标签,控制LED灯的显示和延时。

其他功能:

包括了一些与LED灯和按键相关的功能实现,如LED灯的控制、显示、清除等。

拓展功能——正计时和LED8x8点阵显示:

正计时:

基于倒计时的原理,拓展了一个功能上与之相反的正计时功能,从零开始计时,直到用户的设定值。

LED8x8点阵显示:

图 1  LED8x8点阵屏

使用LED8x8点阵屏显示个位数字和一些用户交互图形和动画(注意使用时需把黄色帽子扣在另外一边)

图 2 操作流程图

3. 实现效果

图 1开始界面

按下K4选择模式(正计时/倒计时)

图 2选择正计时模式

图 3选择倒计时模式

矩阵键盘选择起始值/终点值的十位和个位,并按下K2键确认

图 4选择十位

按下K1键开启程序

图 6倒计时

时间到按下K2解除蜂鸣器,并按下K3进行左查询或K4进行右查询时间记录

4. 总结

本程序结构清晰明了。起始地址被正确设置,通过跳转到主入口实现程序的顺利执行。采用ORG指令设置代码段起始地址,提高了程序的组织性。主要的寄存器和变量都经过详细说明,有助于他人理解和维护代码。

数字显示方面,通过LED灯阵列实现了显示功能,而按键检测则通过KEY2标签实现,按键状态存储在A寄存器中。倒计时功能的实现涉及COUNT和COUNT1标签,同时通过LLLSHOW和LLLDARKSHOW标签控制LED灯阵列进行数字的显示和清除。

数据的存储和保存方面,通过SAVE和SAVE1标签实现,存储的起始位置由R1寄存器表示。按键判断和跳转方面使用了CHECK、CHECK1、WAIT等标签,根据按键状态进行条件判断和跳转。复位功能通过RESET标签实现,确保系统可以在需要时进行重新初始化。

显示控制和延时通过SHOW、DARKSHOW、DELAY等标签实现,以控制LED灯的显示和延时。

此外,还包括一些与LED灯和按键相关的功能,如LED灯的控制、显示、清除等。拓展功能方面,实现了正计时功能,为用户提供了更多选择。此外,还涉及到LED8x8点阵显示,为课设增加了一些复杂性和趣味性。

在总体上,这个单片机课设考虑到了多个方面,包括基本功能、用户交互、数据存储和显示等,展现了一个完整而且有趣的设计。程序的模块化和注释使得代码易于理解和维护。在进一步的开发和测试中,我们也考虑到了一些边界条件和错误处理,以确保系统的稳定性和可靠性。

课程评价:
单片机课程为我们提供了深入了解嵌入式系统的机会,通过学习底层硬件、嵌入式编程和实际应用,培养了学生的系统设计和调试能力,同时强化了团队合作和问题解决的技能。这门课程对计算机工程专业学生具有重要意义。

5. 代码

      ORG 0000H

  LJMP MAIN

  ORG 001BH  //=======中断服务程序=======

  MOV TL0,#0B0H

  MOV TH0,#3CH

  CPL P1.0

  DJNZ R5,RETURN

  CJNE R4,#10H,DONE

  MOV R4,#0CH

  DONE:

  INC R4

  MOV R5,#0AH

  RETURN:

  RETI

  ORG 0100H  //=============主程序==============

  SRC DATA 60H     ;定义SRC数据指针存放R0值

  CLR F0

MAIN:

      ACALL NULL

      MOV R0,#20H   //R0作为显示数据操作指针

  MOV R1,#20H   //目前的数据指针   

  LCALL INTERRUPT

  MOV R4,#0DH

  AJMP MODELCHECK

NULL: //清空上一次操作残留的数据

      MOV R0,#2DH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2809564.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

第十三章 Linux——备份与恢复

第十三章 Linux——备份与恢复 基本介绍安装dump和restore使用dump完成备份dump语法说明dump应用案例1dump应用案例2dump-w查看备份时间文件备份文件或者目录备注 使用restore基本语法基本介绍restore基本语法应用案例1应用案例2应用案例3应用案例4 基本介绍 实体机无法做快照…

SpringBoot:数据访问-整合 spring-boot-starter-data-jpa

点击查看数据访问demo:LearnSpringBoot06DataJPA Spring Data JPA - Reference 文档 简介 Spring Data的JPA模块包含一个允许定义存储库bean的自定义名称空间。它还包含JPA特有的某些特性和元素属性。通常,可以使用repositories元素来设置JPA存储库: 点…

学习使用在mysql中查询指定字段字符串包含多个字符串的方法

学习使用在mysql中查询指定字段字符串包含多个字符串的方法 使用LIKE关键字使用REGEXP关键字使用FIND_IN_SET函数使用INSTR函数和AND关键字 使用LIKE关键字 SELECT * FROM table_name WHERE column_name LIKE %string1% AND column_name LIKE %string2%;使用LIKE关键字&#x…

异常统一处理:Exception(兜底异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分,主要聚焦于对 Exception(兜底异常) 的原理解析与异常处理机制,并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑,请参考文章: 《…

yolov8学习笔记(二)模型训练

目录 yolov8的模型训练 1、制作数据集(标记数据集) 2、模型训练(标记数据集、参数设置、跟踪模型随时间的性能变化) 2.1、租服务器训练 2.2、加训练参数 2.3、看训练时的参数(有条件,就使用TensorBoard&…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-27-处理单选和多选按钮-番外篇

1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何使用playwright来处理单选按钮和多选按钮进行自动化测试,想必大家都已经掌握的八九不离十了吧。这一篇其实也很简单&#xff1a…

JavaSE——面向对象基础(4/4)-成员变量和局部变量的区别、面向对象综合案例(电影信息系统)

目录 补充:成员变量和局部变量的区别 面向对象综合案例 设计一个电影类 IDEA快捷操作 设计一个电影操作类 准备电影数据 业务处理 运行结果 补充:成员变量和局部变量的区别 区别成员变量(对象的属性)局部变量类中位置不同…

Project_Euler-07 题解

Project_Euler-07 题解 题目 思路 一个线性筛解决问题&#xff0c;当然也可以用埃式筛或者标准的暴力破解&#xff0c;这里选用最优秀的方式&#xff0c;顺便复习一下线性筛的内容&#xff1a; #include<stdio.h> #include<stdlib.h> #include<math.h> #in…

spring源码概念解析-spring生命周期

1.Spring生命周期 BeanFactory的⽣命周期 ApplicationContext的⽣命周期 初始化的过程都是⽐较⻓&#xff0c;我们可以分类来对其进⾏解析&#xff1a; Bean⾃身的⽅法&#xff1a;如调⽤ Bean 构造函数实例化 Bean&#xff0c;调⽤ Setter 设置 Bean 的属性值以及通 过的 in…

matlab新能源汽车三自由度操纵稳定性分析及优化

1、内容简介 略 可以交流、咨询、答疑 55-新能源汽车三自由度操纵稳定性分析及优化 2、内容说明 略 摘 要 电动化是节能减排、寻求替代能源的最佳途径&#xff0c;已成为行业共识&#xff0c;论文基于江西科技学院桑塔纳轿车油改气项目&#xff0c;在拆除发动机、变速…

Unity(第六部)向量的理解和算法

标量:只有大小的量。185 888 999 &#xff08;类似坐标&#xff09; 向量:既有大小&#xff0c;也有方向。&#xff08;类似以个体为主体的方向&#xff0c;前方一百米&#xff09; 向量的模:向量的大小。&#xff08;类似以个体为主体的方向&#xff0c;前方一百米、只取一百米…

【Crypto | CTF】BugKu 简单的RSA

天命&#xff1a;这题也不算简单了&#xff0c;要反编译&#xff0c;要灵活一点 首先收到pyc文件&#xff0c;拿去反编译出来&#xff0c;可以用在线反编译&#xff0c;也可以用工具反编译 在线&#xff1a;python反编译 - 在线工具 工具&#xff1a;https://download.csdn.n…

基于Java的传统工艺品销售系统的设计与实现

网上购物尚未流行前需要购买传统工艺品的人们都是到遍布于大街小巷的商场商店中进行挑选购买&#xff0c;除非抱有非常明确的目标&#xff0c;否则是很难在短时间内挑选购买到所需传统工艺品的。网上购物在国内的兴起则彻底颠覆了传统的线下购物模式&#xff0c;线下实体商场也…

Git命令操作

什么是Git&#xff1f; Git是⼀个免费的&#xff0c;开源的分布式版本控制软件系统 git区域 存储区域&#xff1a;Git软件⽤于存储资源得区域。⼀般指得就是.git⽂件夹 ⼯作区域&#xff1a;Git软件对外提供资源得区域&#xff0c;此区域可⼈⼯对资源进⾏处理。 暂存区&am…

中海油、中石化、中石油校招历年真题和题库

中海油、中石化、中石油是中国领先的石油和天然气公司&#xff0c;拥有雄厚的实力和丰富的资源&#xff0c;是许多求职者梦寐以求的就业机会。为了帮助应聘者更好地备战这三家公司的校园招聘&#xff0c;我特别整理了三套精心准备的校招试题资料&#xff0c;涵盖了各个领域的知…

【计算机网络】1.4 接入网和物理媒体

1.4 接入网和物理媒体 问题&#xff1a;怎样将端系统和边缘路由器连接&#xff1f; 答&#xff1a;有线方式&#xff08;住宅接入网络、单位接入网络等&#xff09;或无线方式&#xff08;无线接入网络&#xff09;。 有线接入方式 光纤同轴混合网是基于已有的有线电视网开发的…

五种多目标优化算法(MOHHO、MOCS、MOFA、NSWOA、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 多目标优化算法是用于解决具有多个目标函数的优化问题的一类算法。其求解流程通常包括以下几个步骤&#xff1a; 1. 定义问题&#xff1a;首先需要明确问题的目标函数和约束条件。多目标优化问题通常涉及多个目标函数&#xff0c;这些目标函数可能…

基于相位的运动放大:如何检测和放大难以察觉的运动(02/2)

目录 一、说明二、算法三、准备处理四、高斯核五、带通滤波器六、复杂的可操纵金字塔七、最终预处理步骤八、执行处理九、金字塔的倒塌十、可视化结果十一、结论 一、说明 日常物体会产生人眼无法察觉的微妙运动。在视频中&#xff0c;这些运动的幅度小于一个像素&#xff0c;…

matplotlib坐标投影

文章目录 三维坐标极坐标地理坐标 matplotlib教程&#xff1a; 初步&#x1f4c8; 子图绘制 三维坐标 【plt】可以将二维图形嵌入到三维坐标系中&#xff0c;方法也很简单&#xff0c;只需用创建一个子坐标框架&#xff0c;并指定其投影方式为3d&#xff0c;并通过zdir参数指…

Python 鼠标模拟

鼠标模拟即&#xff1a;通过python 进行模拟鼠标操作 引入类库 示例如下&#xff1a; import win32api import win32con import time 设置鼠标位置 设置鼠标位置为窗口中的回收站。 示例如下&#xff1a; # 设置鼠标的位置 win32api.SetCursorPos([30, 40]) 双击图标 设置…