Proteus仿真:用AT89C51单片机的外部引脚分别点亮1个LED灯和LED流水灯
1. 用AT89C51单片机的外部引脚点亮1个LED灯。采用汇编语言编程。
电路图:
代码:
ORG 0100H
SETB P2.0
SJMP $ ;无条件相对转移 $就是本句语言的指针地址
;SJMP $,就是硬件部分
END
运行结果:LED灯常亮。
2. 用AT89C51单片机的外部引脚点亮1组LED灯,实现流水灯效果。分别采用汇编语言编程和C语言编程。
汇编语言编程
电路图:
代码:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV A,#80H
LOOP:
MOV P2,A
LCALL DELAY
RR A
LJMP LOOP
DELAY:
MOV R2,#255
D1:MOV R3,#250
D2:DJNZ R3,D2 ;寄存器减1,不为0 则转移
DJNZ R2,D1
RET
END
运行效果:LED灯由D8至D1顺序,每次点亮1个灯,如此循环。
C语言编程
电路图:
代码:
//51单片机编程常用的头文件
#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);
}
}
运行效果:LED灯由D1至D8顺序,每次点亮1个灯,如此循环。