如何在实现led流水灯时用单片机精确控制流水灯切换时间

如何在实现led流水灯时用单片机精确控制流水灯切换时间,第1张

1、首先新建一个工程(新项目)。

2、其次查看原理图确定需求(流水灯)对应LED引脚在单片机上的哪个引脚。

3、然后编写程序(通过查看原理图可以看到需要控制整个P2口以控制8个LED灯)。

4、最后编译程序,下载程序至开发板,查看效果(调试)即可。

流程中的问题!!

#include<reg52h>

#define uchar unsigned char

sbit led=P1^0;

sbit key=P0^0;

void delay(uchar x)

{

uchar a,b;

for(a=x;a>0;a--)

for(b=110;b>0;b--);

}

void main()

{

while(1)

{

if(key==0) //例如:现在按钮被按下

{

delay(5);

if(key==0) //延时消抖后按钮被按下状态,

{

while(key==0); //此行删除,进行下行指令

led=~led; //led灯翻转

}

}

}

}

程序思想如下 可以想象成一个整数000每次加1后显示一次知道999后溢出跳回起点继续,程序如下

ORG 0000H

AJMP START

START: MOV 30H,#00H ;数码管显示初值

MOV 31H,#00H

MOV 40H,#00H ;显示增量

MOV 41H,#01H

STL1: ACALL LED ;LED显示

ACALL DELAY05S

ACALL BCDADD

MOV A,30H

ANL A,#0F0H

JNZ START ;判断是不是超过999

AJMP STL1

BCDADD: CLR C

MOV A,31H

ADDC A,41H

DA A

MOV 31H,A

MOV A,30H

ADDC A,40H

DA A

MOV 30H,A

RET

LED: MOV A,30H

ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

MOV A,31H

ANL A,#0F0H

SWAP A

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P1,A

MOV A,31H

ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P2,A

RET

DELAY05S: MOV R6,#200

SL1: MOV R5,#250

SL2: NOP

DJNZ R5,SL2

DJNZ R6,SL1

RET

TAB: DB 0C0H ;0

DB 0F9H ;1

DB 0A4H ;2

DB 0B0H ;3

DB 099H ;4

DB 092H ;5

DB 082H ;6

DB 0F8H ;7

DB 080H ;8

DB 090H ;9

DB 088H ;A

DB 083H ;B

DB 0C6H ;C

DB 0A1H ;D

DB 086H ;E

DB 08EH ;F

END

PS1:延迟05秒的晶振是357MHZ

PS2:希望我的LED显示代码没写错,我是认为你是0-7接的A-DP

PS3:百度的显示格式真恶心 将就着看吧 程序倒是应该没有什么错误

P4:程序已经修改 重新拷贝一下吧

第一:--d 减号在前表示先自减,后赋值。把d的值减一后与0比较,不为0执行循环体。

第二:不会,一般来说字符型(1字节)比整型(2字节)占用空间少一个字节。用作延时函数没什么区别,但要注意如果反过来的话,数据大于255会出错。

常识:延时函数往往循环次数比较多,建议用整型变量。

第三:0x01;不管什么类型(整型,字符型),在存储器中都是二进制形式存储的。也就是a=1了。

第四:不太明白你问的意思。0x是前缀表示16进制。也可以a=0;这里就是十进制了。

完全可以,不过while(d--)是先判断d是否等于0,然后d减一。也就是d相同情况下(当然要大于0),while(d--)比while(--d)多循环一次。

题意没说的太清楚,随便写一个吧。

#include<reg51h>

sbit led=P1^0;

main()

{

unsigned char dat;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0x50;

while(1)

    {

    if(RI)

        {

        RI=0;

        dat=SBUF;

        if(dat==0x5a)led=0;

        if(dat==0xa5)led=1;

        }

    }

}

以上就是关于如何在实现led流水灯时用单片机精确控制流水灯切换时间全部的内容,包括:如何在实现led流水灯时用单片机精确控制流水灯切换时间、按键控制led灯的程序、51单片机控制LED汇编显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10124154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存