单片机仿真指示灯数码管的中断控制


目标

在编程软件的配合下,要求实现如下功能:

  • 程序启动后,D处于熄灯、LED1处于黑屏状态;单击K1,可使D亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。

所需芯片

  1. AT89C51
  2. CAP
  3. CAP-ELEC
  4. CRYSTAL
  5. LED-RED
  6. RES
  7. BUTTON
  8. RESPACK-8

开始动手

流程图

流程图

仿真图

仿真图

源代码

汇编

    ORG     0000H
    LJMP    START
    ORG     0003H
    LJMP    INT_0
    ORG     0013H
    LJMP    INT_1

START:
    MOV     P2, 00000000B
    SETB    P0.4
    SETB    EA
    SETB    EX0
    SETB    EX1
    SETB    IT1
    SETB    IT0
    MOV     R1, #16
    MOV     R2, 00H
DLOOP:
    LJMP   DLOOP

INT_0:
    CLR     EA        ;关中断
    PUSH    PSW        ;保护现场
    PUSH    ACC
    SETB    EA        ;开中断
    CPL     P0.4    ;中断子程序段
    CLR     EA        ;关中断
    POP        ACC        ;恢复现场
    POP        PSW
    SETB    EA        ;开中断
    RETI            ;中断返回

INT_1:
    CLR     EA        ;关中断
    PUSH    PSW        ;保护现场
    PUSH    ACC
    SETB    EA        ;开中断
    CJNE    R2, #16, CONTINUE
    MOV     R2, #00H
CONTINUE:
    MOV     DPTR, #TABLE
    MOV     A, R2
    MOVC    A, @A + DPTR
    MOV     P2, A
    INC     R2
    CLR     EA        ;关中断
    POP        ACC        ;恢复现场
    POP        PSW
    SETB    EA        ;开中断
    RETI            ;中断返回

TABLE: 
    DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, 77H, 7CH, 58H, 5EH, 79H, 71H
END

C语言

#include <reg51.h>

unsigned char led_mod[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
                           0x7f, 0x6f, 0x77, 0x7c, 0x58, 0x5e, 0x79, 0x71};
unsigned char count = 0;
sbit P0_4 = P0 ^ 4;

void INT_0SRV() interrupt 0 { P0_4 = ~P0_4; }

void INT_1SRV() interrupt 2 {
  count++;
  if (count == 16)
    count = 1;
  P2 = led_mod[count];
}
void main(void) {
  P2 = 0x00;
  P0_4 = 0x01;
  EA = 1;
  EX0 = 1;
  EX1 = 1;
  IT1 = 1;
  IT0 = 1;
  while (1) {
        ;
    }
}

仿真结果

仿真结果

诗情画意

登飞来峰
王安石
飞来山上千寻塔,闻说鸡鸣见日升。
不畏浮云遮望眼,自缘身在最高层。


文章作者: incipe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 incipe !
评论
 上一篇
单片机仿真指示灯开关控制器 单片机仿真指示灯开关控制器
目标程序启动后, 8 只发光二极管先整体闪烁 3 次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行软件编程原理为: 8 只发
2020-05-14
下一篇 
如何用proteus仿真8086 如何用proteus仿真8086
岁月不饶人,我亦未曾饶过岁月。 1.需要的工具proteus 过低版本不可以仿真8086,请下载7.8版本及以上的 下载地址(附教程) 提取码:rh8j emu8086 官网地址 网盘地址 提取码:j5qn 2.编译汇编代码打开emu808
2020-05-14
  目录