目录
-IIC通信协议的AD/DA模块PCF8591模数转换芯片(市面上也有其他芯片做的AD/DA有卖的)
Part1:先导概念模块化编程之库
1.模块化编程引言:
在之前的程序编程中我们所有的函数和驱动模块的代码均放在main.c里,而在模块化编程中,我们把各个模块的代码放在不同的.c文件里,在.h头文件里提供外部可调用函数的声明,在main想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。同时如果别人写了这个模块的代码,我们也可以直接调用别人写的代码。花一杯咖啡的时间看下边UP”江协科技“链接的讲解,我想可以让你对库有更完全的理解:
Part2:IIC通信协议
1.IIC通信协议简介:
单片机外围设备和模块都是使用各种通信协议在单片机芯片和模块之间传输数据的,这里介绍应用较广的IIC通信协议(想内行一点就读做I^C,i方c)只需要一根时钟线CLK和数据线SDA就可以实现芯片间的通信,除此之外还有SPI,1-Wire等等协议。用上了IIC通信协议我们就可以轻易实现通过两根导线芯片与芯片间的数据传输,对于IIC通信的原理和通信流程,可以浅看下方UP“爱上半导体”链接中的视频讲解。
4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili
[12-1] AT24C02(I2C总线)_哔哩哔哩_bilibili
-IIC头文件的导入(头文件的导入教程)
相信大家因该(可能)已经在上面IIC的原理视频中了解了实现IIC通信的几个过程需要我们自己编写的几个函数,这里已经为大家准备了别人写好的IIC库函数可以直接调用,下面讲讲怎么添加怎么添加和使用库文件。
步骤一:
准备好你的库文件(XXX.c和XXX.h文件),在你的keil工程文件夹下新建一个文件夹叫做“Driver”(英文驱动的意思,我一般比较喜欢这个名字,还不会创工程悄悄移步“入门第一课”别让我知道),把准备好的IIC.c和IIC.h文件放进去:
步骤二:
打开你的工程文件,双击上面图里的LED.uvproj就可以进去(你的工程名可能不叫LED),
弹出的窗口中选择进入刚才新创的“Driver”文件夹,文件类型选成“All files”,CTRL键多选选中刚才放进去的.c和.h文件,点击“Add”就添加好了,此时左边标“5”处会出现刚才添加的文件,你可以双击点进去看看里面的代码,也可以自己改改。(也可以点击Add new item自己建个.h库文件,自己写驱动)
添加了之后我们还要让编译器知道这个库文件存在哪儿,编译的时候该去哪儿找代码。
点击”魔术棒“,弹出窗口选“C51”,点“include path”右边的三个点,弹出窗口点“新建”,点三个点,选择刚才放库文件的文件夹,“OK”,就算添加好了
点进IIC.h文件,就可以看到里面已经可以调用的写好的函数,IIC.c文件里则是每个函数怎么实现的源代码,然后进入main.c里面include “IIC.h”就可以愉快调用里面写好的函数了。
上面已经讲完了怎么添加库文件和使用,下面正式介绍下怎么用写好的库来使用各种模块
-IIC通信协议的OLED屏幕的使用
就是下面这种屏幕,使用IIC通信的,整个模块十分简洁只要两个IIC通信脚,两个供电脚,共四个引脚就可以使用这块128x64像素的OLED屏幕,它的原理图如下:
照着上面刚刚讲过的的方法添加oled.c,oled.h,OLEDfont(字库)三个文件,进入oled.h文件就可以看到可供调用的一大堆已经写好的函数了,看函数英文名就能猜出个大概的功能吧(平时自己写功能函数也要取个简单易懂的函数,不然自己都看不懂)
使用例子:
-IIC通信协议的温湿度传感器AHT20的使用
常用的温度芯片还有DS18B20,那个用的是1-wire协议,我们学院单片机板子上用的是AHT20,礼包里面有这个芯片的手册,我们学习是需要自己去看手册写的,这里直接使用库,依照之前的教程添加上AHT20.c 和AHT20.h文件:
(附上DS18B20教程:[13-1] DS18B20温度传感器_哔哩哔哩_bilibili,[13-2] DS18B20温度读取&温度报警器_哔哩哔哩_bilibili)
#include <REGX52.H>
#include "IIC.h"
#include "oled.h"
#include "AHT20.h" //注意加入要用的头文件
float temp, himditly; //拿来存温度湿度
void main(void)
{
OLED_Init();
OLED_Clear();
while(1)
{
AHT20_Read_CTdata(&temp, &himditly); //读取温湿度存到变量中
OLED_ShowString(0,0,"Temp",16);
OLED_ShowString(32,0,":",16);
OLED_ShowString(80,0,"'C",16);
OLED_ShowString(0,2,"Himd",16);
OLED_ShowString(32,2,":",16);
OLED_ShowString(80,2,"%",16);
OLED_ShowFloat(40,0,temp,16); //打印温湿度
OLED_ShowFloat(40,2,himditly,16);
}
}
-IIC通信协议的储存芯片E2PROM(AT24C02)
外部存储芯片AT24系列E2PROM,数据存进去没电了也可以保存在里面,掉电不丢失:
整理的库文件里面有AT24C02的库,尝试自己使用,至于页写等内容附上教程链接:
[12-2] AT24C02数据存储&秒表(定时器扫描按键数码管)_哔哩哔哩_bilibili
其他IIC通信的模块:
-IIC通信协议的AD/DA模块PCF8591模数转换芯片(市面上也有其他芯片做的AD/DA有卖的)
读取任意电压,输出任意电压的一个芯片,可以拿来出正弦等波,给的库里有很简单的函数可以置电压读电压,配合定时器输出就可以使用。
【蓝桥杯单片机入门】11.PCF8591芯片(硬件介绍+软件编程)_哔哩哔哩_bilibili
-IIC通信协议的DS1302时钟模块
广泛应用的时钟芯片,加上纽扣电池可以在没电的时候芯片也工作,我们板子屏幕下面就是电池槽
[10-1] DS1302实时时钟_哔哩哔哩_bilibili
[10-2] DS1302时钟&可调时钟_哔哩哔哩_bilibili
对上节课IO输入输出的一些拓展:
-IO的输入拓展:矩阵键盘
扫描的思想,库也提供给了大家,自己可以尝试写个库:
-IO的输入拓展:红外传感器
网上买模块可以找店家要资料,找店家要例程那些,店家一般也有写好的库之类的。
Part4:小节结语
上面介绍的模块和芯片礼包里都是有原理图和手册的,我也给大家整理了针对学院单片机的库,如果你是用的其他板子,请看看连接的引脚是不是一样的,不然这些库可能不能正常工作。文中给的教程连接,原理图都是和我们板子上差不多的,但是连的引脚可能不一样,这时你就需要移植/修改库,把库里的引脚替换才能使用。 希望大家能弄懂原理,弄懂库里函数怎么写的,以后大家可以有能力自己根据芯片手册自己写库,完题了组长问你原理和思路也要能讲出来。有更多想听的功能可以评论或者Q我吧,祝顺利。