焊接资讯

您现在的位置是:首页 > led灯 > 正文

led灯

单片机八个led灯依次点亮后全灭汇编(单片机点亮八个led灯程序)

工品易达2023-05-13led灯13

要求用51单片机控制8个LED亮灭的原理图+程序+解说?

本来以为这个程序很简单的,没想到写了快虚蔽三个小时。哎学艺不精啊。贴出来给你研究吧。我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,

1、依次亮,依次灭凳槐:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭

2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候

3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态

程序中使用了P1口与8个发光二极管相枣誉友连,具体电路图你百度一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。

程序如下:

#include reg52.h

#include intrins.h

/*变量声明:

i、j、k都是记录计时器溢出次数的变量,

stat是记录当前显示状态的变量,由按键key控制

temp是状态2中保护P1口状态的变量*/

unsigned char i=0,j=0,k=0,stat=0,temp;

bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯

sbit key=P3^7; //按键控制

void init(); //初始化函数

void delay(unsigned int N); //延时函数

void keyscan(); //键盘扫描函数

void main()

{

init();

while (1)

{

switch (stat)

{

case 0: //0方案

if(i==20flag)

{

i=0;

P1=P11; //依次亮灯

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11; //依次灭灯

temp=P1;

P1=temp+1;

}

}

break;

case 1: //2方案

if(i==20)

{

i=0;

P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯

}

break;

case 2: //3方案

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1; //保护P1口亮灯状态

k=0;

j=0;

}

//闪烁部分,应该可以优化

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

//-----------------------------------

break;

}

keyscan();

}

}

void init()

{

TH0=0x3c; //定时器赋初值定时时间50ms

TL0=0xB0;

TMOD=0x01; //设置定时器工作方式为方式1

EA=1; //开总中断

ET0=1; //开中断允许位

TR0=1; //定时器计数

P1=0xfe; //这里假设led灯与P1口相连并且

//低电平有效

}

void delay(unsigned int N)

{

int i,j;

for (i=0;iN;i++);

for (j=0;j110;j++);

}

void keyscan()

{

if(!key)

{

delay(10); //消抖

if(!key); //确认有键按下

stat++;

if(stat==3)

{

stat=0;

}

//右键按下复位

i=0;

j=0;

k=0;

TH0=0x3c;

TL0=0xB0;

switch (stat)

{

case 0:

P1=0xfe;

flag=1;

stat=0;

break;

case 1:

P1=0x55;

break;

case 2:

P1=0xfe;

temp=P1;

break;

}

//-----------------------------------

while(!key) //此循环中的函数和主函数中的显示函数是同一个

//用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常

{

switch (stat)

{

case 0:

if(i==20flag)

{

i=0;

P1=P11;

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11;

temp=P1;

P1=temp+1;

}

}

break;

case 1:

if(i==20)

{

i=0;

P1=~P1;

}

break;

case 2:

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1;

k=0;

j=0;

}

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

break;

}

}

}

}

void timer0() interrupt 1

{

TH0=0x3c;

TL0=0xB0; //溢出后重新赋初值

//定时器中断时间为50ms

i++; //20次中断时间为1s

j++; //40次中断时间为2s

k++; //60次中断时间为3s

}

有什么不懂的可以百度Hi我

怎么用汇编语言编写八个灯依次点亮后不能熄灭,然后按倒顺序依次熄灭

假设春颤P1口接8个LED灯,辩晌灯控携森锋制部分程序如下:

LEDCTL:

MOV P1,#0FEH ;点亮第一个灯

LCALL DELAY

MOV R0,#7

LEDLP1:

CLR C

MOV A,P1

RLC A

MOV P1,A

LCALL DELAY

DJNZ R0,LEDLP1

MOV R0,#8

LEDLP2:

SETB C

MOV A,P1

RRC A

MOV P1,A

LCALL DELAY

DJNZ R0,LEDLP2

LJMP LEDCTL

DELAY:

MOV R1,#100

DELAY1:

MOV R2,#200

DJNZ R2,$

DJNZ R1,DELAY1

RET

控制8个LED灯,完成从左到右依次点亮,然后从右到左依次熄灭,魂环10次后完成全部闪烁。C语言代码

#includereg51.h

#define uchar unsigned char

void delay(uchar a)

{

uchar i;

while(a--)for(i=0;i120;i++);

}

main()

{

uchar i,j,led;

for(i=0;i10;i++)

    {

    led=0xfe;

    for(j=0;i8;i++)

        {

     饥清   P0=led;

        led=led纳肢销1;

        delay(200);

        }

    led=0x80;

    for(j=0;i8;i++)

        {

        P0=led;

        led=(led1)|0x80;

        delay(200);

      洞游  }    

    }

    P0=0xff;

    while(1);

}

c语言和汇编的程序八个LED依次左移逐个点亮,点亮后在依次右移逐个点亮不断循环

C语言

#includereg51.h

void delay(unsigned int a)

{

unsigned i,j;

for(i=0;ia;i++)

for(j=0;j1000;j++);

}

main()

{

unsigned LED,i;

LED = 0xfe;

EA = 0;

while(1)

{

for(i=0;i7;i++){delay(100);LED = (LED1)|0x01;P3 = 正滑纳LED;}

for(i=0;i7;i++){delay(100);LED = (LED让槐1)|0x80;P3 = LED;}

}

}

汇编语言

LED EQU 30H

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

CLR EA

MOV SP,#5FH

MOV LED,#0FEH

MOV R0,#7

LOOP:

MOV R7,#50

LCALL DELAY

MOV A,LED

RL A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP

MOV R0,#7

LOOP1:

MOV R7,#50

LCALL DELAY

MOV 举没A,LED

RR A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP1

MOV R0,#7

SJMP LOOP

;----------------------------

DELAY:

MOV R2,#8

DLY1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,DLY1

DJNZ R7,DELAY

RET

;-----------------------------

END

8路流水灯汇编语言程序的写法

汇编语言程序如下:

;假设1:D1~D8八个彩灯接在P1口,输出低电平发光

;假设2:系统晶振为12MHz

;假设3:N = 5

;程序如下:

ORG 0000H

MOV R3, #5           ;N=5

LOOP0:

MOV A,   #0FFH     

MOV P1, #0FFH        ;开始时全灭

;-------------------------------逐个点亮

MOV R2, #8

LOOP1: CLR C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP1

;-------------------------------逐个熄灭

MOV R2, #8

LOOP2: SETB C

RLC A

MOV P1, A

CALL DL500MS

DJNZ R2, LOOP2

;-------------------------------全亮、全灭交替

MOV R2, #4

LOOP3: MOV P1, #0           ;全亮

CALL DL500MS

CALL DL500MS           ;共1s

MOV P1, #255         ;全灭

CALL DL500MS           ;0.5s

DJNZ R2, LOOP3

;-------------------------------

DJNZ R3, LOOP0

MOV P1, #01001001B   ;5、显示为0100 1001

CALL DL500MS

CALL DL500MS           ;共1s

SJMP 0000H             ;重新开始N遍

;-------------------------------延时子程序

DL500MS:

MOV R5, #9      ;1T

DL1:   MOV R6, #128    ;1T

DL2:   MOV R7, #215    ;1T

NOP              ;1T

DL3:   DJNZ R7, DL3     ;2T   2 * 215 = 430 T

DJNZ R6, DL2     ;2T   [1+1+430+2] * 128 = 55552 T

DJNZ R5, DL1     ;2T   [1+55552+2] * 9 = 499995 T

RET         氏亩咐     ;2T   1 + 499995 + 2 = 499998 T

;-------------------------------------

END

扩展资料:

实现8路流水灯的原理:

下图为主控芯片和流水灯模块的原理图。

流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。

要实现流水灯功能,耐拍只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:歼纯

P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高。

P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。   

关于单片机八个led灯依次点亮后全灭汇编和单片机点亮八个led灯程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~