闪烁LED灯
51单片机是较为简单的8位单片机,意思是一次能处理8位2进制数据。这一次闪烁LED灯就是让单片机的引脚定时输出1或0。
51单片机有4个IO端口,每一个端口分别由P0,P1,P2,P3,4个寄存器控制。我们假设输出0时LED灯点亮,我们用单片机驱动时就需要让端口的某一位置零。例如我们用P1口的第0位闪烁点亮,我们需要给P1口的第0位定时置零。
汇编语言代码如下:
ORG 0000H
AJMP MAIN
MAIN: MOV P1, #11111110B //从P1口第0位输出到发光二极管
LCALL DELAY //延时1秒
CPL P1.0 //取反P1.0,实习闪烁效果
LCALL DELAY //延时1秒
SJMP MAIN //循环主函数
//延时函数
DELAY: MOV R0,#20 //延时0.5秒子程序,使用参数R0、R7、R6。
DELY0: MOV R7,#200 //延时约为20*200*250=1000000us=1s
DELY1: MOV R6,#250
DJNZ R6,$
DJNZ R7,DELY1
DJNZ R0,DELY0
RET
END
C语言代码如下:
#include "reg52.h"
typedef unsigned long int u16; //对数据类型进行声明定义
sbit LED = P1^0; //将P1口第0定义为led 后面就可以使用led代替
/* 延时函数,i=1时,大约延时20us*/
void delay(u16 i)
{
while(i--);
}
void main()
{
LED=0;
while(1)
{
LED = ~LED; //取反LED实习闪烁
delay(50000); //大约延时50000*20=1000000ms=1s
}
}
KEIL逻辑分析仪仿真
![5278a1f8421d43b8739bb5c9c8b4a714.png](https://i-blog.csdnimg.cn/blog_migrate/ae3c39f0b0fd0dd4ea46c0fcea0b81db.png)
欢迎留言讨论!