一、点亮一个LED灯
1.仿真电路
2.汇编指令
汇编语言:
ORG 0x0000 ;
MOV P1, # 0xFF ;
END ;
代码解释:
ORG 0x0000:设置程序的起始地址为0x0000。在51单片机中,代码默认从0x0000地址开始执行。
MOV P1, # 0xFF:将0xFF这个数据存入P1端口,以点亮所有LED灯。
MOV:将一个数据从一个地方移动到另一个地方。
P1:51单片机上的一个I/O端口,用于控制LED灯。
0xFF:十六进制数,表示所有的LED灯都点亮。
二、LED流水灯
1.仿真电路
2.C语言代码
#include <reg51.h>
#include <intrins.h>
//???
void delay_ms(int a)
{
int i,j;
for(i=0;i<a;i++)
{
for(j=0;j<1000;j++) nop();
}
}
void main(void)
{
while(1)
{
P0=0xfe;
delay_ms(50);
P0=0xfd;
delay_ms(50);
P0=0xfb;
delay_ms(50);
P0=0xf7;
delay_ms(50);
P0=0xef;
delay_ms(50);
P0=0xdf;
delay_ms(50);
P0=0xbf;
delay_ms(50);
P0=0x7f;
delay_ms(50);
}
}
3.汇编代码
ORG 0000H
AJMP MAIN
MAIN:
MOV R0,#50H (给R0,R1赋初值,用于延时函数的循环次数
MOV R1,#0F0H
MOV P2,#0FEH (P2端口与LED灯相连,设置灯的初始状态为1111 1110,即D0亮
S1: (RL为累加器循环左移,故设置P2的状态,需要先将P2的给累加器A
MOV A,P2
RL A
MOV P2,A
LCALL DEL (调用延时子程序
AJMP S1
DEL:
MOV R0,#50H (重新赋值
DJNZ R0,$ (原地跳转,内层循环
DJNZ R1,DEL (外层循环
MOV R1,#0F0H (重新赋值
RET
END