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

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://www.mzph.cn/news/702381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音数据抓取工具|短视频下载工具|视频内容提取软件

一、开发背景: 随着抖音平台的流行,越来越多的人希望能够下载抖音视频以进行个人收藏或分享。然而,目前在网上找到的抖音视频下载工具功能单一,操作繁琐,无法满足用户的需求。因此,我们决定开发一款功能强大…

java面试题之mysql篇

1、数据库索引 ​​​​​​​ 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要…

音视频开发之旅(69)-SD图生图

目录 1. 效果展示 2. ControlNet介绍 3. 图生图流程浅析 4. SDWebui图生图代码流程 5. 参考资料 一、效果展示 图生图的应用场景非常多,比较典型的应用场景有风格转化(真人与二次元)、线稿上色、换装和对图片进行扩图等,下面…

TCP/IP协议栈:模拟器实现基本的L2和L3功能

在C中实现的TCPI/IP网络堆栈模拟器。该模拟器实现基本的第2层(MAC地址,Arp)和第3层(路由,IP)功能。 TCP/IP协议栈是一个网络通信的基础架构,包含了多层次的协议和功能。在模拟实现基本的L2和L3…

神经网络2-卷积神经网络一文深度读懂

卷积神经网络(Convolutional Neural Network, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),主要用于图像识别、语音识别和自然语言处理等任务,是深度学习&#xff0…

使用决策树算法预测隐形眼镜类型

目录 谷歌笔记本(可选) 编写算法:决策树 准备数据:拆分数据集 测试算法:构造注解树 使用算法:预测隐形眼镜类型 谷歌笔记本(可选) from google.colab import drive drive.mount…

Springboot之压缩逻辑源码跟踪流程

背景 在项目开发过程中,前后端参数比较多,导致网络传输耗时比较多,因此想将数据压缩传输,以减少网络传输的耗时,从而减少接口的响应时间,可以自己实现,但是spring相关的框架已经内置了该功能&am…

堆排序、快速排序和归并排序

堆排序、快速排序和归并排序是所有排序中最重要的三个排序,也是难度最大的三个排序;所以本文单独拿这三个排序来讲解 目录 一、堆排序 1.建堆 2.堆排序 二、快速排序 1.思想解析 2.Hoare版找基准 3.挖坑法找基准 4.快速排序的优化 5.快速排序非…

Servlet使用Cookie和Session

一、会话技术 当用户访问web应用时,在许多情况下,web服务器必须能够跟踪用户的状态。比如许多用户在购物网站上购物,Web服务器为每个用户配置了虚拟的购物车。当某个用户请求将一件商品放入购物车时,web服务器必须根据发出请求的…

windows实现ip1:port1转发至ip2:port2教程

第一步:创建虚拟网卡(如果ip1为本机127.0.0.1跳过此步骤),虚拟网卡的IPV4属性设置ip1 1> 创建虚拟网卡参见 Windows系统如何添加虚拟网卡(环回网络适配器)_windows添加虚拟网卡-CSDN博客​​​​​​ 2> 设置虚拟网卡使用…

【Go的函数】

函数 函数的引入函数细节祥讲包的引入包的细节详讲init函数匿名函数闭包defer关键字系统函数字符串相关函数日期和时间相关函数内置函数 函数的引入 【1】为什么要使用函数: 提高代码的复用,减少代码的冗余,代码的维护性也提高了 【2】函数…

简单mock server模拟用户请求给小程序提供数据

整理小程序代码时发现一此小程序离开了mock-server基本上没有办法显示了,因此用node,express来满足给小程序提供演示数据的功能 const express require(express); const { createCanvas, Image } require(canvas); const fs require(fs); const path require(path);…

Python爬虫实战:图片爬取与保存

引言: 在本文中,我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,以及os和shutil库来下载和保存图片。通过这个教程,你将学会如何爬取网…

你要不要搞副业

最近看到了几个网友关于年轻人要不要搞副业的一点讨论,学习到了很多。整理分享如下: plantegg 你要不要搞副业? 最近网上看到很多讨论搞副业和远程工作的,我也说点自己的经验看法 当然这完全是出于个人认知肯定不是完全对的、也…

day4:对话框与事件

使用qt搭建一个简易的闹钟系统 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);this->setAttribute(Qt::…

《高效使用Redis》- 由面试题“Redis是否为单线程”引发的思考

由面试题“Redis是否为单线程”引发的思考 很多人都遇到过这么一道面试题:Redis是单线程还是多线程?这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程,说复杂是因为这个答案其实并不准确。 难道Redis不是单线程&#xff1f…

手把手教你Jenkins整合Jmeter实现自动化接口测试!

01、在机器上安装jmeter 下载:http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改jmeter.properties 中 jmeter.save.saveservice.output_format值为xml。 编写接口测试脚本: 脚…

在Win11上部署Stable Diffusion WebUI Forge

Stable Diffusion WebUI Forge 是 Stable Diffusion WebUI(基于 Gradio)之上的平台,可简化开发、优化资源管理并加快推理速度。“Forge”这个名字的灵感来自“Minecraft Forge”。这个项目旨在成为SD WebUI的Forge。 与原始 WebUI&#xff0…

掌握Pillow:Python图像处理的艺术

掌握Pillow:Python图像处理的艺术 引言Python与图像处理的概述Pillow库基础导入Pillow库基本概念图像的打开、保存和显示 图像操作基础图像的剪裁图像的旋转和缩放色彩转换和滤镜应用文字和图形的绘制 高级图像处理图像的合成与蒙版操作像素级操作与图像增强复杂图形…

2/23 work

1> 使用消息队列完成两个进程间相互 a: #include<myhead.h> #define MSGSIZE sizeof(struct msgbuf)-sizeof(long) struct msgbuf {long mtype;char mtext[1024];}; int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0){key_t key 0;if((keyfto…