51单片机双向跑马灯程序

您所在的位置:网站首页 双向跑马灯程序图 51单片机双向跑马灯程序

51单片机双向跑马灯程序

2024-07-14 21:13| 来源: 网络整理| 查看: 265

本文目录一览:

1、用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。 2、51单片机跑马灯程序c 3、51单片机跑马灯程序 4、51单片机设计跑马灯的程序用(c语言)编写 用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。

答疑解难   跑马灯程序

                   ORG     0000H

                   LJMP     MAIN

                   ORG     0100H

MAIN:            JB          P0.7,MAIN  ;等待开始键按下

                   LCALL    YS             ;按键延时

                    JB         P0.7,MAIN

                    MOV     A,#7FH       ;是开始键按下  则跑马灯开始运行

LL:                 MOV     P1,A

                    LCALL    YS           ;显示延时

                    RR          A             ;循环右移一位

                    JB         P0.6, LL     ;没有按下停止键  则继续跑马

                    LCALL    YS            ;按键延时

                    JB          P0.6,LL         ;按下停止键 则停止跑马;否则继续跑马

                    MOV      A,#0FFH

                    MOV      P1,A

                    SJMP     MAIN            ;转到程序开始处,等待开始键的按下

YS:                MOV    R7,#150          ;延时子程序

YL:                MOV    R6,#200

YY:                NOP

                   DJNZ    R6,YY

                   DJNZ    R7,YL

                   RET

                   END

硬件接口电路如下:

      哈哈   还满意吗   就请给俺选择(满意选项)吧

51单片机跑马灯程序c

/***************************************** *用P1口接LED *****************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i8;i++) //8个流水灯逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp=1; } temp=0x80; for(i=0;i/8个流水灯反向逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp=1; } temp=0xFE; for(i=0;i8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(500); //调用延时函数 temp=1; } temp=0x7F; for(i=0;i/8个流水灯依次反向全部点亮 { P1=temp; delay(500); //调用延时函数 temp=1; } } } void delay(uint t) //定义延时函数 { register uint bt; //register为寄存器变量 即将无符号整形变量bt放在CPU的寄存器中而不是放在内存中 因为该 变量使用频率高 这样可以提高执行效率 for(;t;t--) for(bt=0;bt255;bt++); }

51单片机跑马灯程序

不好意思,延时用了楼上的。keil下编译OK。假设P1接灯。

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

;从左到右

LOOP1:

RLC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

;从右到左

MOV R0,#9

LOOP2:

RRC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP2

SJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END

这个程序比较简单了。再精简,只能精简一句,将MOV P1,A 放在DELAY函数里。这样减少一行。

简单介绍一下:

首先就是你要轮流点亮,就是将1循环一圈,因为你要全灭一次,所以用到CY。

RG 00H

SJMP START

ORG 30H

START:

MOV A ,#00 ;//清空A寄存器

SETB C     ;//将CY置1,然后带进位左移就会进入将A的b0

MAINLOOP: ;//大循环起始

MOV R0,#9 ;设置移位次数,要灭一次,所以设置为9

;从左到右

LOOP1:

RLC A     ;带进位左移一次;第一次移位结果为01

MOV P1, A ;将A中值放入P1点亮对应LED;该句可放在DELAY里,然后从右到左也去掉该句

ACALL DELAY ;延时,保持灯亮一段时间,自己根据实际情况调整一下。

DJNZ R0, LOOP1 ;循环,点亮下一个灯,最后一次,A为0,将全灭一次,CY为1

;从右到左

MOV R0,#9 ;设置循环次数

LOOP2:    ;循环起始表示

RRC A     ;带进位右移,第一次结果为80H

MOV P1, A ;更新P1点亮对应LED

ACALL DELAY ;延时,保持灯亮一段时间

DJNZ R0, LOOP2 ;循环,点亮下一个灯

SJMP MAINLOOP  ;循环,重新开始下一轮

如果你是管脚输出低LED才亮,只需将MOV A ,#00 和SETB C改为MOV A, #0FFH和CLR C即可。

方案2:位寻址区00做标志,为0从左到右,该标志为1从右到左

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

CLR 00H

LOOP1:

RLLED:

JB 00H, RRLED

RLC A

AJMP DISP

RRLED:

RRC A

DISP:

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

CPL 00H

AJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END

下面是方案1的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。

51单片机设计跑马灯的程序用(c语言)编写

|P1口接8个发光二极管共阳

#include AT89X51.H

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m0;m--)

for(n=20;n0;n--)

for(s=248;s0;s--);

}

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i8;i++)

{

a=tempi;

b=temp(8-i);

P1=a|b;

delay();

}

for(i=1;i8;i++)

{

a=tempi;

b=temp(8-i);

P1=a|b;

delay();

}

}

}

扩展资料:

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

参考资料来源:百度百科-51单片机

标签: 51单片机双向跑马灯程序


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3