写在前面:使用的是普中科技ARM3.0的开发板,以及配套的资料。
一、目标分析
我们的目标是点亮开发板上的LED灯。
二、原理图分析
我们知道一颗LED我们给正极一个高电平,负极给一个低电平,这颗LED就可以亮。
我们通过看原理图,可以发现LED灯,的正极直接接到了高电平。那么我们只需要给J19这个接口一个低电平这些LED就可以被点亮。
三、单片机的接线
首先注意下面这张图上的跳线帽的接线,不然下载程序会出问题。
找一根杜邦线将P0.0端,和D1端这两个连接起来,然后我们只需要给P0.0端一个低电平那么这颗LED就可以被点亮。
四、使用KEIL软件创建工程
注意保存完文件后,一定要先添加到工程里面然后在进行编译。
由于51单片机的端口可以支持,按8位直接进行操作,因此我们只需要进行如上的赋值即可,由于我们只连接了一根线,因此只有一颗LED是亮的。想要其他的都亮,接上线就可以了。
五、让LED闪烁起来
想让LED闪烁,他就不能一直亮着,需要亮一会,灭一会。但是单片机一旦运行起来他就得一直执行指令,因此我们可以让单片在这期间执行一些,没有意义的指令,这样就好像单片机,暂停了一会。我们直接使用《单片机小精灵》来做。你也可以手写延时函数,结果都是一样的,只不过我们使用这个工具可以延时的稍微准确一点。
#include <reg52.h>
#include <intrins.h> //一定要包含这个头文件
void delay1s(void) //误差 0us
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main(void)
{
P0 = 0; //让LED亮
delay1s(); //然后延时1秒
P0 = 0xff; //再让LED灭
delay1s(); //然后延时1秒
}
六、实现流水灯
流水灯无非就是,第1颗LED亮,延时一段时间然后灭,然后再让第2颗亮,延时一段时间,依次类推,就可以达到流水灯的目的。至于接线,将你的LED全部接到P0端口就可以了。像其他的一些比如跑马灯等,不过是按照一定的顺序点亮即可。与这个程序类似,只需要稍加改动即可。
#include <reg52.h>
#include <intrins.h>
void delay1s(void) //误差 0us
{
unsigned char a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void main(void)
{
unsigned char i = 0; //我们只用到了8位数,因此我们使用无符号的char类型
for (i=0; i<8; i++)
{
P0 = ~(0x80 >> i); //这里使用了移位操作,配合按位取反,就可以让每循环一次有一位是0
//P0 = ~(0x01 << i); //如果改成这一句代码,那么流水灯的流的方向就会颠倒
delay1s();
}
}