点亮LED灯

目录

前言

一、点亮一个LED灯

三、led闪烁实验

1.单个led闪烁

2.多个led灯闪烁逐渐点亮(最后led全亮)

小遗憾(技术难题):


以下就是一个渣渣的胡写日常了


前言

51单片机的学习代码,程序都已经过调试。所用的软件为keil。


一、点亮一个LED灯

#include"reg52.h"
sbit led=P2^0;
void main()
{
	led=0;
	while(1)
	{
	}
}

在编译过程中:

code,表示程序所占用FLASH的大小

data,数据存储器内部RAM占用的大小

xdata,数据储存器外部RAM占用的大小

程序的大小不是.hex的大小,而是编译后的code和data的大小

二、实现LED流水灯

#include "reg52.h"
#include "intrins.h" //实现左右移的库函数
typedef unsigned int u16;  //对数据类型进行声明定义
typedef unsigned int u8;
#define led P2       //将P2口定义为led,用led代替P2
 
 void delay(u16 i)
 {
	 while(i--);
	 }
  
 void main()
	 {u8 i;
		 led=~0x01; //取反
		 delay(30000);
		 while(1)
		 {for(i=0;i<8;i++)
			 {P2=~(0x01<<i);   //将1向右移i位,然后将结果赋给P0口
				 delay(50000); //大约延时450ms
			 }
		 }
	 }

 void delay(u16 i)
 {
     while(i--);
     }   本函数实现延时效果。

led=~0x01,取反对应的二进制为1111 1110 最低位为0,因此最开始的D1指示灯会亮。

进入while循环,实现8个led灯循环点亮,每循环一次,点亮的小灯向右移动一个,即P2口的输出低电平要左移一位。

P2=~(0x01>>i)表示每增加i次增加1次,0x01就移动多少位。因为1(高电平)不会让led点亮,需要取反后变为低电平才能点亮,所以最后的结果需要取反后给P0口。

每次循环都要延迟一段时间,便于肉眼捕捉。

三、led闪烁实验

1.单个led闪烁

#include"reg52.h"
typedef unsigned int u16;
sbit led=P2^0;
void delay(u16 i)
{
	while(i--);
	}

void main()
{
	
	while(1)
	{
		led=1;
	delay(50000);
		led=0;
		delay(50000);
	}
}

2.多个led灯闪烁逐渐点亮(最后led全亮)

#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void delay(u16 i)
{
	while(i--);
	}

	
	 void main()
	 {u8 i;
		 led=0xfe;
		 delay(30000);
		 while(1)
		 {for(i=0;i<8;i++)
			 {P2=0xfe<<i;
				 delay(50000);
			 }
		 }
	 }


小遗憾(技术难题):

多个led灯的同时点亮,还没有实现。有大佬能指点一下吗?万分感谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值