51汇编--数码管时钟

2024-05-24 17:04
文章标签 时钟 51 汇编 数码管

本文主要是介绍51汇编--数码管时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现一个24小时制的电子钟程序,在实验箱的6个数码管上显示时分秒(用定时器0中断更新计时时间,时间值以压缩BCD码形式保存在内部RAM的30H31H和32H单元)。
PC机可通过串行口发送要设置的时间给单片机(发送的时间格式为压缩BCD码),单片机接收到设置时间后从该时间继续计时(此为串口调时功能)。

代码

;数码管接到CS0,位选地址8001,段选地址8002
;R7:数码管位,R6:T0中断次数,R5R4:演示程序,R3:2位BCD转十进制暂存,R0:指针ORG 0000HLJMP MAINORG 000BH; T0_INTLJMP T0_INTORG 0023H;串口中断LJMP S_INTORG 0050H
MAIN:;初始化定时器MOV TMOD, #21HMOV TL0, #40536 MOD 256  ;T0定时50msMOV TH0, #40536 / 256MOV TL1, #232;设置波特率为2400MOV TH1, #232SETB EASETB ET0SETB ESSETB TR0SETB TR1MOV PCON, #80H;波特率倍增MOV SCON, #50HMOV R7, #01H;用于循环左移,选择某个数码管,从秒的个位开始MOV R6,#40;T0每中断20次,更新一次数码管时间MOV R0,#32H;指针 SJMP $T0_INT:MOV TL0, #40536 MOD 256  ;T0重装初值MOV TH0, #40536 / 256DJNZ R6,T0LOOP;没到1s,只刷新显示MOV R6,#40;重装计数值
T0LOOP1:MOV A,@R0LCALL TBCD2DCJNE R0,#30H,T0L1CJNE A,#23,JIASJMP T0L2T0L1:	CJNE A,#59,JIA
T0L2:    MOV @R0, #00H;59+1=0DEC R0;如果溢出,则判断前一个数CJNE R0,#2FH, T0LOOP1JIA:INC A;如果没溢出,就+1;然后再恢复成BCD码LCALL D2TBCDMOV @R0, AMOV R0, #32H;恢复R0的数值,准备刷新数码管
T0LOOP:MOV A,@R0LCALL SHOWMOV A,@R0SWAP ALCALL SHOWDEC R0CJNE R0, #2FH,T0LOOP;刷新显示MOV R7, #01HMOV R0,#32HRETIS_INT:;串口中断服务程序JNB RI,$CLR RIMOV A, SBUFLCALL TBCD2DPUSH ACCCLR CCJNE R0,#30H,s1SUBB A,#24SJMP s2
s1: SUBB A,#60
s2:	POP ACCJC storeCLR A
store:LCALL D2TBCDMOV @R0,ADEC R0CJNE R0, #2FH,S_INTMOV R0,#32HRETISHOW:;把A的底4位当作BCD码,送入数码管显示,每调用一次,位选左移一次PUSH ACCMOV A,R7MOV DPTR,#8001HMOVX @DPTR,ARL AMOV R7,APOP ACCANL A,#0FHMOV DPTR,#TABMOVC A,@A+DPTR;获取字形码MOV DPTR,#8002HMOVX @DPTR,A;写入字形码LCALL DELAYCLR AMOVX @DPTR,A;写入字形码RETTBCD2D:;把A的内容当作两位BCD数据,转换成对应十进制数,并放回APUSH ACC;保护ACC,等下还要用ANL A,#0FH;MOV R3, APOP ACCSWAP AANL A, #0FHMOV B, #10MUL ABADD A,R3;高4位*10+低4位RETD2TBCD:;把A的内容当作十进制数,转换成对应两位BCD数据,并放回AMOV B, #10DIV AB;十位在A,个位在BSWAP AORL A, B;数据合并RETDELAY:;10ms则X=23,Y=204MOV R5,#20
D1:	MOV R4,#20DJNZ R4,$DJNZ R5,D1RET	
;	   0   1    2   3   4   5   6   7   8   9
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND    

这篇关于51汇编--数码管时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999005

相关文章

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

GDB 查看汇编

查看汇编 x disassemble

油表加速器时钟屏保 就是这么酷酷的

太酷了!这个时钟屏保太有个性了!油表加速器时钟屏保,模拟汽车加速表盘,非常有质感,用它做屏保,简直就是酷毙了~!今天小编给大家分享一个非常实用好看的时钟屏保(芝麻时钟),官网地址(https://clock.zhimasoft.cn/?bili) 芝麻时钟-油表加速器时钟屏保 我们一起来看下,油表加速器表盘时钟屏保是怎么设置的? 1、打开芝麻时钟软件,找到"时钟屏保"菜单,点击后打开;(