基于51单片机的NTC热敏电阻和ADC电压测量

        本次设计利用AT89C51作为主控,利用74HC573作为数码管驱动芯片,数码管为六位共阴数码管,利用独立按键进行用户交互,实现温度/电压二者之间的转换,利用8位LED进行状态显示,利用IIC驱动PCF8591进行ADC获取数值和DAC模拟输出,通过NTC热敏电阻的特性,转换成温度值,利用ADC转换进行电压输入和模拟输出实现测量电压越高,输出电压越高。

一、硬件设计

1、PCF8591

        PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。相比较与ADC0808,ADC0804,PCF8591具有节省IO口,转换稳定等特性,且PCF8591有四个ADC输入,一个DAC输出口,针对本次设计的要求是完美符合的。如下

2、74HC573驱动数码管

        74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件,是一种锁存芯片,74HC573一般用于扩展单片机的IO口,一般情况下驱动一个6位数码管需要大于8+6=14个IO口,但是在利用74HC573的情况下只需要8+2=10个IO口,足足节省了4个IO口。

二、软件设计

1、IIC驱动PCF8591

(1)IIC协议驱动代码

        IIC驱动代码具有一般的通用性,通过IIC的读写时序可以得出以下代码,这里不过多演示IIC协议原理。

#include "delay.h"
#include "iic.h"

void delay_5us()
{
	unsigned char i;

	i = 12;
	while (--i);	
}

//金丝草;使用iic通讯方案1
//方案1:每个函数结束后未释放SDA线,且SCL=1; STOP信号均为高。起始前面处理一下
//方案2:每个函数结束后释放SDA线,且SCL=0;STOP信号均为高。后面信号处理一下。
//本次采用方案1
//1、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值