news 2026/7/10 13:19:32

PIC单片机项目(1)——基于PIC16F877A的电子秤设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PIC单片机项目(1)——基于PIC16F877A的电子秤设计

首先简要描述一下实现的功能:

使用电位器,采用电阻分压的形式来改变电阻上的电压,以此来模拟电子秤上重量的变化。使用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的<ADCS2>位一起,用于选择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如下:

// CONFIG #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> #include "ee302lcd.h" // Include LCD header file #include <stdio.h> // Include Standard I/O header file unsigned char outString[5]; //character array for LCD string int adc_value; void do_adc(void) { __delay_us(30); //Acqusition time delay set to 30us (>19.7us) GO_nDONE=1; //Start ADC conversion while(GO_nDONE)continue; //Wait until conversion finishes adc_value = ADRESH; //Pass ADRESH value to adc_value variable sprintf(outString,"%dkg",ADRESH); //显示光照强度 光照阈值 运行时间 Lcd8_Write_String(outString); //Lcd8_Set_Cursor(2,0); } void main(void) { Lcd8_Init(); // Required initialisation of LCD to 8-bit mode TRISA=0x04; // Set PORTA bit 3 as input for AN2 ADCON0 = 0b01010001; // ADCS1:ADCS0 set to 0:1 for Tosc x8 (Fosc/8) // Channel 2 // ADC On ADCON1 = 0b00000010; // Left justified result // ADCS2 = 0 for Tosc x8 (Fosc/8) // RA2/AN2 selected as analog input // Vref+ : Vdd Vref- : Vss // AN7, AN6 and AN5 selected for Digital I/O for LCD while(1) { Lcd8_Clear(); //clear LCD do_adc(); __delay_ms(100); } }

需要完整工程(代码和仿真的)请看评论区。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 13:19:03

Tailwind CSS在Cursor中失效?3类高频报错深度溯源(class自动补全失灵、@apply不生效、PurgeCSS误删),附官方CLI兼容性修复补丁

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Cursor中Tailwind CSS失效的典型现象与诊断全景 在 Cursor 编辑器中集成 Tailwind CSS 后&#xff0c;开发者常遭遇样式未生效、类名无法智能补全、热重载失灵等“静默失效”问题。这类问题往往不抛出编译错误…

作者头像 李华
网站建设 2026/7/10 13:16:04

番茄小说下载神器:打造个人专属数字图书馆的终极解决方案

番茄小说下载神器&#xff1a;打造个人专属数字图书馆的终极解决方案 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 还在为网络不稳定而错过精彩小说章节烦恼吗&#xff1f;想要随时随地畅…

作者头像 李华
网站建设 2026/7/10 13:15:13

回溯题目:字母组合迭代器

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题&#xff1a;字母组合迭代器 出处&#xff1a;1286. 字母组合迭代器 难度 5 级 题目描述 要求 设计 CombinationIterator\texttt{CombinationIterator}Combinatio…

作者头像 李华
网站建设 2026/7/10 13:13:21

gitlab 服务 CI/CD 配置

使用Gitlab作为工作仓库进行代码发布及版本控制&#xff0c;Gitlab内置了CI/CD的工具&#xff0c;这些工具可以用于代码提交的同时完成镜像构建、自动化测试、自动化部署等连续的工作&#xff1a; CI: Continuous Integration&#xff08;持续集成&#xff09;CD: Continuous …

作者头像 李华
网站建设 2026/7/10 13:13:22

AI 编程工具 2026 横评——Copilot vs Cursor vs Claude Code vs Kiro 深度对比

4 款主流 AI 编程工具全维度对比,从代码补全到 Agent 模式,帮你找到最适合的那一个。本文基于半年真实使用体验,不是试用一天的水文。 目录 前言 一、四款工具定位一览 二、核心能力对比 三、Agent 模式深度对比 四、上下文理解能力 五、企业级特性对比

作者头像 李华
网站建设 2026/7/10 13:10:56

ORB-SLAM2 从理论到代码实现(十六):ORB 关键点提取和描述子

1. 什么是特征点&#xff1f; 特征点由关键点和描述子组成&#xff0c;关键点是该特征点在图像中的位置&#xff0c;有些还包括方向、大小等信息&#xff0c;描述子是用来描述该关键点周围像素的一种描述方法&#xff0c;外观相似的关键点应该具有相似的描述子&#xff0c;想要…

作者头像 李华