51单片机入门《点亮LED》

欢迎来到51单片机入门,本教程在大家会用keil创建工程的条件下,教大家如何使用51单片机,具体是代码讲解及其思路,教大家如何使用一些基本外设,话不多说,先开始学习单片机的第一步:点灯。

        本教程用的是普中的开发板,型号是A2,主控是STC89C52。

一、点亮P2口全部LED

1.实验结果

        在开始编写正式代码之前,我们需要写好程序基本框架,然后再魔术棒里面的output选项里面将create HEX file 的选项打开

        这里我们需要在while循环里面实现需要重复执行的代码,因为单片机的程序是永远不可以结束的,所以while后边的条件是“1”,即死循环。

        那么现在,我们可以打开开发板原理图,如果没有手册,可以找售卖开发板的店家咨询一份。

        我们打开原理图以后,可以看到LED是连接在P2端口,且是共阳极    

那么我们可以试着点亮全部LED:在main函数里写好P2=0x00,然后编译,在STC-SPI软件里面下载程序;

        可以看到8个led都亮起来了。

2.实验代码讲解

首先看到我们使用了P2,那么P2是什呢?在这里,P2被定义在了#include <REGX52.H>文件里,转到定义以后如下:

在29行的位置定义了P2,后边的是寄存器的地址,关于一些关键字,keil c51和标准C语言会有些差异,理解这个是什么即可。

        由于前边已经提到LED是共阳极,所以只需要将P2口电平置0即可点亮全部LED。如果我们继续浏览这个文件,会看到对P2口更为精细的拆分:

这意味着我们可以可以单独控制P2的每一个位,既然如此,那么我们就单独来点亮一颗LED:

二、点亮一颗LED

        有了前边的基础,我们只需P2修改为指定端口即可以点亮相应LED。以P2_0为例:

结果如下:

三,循环流水灯

有了以上基础,我们可以做一个循环流水灯,让八个灯泡都亮起来,且一次仅亮一颗灯泡,代码如下:

#include <REGX52.H>

void delay(unsigned int x)
{

while(x--);



}
void main()
{

	
	while(1)
	{
		P2_0=0x00;
		delay(50000);
		P2_0=0x01;
		P2_1=0x00;
		
		delay(50000);
		P2_1=0x01;
		P2_2=0x00;

		delay(50000);
		P2_2=0x01;
		P2_3=0x00;
		
		delay(50000);
		P2_3=0x01;
		P2_4=0x00;
		
		delay(50000);
		P2_4=0x01;
		P2_5=0x00;
		
		delay(50000);
		P2_5=0x01;
		P2_6=0x00;
		
		delay(50000);
		P2_6=0x01;
		P2_7=0x00;
		
		delay(50000);
		P2_7=0x01;


		
	}


}

程序下载好之后可以看到灯泡从D1到D8依次亮起,如此循环往复。但是有人会觉得这个代码太长了,很麻烦,那么我们可以用位操作来缩短代码:

#include <REGX52.H>

void delay(unsigned int x)
{

while(x--);



}
void main()
{

	unsigned char byte=0x01;
	while(1)
	{
		unsigned char i=0;
		for(i=0;i<8;i++)
		{
			P2=~(byte<<i);
			delay(50000);
		}
	}


}

这里创建了一个变量byte,为0x01,二进制表示为0000 0001。for循环里,byte每次左移i位(byte并未改变),依次变为:

0000 0010
0000 0100
0000 1000
0001 0000
0010 0000
0100 0000
1000 0000

由于灯泡是共阳极,所以需要取反,那么P2实际上接收的是:

1111 1110
1111 1101
1111 1011
1111 0111
1110 1111
1101 1111
1011 1111
0111 1111

可见位操作在单片机开发领域的重要性。

以上就是51单片机点灯的教程,谢谢阅读。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值