这个很简单,可以一个一个点亮然后延时就可以了,还可以用for循环移位也是可以的。方法很多,资料也很多。加油吧
2. 51单片机用汇编语言实现八个LED的全亮全灭
;以89c51单片机为例,假定用P1控制LED:
IO_LED EQU P1;
led_0 BIT P1.0;
led_1 BIT P1.1;
led_2 BIT P1.2;
led_3 BIT P1.3;
led_4 BIT P1.4;
led_5 BIT P1.5;
led_6 BIT P1.6;
led_7 BIT P1.7;
;定义开关LED的数据,假定LED正极一端接电源,另一端通过限流电阻接I/O端口:
DATA_CloseLED EQU 11111111B;
DATA_OpenLED EQU 00000000B;
ORG 0000H
AJMP MAIN
ORG 0030H
;-----------------------
;延时0.5秒程序(注:此延时函数摘自STC-ISP)
DELAY500MS: ;@12.000MHz
PUSH 30H
PUSH 31H
PUSH 32H
MOV 30H,#4
MOV 31H,#205
MOV 32H,#180
NEXT:
DJNZ 32H,NEXT
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 32H
POP 31H
POP 30H
RET
;-----------------------
;下面是主程序
MAIN:
MOV IO_LED,#DATA_CloseLED;同时关闭8个LED
LCALL DELAY500MS;延时0.5秒
MOV IO_LED,#DATA_OpenLED;同时打开8个LED
LCALL DELAY500MS;延时0.5秒
LJMP MAIN;循环
END;
上面程序演示了8个LED间隔0.5秒同时亮和灭的变化。
3. 51单片机3个LED灯同时来亮灭闪烁
如果只是人眼睛开到的同时亮灭,是没问题的,用3条连续赋值语句。
如果要做到绝对的同时控制,是不可能的,因为有一个在另一组端口,IO寄存器不同,至少要2条赋值语句。就会有时间差,也就是赋值语句之间的时间差。
4. 单片机流水灯全亮,我亦有同样问题在看见最佳回答后仍不知如何解决,附网上搜索的最佳回答于问题补充中
单片机默认复位后或者上电后的所有引脚输出都为高电平,这是为了方便读取数据。所以,你的单片机在上电之后就是全亮,因为你的LED灯是正极接在了单片机的输出口上了,LED的负级接的地。这样芯片上电后,灯就全亮了。有可能你的芯片没有设置上电复位电路,就是说程序并没有在芯片上电之后就运行。所以就停在灯全亮这里了。单片机有上复位引脚,有的是上电后高电平脉冲复位,有的是低电平脉冲复,你用的时候要看一下对应型号的芯片手册上是怎么表示的。复位引脚的引脚名上有一个横线说明是低电平复位,没有横线说明是高电平复位。电上复位就是加一个电容和阻组成,上电时的这个高电平或者低电平的脉冲时间的要求(一般是12个机器周期),让芯片复位。这个时候单片机才完成开始硬件时钟和寄存器初始化同步,接下来才能正常运行程序。
还有一种情况就是你用的是P0口,没有接上拉电阻,P0口只有低电平没有高电平。
5. 涓轰粈涔堟垜 镄勫崟鐗囨満鎺ヤ笂鐢垫簮涓庣嚎LED𨱔鍏ㄤ寒浜嗭纻
鍗旷墖链虹殑IO鍙i粯璁よ緭鍑虹殑楂樼数骞筹纴濡傛灉LED镄勮礋鏋佹帴鏄鐢垫簮璐熸瀬锛屾f瀬鎺ョ殑鏄鍗旷墖链哄氨浼氱偣浜銆