51单片机最强模块化封装(2)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


前言

这篇文章将带大家进行LED模块的封装。
原理部分请大家移步
点亮LED

一、创建LED文件添加LED文件路径

这里的使用和前面的sys文件是一样的操作的。
大家如果还是不明白移步51单片机最强模块化封装(1)

二、led文件编写

1.led.h

在led.h文件中我们对LED灯的端口进行了封装然后包含了sys.h头文件方便我们使用各种类型。
#define LED_Port P2 这里定义了LED的端口为什么要这样操作呢因为这样操作将加强我们代码的可移植性当我们换一个单片机时只需要把P2更换成对应的端口即可。

这里LED的操作是比较简单的所以只需要提高一个函数
void LED_control(u8 status, u8 which);
这个函数将在led.c中实现。

/*此宏作用:防止头文件重复包含*/
#ifndef __LED_H
#define __LED_H

#include "sys.h"

/*
	LED灯端口定义
	sbit:位定义
*/
sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;
sbit LED4 = P2^4;
sbit LED5 = P2^5;
sbit LED6 = P2^6;
sbit LED7 = P2^7;


/*
	方便移植
	LED端口的定义
*/
#define LED_Port P2 


/*
	LED控制函数
	status:LED状态 0:熄灭 1:点亮
	which:哪一个LED
*/
void LED_control(u8 status, u8 which);


#endif

2.led.c

这里的实现原理主要就是用到了C语言中位运算的知识。
不清楚的小伙伴可以去复习一下C语言。
函数具体实现过程我打算留到视频中为大家讲解。

#include "led.h"

void LED_control(u8 status, u8 which)
{
	LED_Port = status ? (~(1 << which)) : (LED_Port | (1 << which));
}

三、模块化测试

这里包含"sys.h"和"led.h"头文件。
下面在main.c中调用编写好的函数实现LED0闪烁效果。
LED0成功闪烁测试通过。

#include "sys.h"
#include "led.h"

void main(void)
{

	/*主函数*/
	while(1)
	{
		LED_control(1, 0);//点亮LED0
		delayms(1000);
		LED_control(0, 0);//熄灭LED0
		delayms(1000);
	}
	
}

总结

后期将持续更新模块化文章请大家多多点赞多多留言评论。
后期将会出对应视频提供大家学习
B站地址B站
大家也可以自己在对应的模块化中添加上自己的函数进行更多的测试。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6