51单片机第一课——点亮一颗LED灯

写在前面:使用的是普中科技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();
	}
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值