首先简要描述一下实现的功能:
使用电位器,采用电阻分压的形式来改变电阻上的电压,以此来模拟电子秤上重量的变化。使用PIC16F877A的AD转换端口,测量电阻上的电压,用此数据来代替物体重量。同时用LCD1602显示器,将所测量的重量显示在屏幕上。
整体电路图如下所示:
首先简单介绍一下LCD1602模块,该模块具体的信息网上有很多资源可以参考:
RS:数据或命名选择端。(0:命令 1:数据)
RW:读写控制端。 (0:写 1:读)
E:使能端
D0-D7:数据端
写指令的时候应该:RS=0,RW=0,D0-D7=data,E=1,延时一段时间,E=0;
写数据的时候应该:RS=1,RW=0,D0-D7=data,E=1,延时一段时间,E=0;
接下来详细介绍PIC16F877A的AD转换功能:
直接看官方文档的介绍:
从中可以知道,对于28脚系列的 器件,有5路模拟输入端,对于40/44脚的器件,有8路模拟输入端。输入的模拟电压会被转换为10位的数字量,也就是AD的有效位数为10位。AD转换的参考电压是软件可配置的。
与AD转换模块密切相关的寄存器为:
ADRESH: AD转换结果的高位寄存器
ADRESL: AD转换结果的低位寄存器
ADCON0: AD转换模块的控制寄存器
ADCON1:AD转换模块的控制寄存器
ADCON0寄存器各个位的信息如下所示:
该寄存器的第6-7位和ADCON1的位一起,用于选择AD转换的时钟速率
第5-3位,用于选择AD转换的通道
第2位,AD转换的状态位。当手动将该位置1时,开启AD转换。AD转换结束后,硬件自动将该位置0。如果AD转换没有完成,那么该位一直为1.
第1位,保留,没有作用。
第0位,AD模块启用位。为1表示打开AD模块,启用AD。
ADCON1寄存器各个位的信息如下所示:
该寄存器第7位,控制AD转换结果的格式。1表示结果右对齐,左边空出来的位为0。0表示左对齐,右边空出的位为0.
该寄存器第6位,和上面的ADCPN0一起控制AD转换的时钟速率。
5-4位未实现,读为0.
3-0位,用于控制AD转换引脚的工作模式以及AD转换模块的参考电压。
基础知识铺垫完毕以后,就可以开始准备编写代码了。
首先是配置好PIC16F877A单片机的配置位
然后要包含一定的头文件:
其中,头文件“ee302lcd.h”里面包含的是和液晶屏LCD1602相关的函数。
然后定义一个全局字符串,用于存放测到的重量信息,也可以理解为测到的模拟电压值
再定义一个变量,用于保存AD转换值
接下来定义一个开启AD转换的函数
最后就是主函数了。主函数里面包含了AD转换的配置模式,以及LCD1602的初始化函数、显示函数等等。
全部main.c如下:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新