焊接资讯

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

led灯

包含4个led灯循环点亮stm32程序实验报告的词条

工品易达2022-11-09led灯26

STM32 的GPIO流水灯,程序下进去后,4个LED先全部都亮,然后才逐个点亮;我不太明白,怎么开始会全部都亮

(仅供参考)由于你设置推挽输出,也就是说没有上下拉(8中模式里输入有上下拉),在《数据手册》里的解释推挽输出初始化时,输出0或1,其实是0,这样的话,你的开始红灯都全部亮下,就不难理解了。所以你若想在开始的时候不想让他都亮(按照你的思路走),你可以对你的几个引脚进行拉高,即对ODR或者BSRR进行操作即可。

GPIO_SetBits(GPIOE, GPIO_Pin_1);//Init函数把几个脚都添加进去即可

单片机汇编语言流水灯程序延时0.5秒 一共四个灯循环

4只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

;用最直接的方式实现流水灯

ORG 0000H

START:MOV P1,#01111111B ;最下面的LED点亮

LCALL DELAY ;延时60秒

LCALL DELAY ;延时60秒

MOV P1,#10111111B ;最下面第二个的LED点亮

LCALL DELAY ;延时60秒

LCALL DELAY ;延时60秒

MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)

LCALL DELAY

LCALL DELAY ;延时60秒

MOV P1,#11101111B

LCALL DELAY

LCALL DELAY ;延时60秒

MOV P1,#11110111B

LCALL DELAY

LCALL DELAY ;延时60秒

MOV P1,#11111011B

LCALL DELAY ;延时60秒

LCALL DELAY ;延时60秒

LCALL DELAY ;延时60秒

LCALL DELAY ;延时60秒

LCALL DELAY ;完成第一次循环点亮,延时约0.25秒

AJMP START ;反复循环

;延时子程序,12M晶振延时约250毫秒

DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms

PUSH PSW ;现场保护指令(有时可以不加)

MOV R4,#240

L3: MOV R2 ,#00H

L1: MOV R3 ,#00H

L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)

DJNZ R2 ,L1 ; 中层循环:256次

DJNZ R4 ,L3 ;外层循环:240次

POP PSW

RET

END

单片机如何一个按钮实现控制4个led灯的循环闪烁

0 0

1 1

1 0

0 1

是这样的四种状态吗? 这样很简单的,, 主要还是检测按键, 按键按下 你把一个变量+1, 比如

if(Key == 0)

{

delay(); //延时10ms,延时函数 自己写吧

if(Key == 0)

{

num++;

if(num = 4)

num = 0;

while(!Key);

}

}

然后根据num 的值 对Led进行状态刷新就好了。

switch(num)

{

case 0: Led1 = 1; Led2 = 0; break;

case 1: Led1 = 0; Led2 = 1; break;

case 2: Led1 = 0; Led2 = 0; break;

case 3: Led1 = 1; Led2 = 1; break;

default : break;

}

就可以了,,,顺序的话 可以按照具体要求更换下位置就可以了。

急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详细内容看补充。

/*对于个单片机的初学者,我希望用最直观的方式来达到你要的要求,程序每一句我已经写好备注,希望对你有帮助*/

#includereg51.h //使用51功能头文件

sbit L1=P0^0; //L1对应P0.0,表示第一盏灯

sbit L2=P0^1; //L1对应P0.1,表示第二盏灯

sbit L3=P0^2; //L1对应P0.2,表示第三盏灯

sbit L4=P0^3; //L1对应P0.3,表示第四盏灯

void delay(unsigned int i) //延迟子程序,注意这里的unsigned int i,这里相当于限定了调用时候变量的类型

{

unsigned char j; //局部变量定义

while(i--) //循环i次,主程序main调用时候,i为100,这数值你可随便该,但小于65355

for(j = 200; j 0; j--) ; //这步的意思是空操作200次,也就是暂用CPU200次的工作时间

}

void main(void) //主函数,这里的viod是无类型,意思是没有给这函数指定数据类型

{

P0=0x00; //将P0口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择

L1=1; //第一盏灯亮

delay(100); //调用延时子程序

L2=1; //第二盏灯亮

delay(100); //调用延时子程序

L3=1; //第三盏灯亮

delay(100); //调用延时子程序

L4=1; //第四盏灯亮

delay(100); //调用延时子程序

while(1); //这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉

}

纯手工书写,并仿真调试过,记得加分哟~

关于4个led灯循环点亮stm32程序实验报告和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016

发表评论

评论列表

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