用汇编程序实现3个数码管循环闪亮(显示为8),相当于3个LED流水灯,用89c51怎么写?

如题所述

网上的这种程序比较多,也不是很难,自己学学可以编的。

下面是1~8数字循环显示

;仿照例7.7

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

;CLR P2.5

;CLR P2.7

    MOV A,#03H            ;控制字

    MOV DPTR,#6100H;8155的命令状态口地址

    MOVX @DPTR,A

DISPLY:MOV R0,#8

       MOV R3,#0FEH

       MOV A,R3                       ;字位

   LD:MOV DPTR,#6102H;B口地址

       MOVX @DPTR,A          ;B口

       MOV DPTR,#DTAB

       MOV A,R0

       MOVC A,@A+DPTR    ;查表

       MOV DPTR,#6101H

       MOVX @DPTR,A        ;A口

       ACALL DELAY           ;延时

       MOV A,R3

       RL A

       MOV R3,A                  ; 下一位

       DJNZ R0,LD              ;下一位循环

       SJMP DISPLY            ;显示了一遍循环

       RET

DTAB:DB 6FH,7FH,07H,7DH,6DH

     DB 66H,4FH,5BH,06H,3FH                ;数字9~0

DELAY: MOV R7,#250

DELAY1: MOV R6,#250

DELAY2:MOV R5,#4

DELAY3: DJNZ R5,DELAY3

        DJNZ R6,DELAY2

        DJNZ R7,DELAY1

        RET                                                  ;延时大约2u*4*255*255=0.5s

        END

追问

还要用一个端口控制跑马灯的,要同步进行的

追答

;仿照例7.7
ORG 0000H
LJMP MAIN

ORG 0030H
MAIN:
MOV A,#03H ;控制字
MOV DPTR,#6100H
MOVX @DPTR,A

DISPLY:MOV R0,#3
MOV R3,#0FEH
MOV A,R3 ;字位

LD: MOV P1,A ;控制LED灯
MOV DPTR,#6102H
MOVX @DPTR,A ;B口

MOV DPTR,#DTAB
MOV A,#01H
MOVC A,@A+DPTR ;查表

MOV DPTR,#6101H
MOVX @DPTR,A ;A口

ACALL DELAY ;延时

MOV A,R3

RL A
MOV R3,A ; 下一位

DJNZ R0,LD ;下一位循环
SJMP DISPLY ;显示了一遍循环
RET
DTAB:DB 6FH,7FH,07H,7DH,6DH
DB 66H,4FH,5BH,06H,3FH ;数字9~0

DELAY: MOV R7,#250
DELAY1: MOV R6,#250
DELAY2:MOV R5,#4
DELAY3: DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET ;延时大约2u*4*255*255=0.5s
END

追问

谢谢啊,其实我已经做出来了

追答

不用客气,好好学习!

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-08
很简单

用汇编程序实现3个数码管循环闪亮(显示为8),相当于3个LED流水灯,用89c...
MOV R3,A ; 下一位 DJNZ R0,LD ;下一位循环 SJMP DISPLY ;显示了一遍循环 RET DTAB:DB 6FH,7FH,07H,7DH,6DH DB 66H,4FH,5BH,06H,3FH ;数字9~0 DELAY:MOV R7,#250 DELAY1:MOV R6,#250 DELAY2:MOV R5,#4 DELAY3: DJNZ R5,DELAY3 DJNZ R6,DELAY2 DJNZ R7,DELAY...

跪求单片机89C51控制交通灯的课程设计
AT89C52是一个低电压,高性能CMOS 8位单片机, 可以用来做单片机流水灯、跑马灯。。。等实验 电路原理图见下图1,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同理,接在P1...

单片机89C51用汇编制作跑马灯P1控制8个LED(D1~D8)灯实现流水灯的效果...
sbit LED2 = P0^2;sbit LED3 = P0^3;sbit LED4 = P0^4;sbit LED5 = P0^5;sbit LED6 = P0^6;sbit LED7 = P0^7;unsigned char Maikuan=0;static unsigned char ledon[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar Occupy_led; \/\/占空比越大,灯越亮 bit lig...

89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...

怎么使89c51单片机用键盘的左右键控制8个led灯左右流水?
单片机流水灯的程序,在百度知道里是最多的,随便搜索一下,就可以搜索到无数个答案,有仿真图和程序,再根据你的仿真图,稍做修改就成了。那两个左右按键,要用按纽BUTTON。如下图所示的接法。要写程序,财富值太少了,恐怕没有人写。

单片机编程,共5题,采用89C51系列
类似c语言编程,做一个循环累加。在keil的调试窗口中监测i的值。(这样的操作没有什么意义,用c,vb也可以做,不要用89c51了)2,如果你是有硬件的,当然要有8位数码管把数值显示出来。就要具备BCD码知识,8位共阴或共阳数码管知识,以及必要的电路知识(能点亮8为数码管)。等等,你要加油哦!

怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮...
else while(!P2_7); \/\/按下就循环,等待松开 } void main(void) \/\/主函数名 { while(1) { w(1); P1_0 = 0; w(0); P1_0 = 1;w(1); P1_1 = 0; w(0); P1_1 = 1;w(1); P1_2 = 0; w(0); P1_2 = 1;w(1); P1_3 = 0; w(0); P1_3 =...

8个LED循环点亮,延时程序
;实验目的:本程序主要实现一个简单的流水灯程序 ;即轮流点亮C口的8个灯(先点亮RC0,再熄灭RCO点亮RC1。。。);硬件要求:拨码开关S2全部置ON。include ;调用头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ;芯片配置字,...

为什么89C51单片机的P2口不能实现循环右移?
移位后再写到P2口,是写到P2的寄存器中。当有外部引脚被拉低了,那么读出P2的状态与原寄存器P2的状态是不同的,再移位就不是想要的结果了。如果没有猜错的话,你这是数码管显示仿真电路吧,或者是流水灯吧,用P2输出位码,就会出现不能循环右移的现象。解决办法,用一个变量,如ledbit,对变量移位...

如何用89C51单片机控制74HC138译码器点亮32位LED灯? 求详细原理图。高手...
用接口线最少。功能简单的,32灯都可亮,但在同时只能亮一个灯,想要另一个灯亮,就要关掉这个,只能演示一个灯跑动的流水灯。4. 需4片74HC138,5根选择线。以上1.2.3方案,只要程序速度够,可实现各种复杂变化,包括LED灰度控制。所有芯片都可74LS系列,但74HC系列容易驱动,也比较省电。

相似回答