程序分支转移

根据STC89C52单片机片内30H单元内容(00或01或02或03)进行散转,1个数码管循环显示对于的数字。

汇编程序:

ORG         0000H       //汇编起始地址
NUMB        EQU     30H
FONT        EQU     31H
INT:        MOV NUMB,#00H;  需要显示数字送到NUMB单元
            MOV R2,#04H
START:      MOV A,NUMB
            MOV DPTR,#TABADDR
            RL  A
            JMP @A+DPTR
TABADDR:    SJMP   DISP0
            SJMP   DISP1
            SJMP   DISP2
            SJMP   DISP3
DISP0:      MOV    FONT,#0C0H
            LJMP   MJUP1
DISP1:      MOV    FONT,#0F9H
            LJMP   MJUP1
DISP2:      MOV    FONT,#0A4H
            LJMP   MJUP1
DISP3:      MOV    FONT,#0b0H

;数码管显示
MJUP1:      MOV    A,FONT
            MOV    P0,A;
            ACALL  DELAY
            INC    NUMB
            DJN2   R2,START
            AJMO   INT
DELAY:      MOV    R7,#0FFH
DL:         MOV    R6,#0FFH
DL6:        DJNZ   R6,DL6
            DJNZ   R7,DL
            RET
            END

C语言实现:

#include <reg52.h>
#include <intrins.h>
unsigned int numb;
unsigned char k,font;
void delay(unsigned int z)
{
    unsigned int i;
    for(i=0;i<z;i++);
}

void   Display()
{
    P0=font;
    delay(20000000);
}

void font_numb(numb)
{
    switch(numb)
{
    case 0:
{
    font=0xc0;
    Display();
}
break;
    case 1:
{
    font=0xf9;
    Display();
}
break;
    case 2:
{
    font=0xa4;
    Display();
}
break;
case 3:
{
    font=0xb0;
    Display();
}
break;
default:
break;
}
}
void main()
{
    while(1)
{    
    for(numb=0;numb<4;numb++)
{
    font_numb(numb);
}
}
}

附上一张仿真图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值