如何用汇编语言点亮51单片机上的一位数码管,并让数码管重复计时呢?

数码管选用的是共阳极数码管(及给0就亮)电路如下

因为是共阳极数码管

比如我们要显示数值“0” ,那么在我们应该给ABCDEF 引脚置0 而G和DP(小数点)置1

即 在汇编语言上 这么写

MOV P2,#0C0H

MOV: 意思可以理解为赋值或者传送

P2:因为数码管连接在的是单片机P2的八个引脚下,所以这里填写P2

#0C0H:这个是一个十六进制的立即数,转化成二进制就是 1100 0000

连起来的意思就是:将1100 0000这串二进制信号 赋值给 P2的八个引脚,前两个1分别对应DP和G所连接的P2.7和P2.6引脚,后面六个0分别送到了连接着FEDCBA所连接的P2.5\P2.4\P2.3\P2.2\P2.1\P2.1\引脚

这样 通过单片机给数码管传送不同的二进制信号,就可以点亮我们想点亮的数值了。

(注:在汇编语言中十六进制的立即数有一个规则,当十六进制数是字母开头时要在前面加0,这也就是为什么时#0C0H 而不是 #C0H的原因了)

点亮完了 那如何实现计数的功能呢?

直接上源代码分析(超详细分析)

TAB:  DB   0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H    ;定义了一个数组
UP0:  MOV R7,#10            ;等下用来记录循环了次数,因为0-9有10个数,所以赋值为10MOV R2,#00H            ;用来存储偏移量MOV DPTR,#TAB       ;将数组的首地址用DPTR来记录UP: MOV   A,R2           ;将当前偏移量赋值给变量AMOVC  A,@A+DPTR     ;MOVC A,@A+DPTR是读取地址为A+DPTR存储单元的内容。MOV   P2,A         ;读取到的数组内容赋值给P2引脚LCALL  DELAY1000MS    ;LCALL的意思是调用,调用DELAY1000MSINC     R2           ;inc代表加一(偏移量加一)DJNZ   R7,UP        ;将R7减一,非0则跳转到UP,为0则执行下一句(可以执行10次)SJMP    UP0         ;SJMP是跳转的意思,跳转到UP0的位置DELAY1000MS:          ;这里往下是延时函数的部分,可以理解为执行完下面这这语句用时1秒PUSH 30HPUSH 31HPUSH 32HMOV 30H,#8MOV 31H,#1MOV 32H,#236
NEXT:DJNZ 32H,NEXTDJNZ 31H,NEXTDJNZ 30H,NEXTPOP 32HPOP 31HPOP 30HRET
END

每条语句基本都能理解,但是一连在一起就看不懂了?

大概意思就是,首先创建了一个数组,里面存有0-9 十个数码的共阳极段码,每个段码对应不同的二进制,可以点亮不同的数码管数值。然后在一个大循环里重复执行十次小循环,每次小循环都会显示不同的数码 ,然后延时,然后加1,在循环。最后大循环,将数码又继续从0开始。

效果图:

51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)相关推荐

  1. 设计一个以51单片机为控制器的2位的LED数码管“计时器”,实现倒计时功能。利用Keil软件编写程序,Proteus软件搭建系统仿真模型,

    设计一个以51单片机为控制器的2位的LED数码管"计时器",实现倒计时功能.利用Keil软件编写程序,Proteus软件搭建系统仿真模型,系统要求如下: 1.利用开关Switch1 ...

  2. 51单片机入门教程(3)——数码管显示

    51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...

  3. 51单片机之点亮一个灯

    51单片机之点亮#一个灯#流水灯#交通灯 接下来的学习将主要转为使用keil编程,并使用proteus进行仿真,推荐有条件的同学可以购买一个板子进行实物的练习    发光二极管常用来指示系统工作状态, ...

  4. 如何使用keil进行编译并且用proteus进行51单片机仿真实现0~F的数码管字符显示

    文章目录 一.目的: 二.在keil中进行程序编译 三.在proteus上画出电路图 四.将keil中编译的hex文件在proteus电路图中进行仿真运行 一.目的: 使用keil进行编译并且用pro ...

  5. 【Proteus仿真】51单片机+74HC164驱动两个四位数码管

    [Proteus仿真]51单片机+74HC164驱动两个四位数码管 Proteus仿真 程序代码 #include <STC89C5xRC.H>sbit DAT=P1^1; sbit CL ...

  6. 单片机c语言数码管显示子程序,单片机C语言之两位数码管动态显示

    <单片机C语言之两位数码管动态显示>由会员分享,可在线阅读,更多相关<单片机C语言之两位数码管动态显示(1页珍藏版)>请在人人文库网上搜索. 1.include #define ...

  7. [转]51单片机的地址总线是16位的,但是它却是8位机?

    位数指CPU处理的数据的宽度,参与运算的寄存器的数据长度. 如果总线宽度与CPU一次处理的数据宽度相同,则这个宽度就是所说的单片机位数. 如果总线宽度与CPU一次处理的数据宽度不同: (1)总线宽度小 ...

  8. 51单片机入门教程(3)——数码管显示学号

    目录 1.数码管简介 2.静态显示 3.动态显示 4.小结 相信经过了流水灯的实现,大家已经弄清楚了Keil和Proteus是如何联动使用的,并且对51单片机也有了一定的认识,在这一章里,我带大家利用 ...

  9. 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍: LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等. 通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点 ...

  10. 小白学习51单片机(第一天) 关于数码管

    1.静态数码管显示(单个数码管和四位一体数码管) ·公共端选中给电平 位选端逐个点亮 ·根据共阳共阴(箭头对的是阴极,一般51都是共阴)选择 ·在同个时刻 只有一个数码管可以被点亮 即使有多个被点亮也 ...

最新文章

  1. bat+sqlcmd 批量执行脚本
  2. python isdigit()
  3. php实现cc攻击防御和防止快速刷新页面示例
  4. 停用nfs导致cacti无法抓取snmp数据
  5. shell指令可以直接在终端输入吗_简化shell终端命令输入的脚本式快捷键工具
  6. oracle-group by -having
  7. 从草根到百万年薪程序员的十年风雨之路,吊打面试官系列!
  8. 【转】Dynamics 365中配置和使用文件夹级别的跟踪(folder-level tracking)
  9. 做好领导最喜欢的可视化报表,30岁依然能转行大数据分析师
  10. Json.net说法——(四)序列化错误处理
  11. 函数 tostring_QDate、QTime、QDateTime的相关函数说明
  12. 金蝶K3WISE V14.0注册方法
  13. Dubbo入门详细教程
  14. ami码编码算法c语言,AMI码编码规则是什么
  15. Mysql添加报错 MySqlException: Incorrect string value: ‘\xE5\xAF\xBC\xE5\x85\xA5...‘ for
  16. 想搞 AI,没导师指导、没 GPU ,怎么搞?好主意分享
  17. Arcgis中topolopy(摘自网络)
  18. ubuntu下定时清理文件
  19. LeetCode | 575. Distribute Candies
  20. Kafka(9)副本(leader、flower、isr说明)

热门文章

  1. Python学习[4]:urllib库-爬虫的第三步之代理IP
  2. MySQL高级篇——事务
  3. 3G爱立信告警信息提取
  4. Ribbon原理及使用详解
  5. 安卓智能地图开发与实施:三维地图 - ArcGIS Runtime SDK for Android
  6. 2022年12个开源物联网平台对比(2022年9月20日更新)
  7. 服务器端身份验证技术,身份认证技术和协议的常用方法
  8. 外汇EA之马丁格尔EA
  9. 浙江省公务员考试计算机专业,浙江省公务员(机关工作人员)考试计算机专业
  10. mysql千万测试表生成,随机id、username、age、sex、create_time