永发信息网

求一个51单片机汇编程序,让四个数码管动态显示1 2 3 4,不是静态轮流显示,简单点有代表性,注释好,谢谢

答案:3  悬赏:30  手机版
解决时间 2021-03-01 11:26
  • 提问者网友:骑士
  • 2021-02-28 20:06
求一个51单片机汇编程序,让四个数码管动态显示1 2 3 4,不是静态轮流显示,简单点有代表性,注释好,谢谢
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-02-28 20:34

                       
                         ORG    0000H
                         LJMP    0100H
MAIN:                MOV    60H,#1        ;给显示缓冲区送显示的初值
                         MOV    61H,#2
                         MOV    62H,#3
                         MOV    63H,#4
 LY:                  LCALL     DISP      ;调用显示子程序
                         MOV        R3,#15;   延时
LK:                    LCALL    YS1MS
                         DJNZ        R3,LK       
                         MOV       64H,60H
                         MOV       60H,61H
                         MOV       61H,62H
                         MOV       62H,63H
                         MOV       63H,60H     
                         SJMP      LY
DISP:                MOV    R0,#60H          ;指针指向显示缓冲区
                         MOV    R7,#4          ;设循环显示的次数  显示4位数据
                         CLR     C
                         MOV    R6,#00000001B   ;从p2.0开始显示  即先显示1
LL:                    MOV    DPTR,#TAB         ;数据指针指向显示编码表达首地址
                         MOV    A,@R0
                         MOVC  A  ,  @ A+ DPTR ;取显示编码
                         MOV     P0,A                     ;送P0口显示
                         MOV     A,R6
                         MOV     P2,A                    ;控制显示位
                         RLC      A                      ;修改显示位
                         MOV     R6,A
                         INC       R0                     ;指向下一个要显示的数据
                         LCALL    YS1MS            ;延时显示时间
                         DJNZ      R7,LL              ;4位数据没显示完 则转LL继续显示
                         RET
TAB:                 DB        0C0H,0F9H,0A4H,0B0H,99H    ;显示编码
                         DB        92H,82H,0F8H,80H,98H
 
 
YS1MS:            MOV    R5,#45            ;延时子程序
YSLL:               MOV    R4,#200
 YYLL:              DJNZ    R4,YYLL
                         DJNZ   R5,YSLL
                         RET

                      你是想要显示的数据是动态变化的吧                       
                      试好了   给加分啊  呵呵 
全部回答
  • 1楼网友:空山清雨
  • 2021-02-28 22:18
#include
#define uchar unsigned char
#define uint unsigned int
int counter=0;
sbit w0=P2^7;
sbit w1=P2^6;
sbit w2=P2^5;
sbit w3=P2^4;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay_nms(uint z) //延时子
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void DisplayShumaguan(uchar* shuzi)
{
w0=1;
w1=0;
w2=0;
w3=0;
P0=table[*shuzi];
delay_nms(40);

w0=0;
w1=1;
w2=0;
w3=0;
P0=table[*(shuzi+1)];
delay_nms(40);
w0=0;
w1=0;
w2=1;
w3=0;
P0=table[*(shuzi+2)];
delay_nms(40);
w0=0;
w1=0;
w2=0;
w3=1;
P0=table[*(shuzi+3)];
delay_nms(40);
}
void main()
{
uchar ii[4]={1,2,3,4};
while(1)
{
DisplayShumaguan(ii);
}
}
  • 2楼网友:平生事
  • 2021-02-28 20:47
为啥不用C51语言编呢?追问那可以请你给我一个c51的程序吗,谢咯
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯