PIC单片机项目(2)——基于PIC16F877A的温度测量与存储装置_pic16f877a project(1)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

整个设计的电路图如下所示:

接下来就是思路及代码讲解。

首先看如何配置按键吧。

从电路图中可以看出,按键被我接在了RB2口,所以关注PIC单片机的管脚B相关寄存器即可。

上面是官方文档中,关于PORTB的描述。首先PORTB是8位宽的双向端口,可以配置为输入模式或者输出模式。寄存器TRISB就是控制管脚的输出方向的。当配置为1时,控制对应的管脚为输入模式,为0时,控制对应的管脚为输出模式。PORTB的所有管脚都有内部上拉的控制,通过OPTION_REG寄存器的第7位控制。将该位清0,代表使能内部上拉。当PORTB配置为输出模式时,自动清除内部上拉。(需要注意的是,要配置管脚为输入模式,就必须使能内部上拉,否则读不出IO口的电平状态!)

由于我用的是RB2,所以我关于PORTB的配置如下:

接下来就是配置串口。

USART,是通用同步异步接收器的简称,它是一种串行通信接口,可以与外围的串口通信设备进行数据交换。USART可以配置为一下几种工作方式;

异步(全双工)

同步主机(半双工)

同步从机(半双工)

和它相关的寄存器有:

TXSTA:发送状态和控制寄存器。

bit7: 时钟源选择位。如果是异步模式就不关心这一位,如果是同步模式,该位为1代表主机模式,为0代表从机模式,时钟源来自于外部。

bit6: 选择发送数据的长度。为0的话,代表发送的数据是8位。

bit5:是否使能发送模式。

bit4: 选择工作模式,是同步模式还是异步模式。

bit3: 未实现。

bit2: 高波特率选择位。如果是同步模式下,该位不关心。

bit1: 发送移位寄存器空/满标志

bit0: 发送数据的第九位,可以是奇偶校验位.

RCSTA: 接收状态和控制寄存器。

bit7: 串行口使能位

bit6: 接收数据长度选择位。1代表接收数据长度为8位。

bit5:单接收使能位。在同步从机模式下不必关注该位。

bit4: 连续接收使能位

bit3: 地址检测使能位

bit2: 帧错误检测位

bit1: 溢出错误位

bit0: 接收数据的第九位.

SPBRG 波特率控制寄存器。

其中,波特率的计算如下:

X的值就是寄存器  SPBRG里面的值,范围是0-255.对于异步高速模式,可以查表得到常用的波特率下寄存器 SPBRG的值为多少。

本次对串口的配置如下:

接下来就是DS18B20测温模块了。关于该模块的资料,网上有很多,这里就不介绍了。主要讲下它的工作流程:

初始化DS18B20
        执行ROM指令
        执行DS18B20功能指令

第二步执行ROM指令,也就是访问每个DS18B20,搜索64位序列号,读取匹配的序列号值,然后匹配对应的DS18B20,如果我们仅仅使用单个DS18B20,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。

然后关于它的读写时序,这里也不做过多介绍,直接给出PIC单片机驱动DS18B20的代码如下:

再往下就是EEPROM模块啦。

这个模块使用的是IIC协议,可以参考该模块数据手册。不详细展开,会用即可。

我们在使用的的时候,配置一下PIC单片机的硬件IIC即可。

关于LCD显示器的部分,可以看我写的PIC第一篇文章。

仿真效果图如下:

按下按键后

主程序代码如下:

// 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
#include "I2C_EE302.h"

#define uchar unsigned char
#define uint unsigned int

#define KEY1 RB2		//label RB2 as key1

#define temp_h (PORTC|=0x20)        //DS18B20--->RC5
#define temp_l (PORTC&=0xdf) 
#define temp_o (TRISC&=0xdf)
#define temp_i (TRISC|=0x20)

unsigned char dat1,dat2;//保存读出的温度z
unsigned long int dat;

 unsigned char outString[5];	//character array for LCD string
 unsigned char outString2[5];	//存放光照阈值  用于显示
 

void delayms(int x) //4M晶振下,延时1ms
{
	int y,z;


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/a731c1a711a9f22b5c1f1c22279ba0f0.png)
![img](https://img-blog.csdnimg.cn/img_convert/4f082238764926a1147144415957d5ab.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

希望能够帮助到想自学提升的朋友。**
[外链图片转存中...(img-dFgaeQlJ-1715680484616)]
[外链图片转存中...(img-Ww4P4XlQ-1715680484618)]

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值