学习笔记c51_LED模块流水灯和代码怎么模块化

单片机上的LED实现流水灯

原理图和理解

单片机的原理图

在这里插入图片描述

LED模块的原理图

在这里插入图片描述
LED模块的用电源VCC驱动的化灯会更亮,但是要过电阻限流防止烧坏LED模块
如果让单片机的引脚做驱动LED的话,因为单片机引脚电流小,LED没这么亮。如果为了单片机直接驱动可以通过经过一个芯片,再芯片连接LED

代码和理解

流水灯的最简单的代码

#include <REGX52.H>
#include "delay.h"	

void main()
{
	
	while(1)
	{
	
		P2=~0x01;		//这个是0x01取反以后的二进制数1111 1110
						//下面以此类推,不再赘述哈哈哈
		Delay_ms(200);	//这个控制流水灯的速度,越大越慢
	
		P2=~0x02;		//1111 1110
		Delay_ms(200);
		P2=~0x04;		//1111 1110
		Delay_ms(200);
		P2=~0x08;		//1111 1110
		Delay_ms(200);
		P2=~0x10;		//1111 1110
		Delay_ms(200);
		P2=~0x20;		//1111 1110
		Delay_ms(200);
		P2=~0x40;		//1111 1110
		Delay_ms(200);
		P2=~0x80;		//1111 1110
		Delay_ms(200);
	}
	
}

“~” 这个符号是取反的意思
比如:0011 1010 这个二进制数,
~0011 1010 以后就得到了 1100 0101

也可以用for循环或者while循坏进行循坏移位来实现

流水灯的其他代码(没有试过的版本嘿嘿)

unsigned char num=0
while(1)
{
	for(num=0;num<8;num++)
	{
		P2=~(0x01<<num);
		Delay_ms(200);
	}
	num=0//将代码清零,这样子才能从第一个灯再一次循环
	
}

这个理解就是
第一次循环将 0000 0001 向左边移动 num即 0 位
得到: 0000 0001 取反以后得到 1111 1110 即第一个亮

第二次循环将 0000 0001 向左边移动 num即 1 位
得到: 0000 0010 取反以后得到 1111 1101 即第二个亮

第三次循环将 0000 0001 向左边移动 num即 2 位
得到: 0000 0100 取反以后得到 1111 1011 即第三个亮

同样哈,因为LED是低电平点亮,所以要取反哈

将代码模块化的一些操作

模块的H文件怎么搞

图片步骤

具体的步骤如下

在这里插入图片描述
新建一个文件
给你的文件取个名子给你的文件取个名字
在这里插入图片描述然后在H文件内 写下这个
在这里插入图片描述然后在C文件下写下你的模块的代码

h文件下的代码

#ifndef _DELAY_H_
#define _DELAY_H_ //这个就按照delay.h写就可以啦
void Delay_ms(unsigned int ms);//这个是C文件中模块化的
							//记得一定要加 分号


#endif 

C文件下的代码


void Delay_ms(unsigned int ms)		//@12.000MHz
			//👆就是这个直接放到H的文件夹中,记得加分号。
{
	unsigned char i, j;
	for(;ms;ms--)
	{
		

		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
	
}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值