找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6712|回复: 0
收起左侧

通过单片机外部中断控制数码管动态显示4位数字 含汇编源码,原理图,和hex文件

[复制链接]
ID:275296 发表于 2018-1-12 17:53 | 显示全部楼层 |阅读模式
这是之前做的外部中断控制数码管动态显示数字的程序,
使用汇编代码,基于51单片机,
附件包含单片机汇编源码,
和Proteus仿真图,以及hex文件,
完全自己原创,望多
捕获.PNG

单片机汇编语言源程序:
  1. ORG 0000H                        ;开始
  2.         LJMP START                        ;跳转到主程序
  3.         ORG 0003H                        ;外部中断0
  4.                 LJMP PINT0                        ;跳转到0号中断服务子程序
  5.                 ORG 0013H                        ;外部中断1
  6.                         LJMP PINT1                        ;跳转到2号中断服务子程序
  7.                         ORG 0100H                        ;程序地址
  8.                                 START:        MOV SP, #60H                        ;设置堆栈
  9.                                 MOV P0,#0FFH                        ;P0初始化为FF
  10.                                 MOV P2,#00H                                ;P2口初始化为0
  11.                                 SETB IT0                        ;设置0号中断触发方式为下降沿触发
  12.                                 SETB IT1                        ;设置2号中断触发方式为下降沿触发
  13.                                 SETB EA                                ;合上中断总开关(允许中断)
  14.                                 SETB EX0                        ;合上分开关
  15.                                 SETB EX1                        ;合上分开关
  16.                                 MOV R1,#00H                        ;R1清零
  17.                                 MOV R2,#00H                        ;R2清零
  18.                                 MOV R3,#00H                        ;R3清零
  19.                                 MOV R4,#00H                        ;R4清零
  20.                                 MOV A,#11H                        ;A设初值        
  21.                                 LJMP MAIN                        ;初始化完成,进入主程序
  22.                                 
  23.                                 ORG 0200H                        ;主程序地址
  24.                                         MAIN:        MOV P2,A                        ;选择位选线
  25.                                         MOV 31H,R1                        ;千位存入31H单元
  26.                                         MOV 32H,R2                        ;百位存入32H单元
  27.                                         MOV 34H,R3                        ;十位存入34H单元
  28.                                         MOV 38H,R4                        ;个位存入38H单元
  29.                                         PUSH ACC                        ;保护现场
  30.                                         ANL A,#0FH                        ;保留A的第四位
  31.                                         ADD A,#30H                        ;使A与数位存放地址对应
  32.                                         MOV R0,A                ;数位存放地址存入R0
  33.                                         MOV A,@ R0                        ;取所需数位的数字
  34.                                         LCALL DISPLAY                        ;查表
  35.                                         MOV P0,A                        ;显示所需数字
  36.                                         LCALL DELAY                        ;延时
  37.                                         POP ACC                        ;恢复现场
  38.                                         RL A                        ;A左循环移位
  39.                                         SJMP MAIN                ;死循环
  40.                                        
  41.                                         ORG 0400H                        ;0号中断服务子程序地址
  42.                                                 PINT0:        CJNE R4,#9,L1                        ;个位不为9跳转
  43.                                                 CJNE R3,#9,L2                        ;十位不为9跳转
  44.                                                 CJNE R2,#9,L3                        ;百位不为9跳转
  45.                                                 CJNE R1,#9,L4                        ;千位不为9跳转
  46.                                                 MOV R1,#00H                        ;千位置零
  47.                                                 MOV R2,#00H                        ;百位置零
  48.                                                 MOV R3,#00H                        ;十位置零
  49.                                                 MOV R4,#00H                        ;个位置零
  50.                                                 RETI                        ;中断返回
  51.                                                 L1:INC R4                        ;个位加一
  52.                                                 RETI                        ;中断返回
  53.                                                 L2:INC R3                        ;十位加一
  54.                                                 MOV R4,#00H                        ;个位置零
  55.                                                 RETI                        ;中断返回
  56.                                                 L3:INC R2                        ;百位加一
  57.                                                 MOV R4,#00H                        ;个位置零
  58.                                                 MOV R3, #00H                        ;十位置零
  59.                                                 RETI                        ;中断返回
  60.                                                 L4:INC R1                        ;千位加一
  61.                                                 MOV R2,#00H                        ;百位置零
  62.                                                 MOV R3,#00H                        ;十位置零
  63.                                                 MOV R4,#00H                        ;个位置零
  64.                                                 RETI                        ;中断返回
  65.                                                 
  66.                                                 ORG 0600H                        ;2号中断服务子程序地址
  67.                                                         PINT1:        CJNE R4,#0,LA                        ;个位不为0跳转
  68.                                                         CJNE R3,#0,LB                        ;十位不为0跳转
  69.                                                         CJNE R2,#0,LC                        ;百位不为0跳转
  70.                                                         CJNE R1,#0,LD                        ;千位不为0跳转
  71.                                                         MOV R1,#9                        ;千位置9
  72.                                                         MOV R2,#9                        ;百位置9
  73.                                                         MOV R3,#9                        ;十位置9
  74.                                                         MOV R4,#9                        ;个位置9
  75.                                                         RETI                        ;中断返回
  76.                                                         LA:DEC R4                        ;个位减一
  77.                                                         RETI                        ;中断返回
  78.                                                         LB:DEC R3                        ;十位减一
  79.                                                         MOV R4,#9                        ;个位置9
  80.                                                         RETI                        ;中断返回
  81.                                                         LC:DEC R2                        ;百位减一
  82.                                                         MOV R4,#9                        ;个位置9
  83.                                                         MOV R3,#9                        ;十位置9
  84.                                                         RETI                        ;中断返回
  85.                                                         LD:DEC R1                        ;千位减一
  86.                                                         MOV R2,#9                        ;百位置9
  87.                                                         MOV R3,#9                        ;十位置9
  88.                                                         MOV R4,#9                        ;个位置9
  89.                                                         RETI                        ;中断返回
  90.                                 
  91.                                                         ORG 0800H                        ;延时子程序地址
  92.                                                                 DELAY:        MOV R7, #30                        ;设置外层循环次数
  93.                                                                 DEL1:        MOV R6,#40                        ;设置内层循环次数
  94.                                                                 DEL2:        DJNZ R6,DEL2                        ;内层循环
  95.                                                                 DJNZ R7,DEL1                        ;外层循环
  96.                                                                 RET                        ;返回
  97.                                                                
  98.                                                                 ORG 2600H                        ;查表子程序地址
  99.                                                                         DISPLAY:        ADD A, #01H                        ;查表位置调整
  100.                                                                         MOVC A, @A+PC                        ;查表
  101.                                                                         RET                        ;返回
  102.                                                                         
  103.                                                                         TAB: DB        0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H                        ;7段码常数表
  104.                                                                         END                                ;程序结束
复制代码

多指教全部资料51hei下载地址:
10-27-外部中断控制数码管动态显示4位数字.zip (10.14 KB, 下载次数: 55)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表