PCF8591芯片的使用讲课教案
基于51单片机-PCF8591数字电压表课程设计

课程名称:微机原理课程设计题目:数字电压表ﻬ摘要单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
它最早是被用在工业控制领域。
其中我们用于学习用的最多的是STC89C52单片机,STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但也做了很多改进使得芯片具有传统51单片机不具备的功能。
STC89C52具有8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KB EE PROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构,全双工串行口。
本设计就是以单片机STC89C52为核心,附以外围电路,实现数字电压表的功能,并运用软件Proteus进行仿真来得到实验结果。
关键词:STC89C52单片机、仿真、中断、数字电压表、数码管显示ﻬ目录一、任务要求ﻩ错误!未定义书签。
1.1 设计任务ﻩ错误!未定义书签。
1.2设计要求ﻩ错误!未定义书签。
1.3发挥部分 ...................................................................................... 错误!未定义书签。
1.4 创新部分 ........................................................................................... 错误!未定义书签。
常用ADDA芯片的使用并行ADC0809串行ADC0832串行PCF8591docppt

;接收第二字节
CLR RI
;清接收中断标志
MOV A,SBUF
;读第二字节数据
ANL A,#0FH
;第二字节屏蔽高4位
ANL B,#0FOH
;第一字节屏蔽低4位
ORL A,B
;组合
SWAP A
;高低4位互换,组成正确的A/D数据
MOV @R0,A
;存A/D数据
INC R0
;指向下一存储单元
MOV A,#0EH
⑵ 查询方式
工作在查询方式时,0809 EOC端可不必通过反相器与或相连,
直接与80C51 P1口或P3口中任一端线相连。
【例9-13】 图9-20中,用P1.0直接与0809 EOC端相连,试用查
询方式编制程序,对8路模拟信号依次A/D转换一次,并把结果
存入以40H为首址的内RAM中。
解:
MAIN: MOV R1,#40H
⑴ IN0~IN7:8路模拟信号输入端。 ⑵ C、B、A:8路模拟信号转换选择端。
与低8位地址中A0~A2连接。由A0~A2地址000~111选择IN0~IN7八路 A/D通道。
⑶ CLK:外部时钟输入端。 时钟频率高,A/D转换速度快。允许范围为10~1280KHz 。 通常由80C51 ALE端直接或分频后与0809 CLK端相连接。
; ;延时68S:2机周×17=34机周,2S×34=68S
MOVX A,@DPTR ;读A/D值
MOV @R1,A
;存A/D值
INC DPTR
;修正通道地址
INC R1
;修正数据区地址
DJNZ R7,LOOP ;判8路采集完否?未完继续
RET
;8路采集完毕,返回
单片机实验指导书(pcf8591) (1)

}
}
实验2:
#include "reg52.h"
sbit P34=P3^4;//定义LED指示灯的IO口
sbit P20=P2^0;//定义key的IO口
void main()
{
int i;//计时变量
while(1)
{
for(i=0;i<30000;i++);//延时
5.运行、调试程序,观察实验结果。
四、实验参考电路及参考程序
1.参考电路
2.参考程序
实验1:
#include "reg52.h"
sbit P34=P3^4;//定义LED指示灯的IO口
void main()
{
int i;//计时变量
while(1)
{
for(i=0;i<30000;i++);//延时
8.选择“output”页面,选中“create Hex File”,并可在“Name of Executable:”输入框中,重新输入生成HEX文件的文件名,然后点“确定”,以在程序编译时,实时生成需下载到单片机中的HEX文件。
9.点击“File” 菜单下面的“New”选项,再点击“File”菜单下面的“Save”选项,保存文件。输入文件名(C文件扩展名为“.c”,汇编文件扩展名为“.asm”),如下图:取名为main.c:
13.添加成功后,点击“Project”菜单下面的“Rebuild all target files”选项。当编译通过之后HEX文件才能生成,如下图。如果程序有错误,编译结果框中会有提示错误。双击对应的错误列表,可定位到源程序的位置,以便快速寻找错误。
PCF8591DA模拟小信号

课程设计报告课程名称:课程设计题目:PCF8591产生小信号摘要本文主要介绍利用PCF8591芯片DA转换产生小信号(100毫伏以内),然后经LM358放大滤波,最后再用ADC0809芯片AD转换将放大后信号用单片机显示。
DA产生的小信号可用来模拟霍尔线性传感器产生的小信号。
即本设计可用来模拟磁场检测关键词:PCF8591、小信号、放大滤波、ADC0809。
目录一、绪论 (3)1.1课题概述.......................................................................................... 错误!未定义书签。
1.2磁场检测系统发展概况 (3)1.3课题研究的目的和意义 (3)二、系统设计 (4)2.1设计任务 (4)2.2系统设计思路 (4)2.3系统设计框图 (4)三、硬件设计 (5)3.1DA模块 (5)3.2信号放大滤波模块 (6)3.3AD模块 (6)3.4主单片机STC89C52部分 (7)3.5按键模块 (8)3.6显示模块 (8)3.7报警模块 (9)3.8整体电路 (9)四、软件设计 (10)五、系统仿真与调试 (11)5.1P ROTEUS仿真 (11)5.2硬件调试 (12)六、设计总结与心得体会 (13)七、参考文献 (14)附录一源程序 (15)一、绪论1.2 磁场检测系统发展概况最早的磁场探测器已有2000多年的历史,通过感应地球磁场辨识方向或为舰船导航。
随着现代科技的进步,磁场传感器的应用越来越广泛,磁场传感技术向着高灵敏度、高分辨率、小型化以及和电子设备兼容的方向发展。
文献[1~4]等传感器专著对各类传感器进行了论述,但关于磁场传感器的篇幅不多,介绍不全面。
本文在广泛查阅国内外文献的基础上,对磁场传感器进行了系统总结。
从应用的观点出发,根据磁场感应范围将磁场传感器分为三类:低强度磁场、中强度磁场及高强度磁场传感器[5]。
PCF8591(AD)实验指导书

PCF8591(AD)实验指导书实验十二PCF8591(AD)实验一、知识准备模拟信号是一类电平随着时间进行连续变化的信号,平时常见的正弦信号、三角波等都是模拟信号,AD转换就是模数转换。
顾名思义,就是把模拟信号转换成数字信号。
1.A/D转换器1.1A/D转换器的作用A/D转换器是用来通过一定的电路将模拟量转变为数字量。
模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。
但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。
1.2A/D转换器的主要性能指标(1)分辨率ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。
常用二进制的位数表示。
例如12位ADC的分辨率就是12位,或者说分辨率为满刻度FS的1/212。
一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V×1/212=2.4mV。
(2)量化误差ADC把模拟量变为数字量,用数字量近似表示模拟量,这个过程称为量化。
量化误差是ADC的有限位数对模拟量进行量化而引起的误差。
实际上,要准确表示模拟量,ADC的位数需很大甚至无穷大。
一个分辨率有限的ADC的阶梯状转换特性曲线与具有无限分辨率的ADC 转换特性曲线(直线)之间的最大偏差即是量化误差。
(3)偏移误差偏移误差是指输入信号为零时,输出信号不为零的值,所以有时又称为零值误差。
假定ADC没有非线性误差,则其转换特性曲线各阶梯中点的连线必定是直线,这条直线与横轴相交点所对应的输入电压值就是偏移误差。
(4)满刻度误差满刻度误差又称为增益误差。
ADC的满刻度误差是指满刻度输出数码所对应的实际输入电压与理想输入电压之差。
(5)线性度线性度有时又称为非线性度,它是指转换器实际的转换特性与理想直线的最大偏差。
(6)绝对精度在一个转换器中,任何数码所对应的实际模拟量输入与理论模拟输入之差的最大值,称为绝对精度。
PCF8591中文手册讲义

PCF8591中文手册讲义一、PCF8591概述1. 内置一个模拟电压比较器;2. 提供4个模拟输入通道;3. 具有1个模拟输出通道;4. 适用于I2C总线通信;5. 工作电压范围宽,可达2.5V至6V。
二、PCF8591内部结构及功能1. 内部结构(1)模拟输入多路选择器:可以选择4个模拟输入通道之一;(2)A/D转换器:将模拟信号转换为数字信号;(3)D/A转换器:将数字信号转换为模拟信号;(4)模拟电压比较器:对输入的模拟电压进行比较;(5)I2C总线接口:实现与外部设备的通信。
2. 功能介绍(1)模拟输入多路选择器:通过I2C总线接口发送控制字,可以选择4个模拟输入通道之一;(2)A/D转换器:将选定的模拟输入信号转换为8位数字信号;(3)D/A转换器:将8位数字信号转换为模拟信号,输出至模拟输出通道;(4)模拟电压比较器:对输入的模拟电压进行比较,可应用于阈值检测等场景;(5)I2C总线接口:实现与单片机、微处理器等设备的通信,便于数据传输和控制。
三、PCF8591应用电路及编程方法1. 应用电路(1)电源电路:确保电源稳定,满足PCF8591的工作电压范围;(2)模拟输入电路:根据实际需求选择合适的传感器或信号源,并进行滤波、放大等处理;(3)模拟输出电路:可根据实际应用场景,对输出信号进行放大、滤波等处理;(4)I2C总线接口电路:连接单片机或其他设备的I2C接口,实现数据传输和控制。
2. 编程方法(1)初始化I2C总线接口:设置I2C总线的时钟频率、设备地址等参数;(2)发送控制字:选择模拟输入通道、启动A/D转换等;(3)读取A/D转换结果:通过I2C总线读取转换后的数字信号;(4)写入D/A转换数据:通过I2C总线发送8位数字信号,实现模拟信号输出;(5)模拟电压比较器应用:设置比较阈值,实现阈值检测等功能。
四、PCF8591编程实例及注意事项1. 编程实例include <Wire.h> // 引入I2C库define PCF8591_ADDR 0x48 // 设置PCF8591的I2C地址void setup() {Wire.begin(); // 初始化I2C总线}void loop() {// 读取模拟输入通道0的值Wire.beginTransmission(PCF8591_ADDR);Wire.write(0x04); // 控制字:选择通道0,启动A/D转换 Wire.endTransmission();Wire.requestFrom(PCF8591_ADDR, 2); // 请求2个字节的数据if (Wire.available() >= 2) {te high = Wire.read(); // 读取高8位te low = Wire.read(); // 读取低8位int value = (high << 8) | low; // 合并高低8位// value即为模拟输入通道0的数字值}// 通过模拟输出通道输出固定电压值(例如1.25V)Wire.beginTransmission(PCF8591_ADDR);Wire.write(0x40); // 控制字:选择D/A转换Wire.write(outputValue); // 写入D/A转换数据Wire.endTransmission();}2. 注意事项(1)确保I2C总线的电源和地线连接正确,避免信号干扰;(2)在读取A/D转换结果时,注意数据的字节顺序,避免数据解析错误;(3)模拟输入信号的幅值应在PCF8591的输入范围内,以免损坏芯片;(4)模拟输出通道的负载应适当,避免影响输出电压的精度;(5)在使用模拟电压比较器时,注意设置合适的比较阈值,以提高检测准确性。
基于51单片机的PCF8591芯片电压表

PCF8591芯片电压表一、功能1、用PCF8591芯片采集电压。
2、使用IIC通信协议进行通信。
3、四位数码管显示采集电压。
4、电压表有五个档位200MV、2V、20V、200V、500V。
5、四个按键进行档位切换。
6、五个LED指示灯1~5指示相应档位。
7、电压过大,继电器自动断开,保护电路。
8、滑动变阻器可以对电压表精确度进行调节,使测量更精确。
9、采用STC89RC52单片机。
10、电源供电采用USB电源头(发货中会赠送一根)供电,插到手机直充头上就可以正常使用。
二、硬件按键功能及说明档位1/2:200MV档位和2V档位切换,LED1/2亮。
档位3:切换到20V档位,LED3亮。
档位4:切换到200V档位,LED4亮。
档位5:切换到500V档位,LED5亮。
复位:对整个电路进行复位,回到初始化状态2V档位。
三、注意事项1、程序下载程序利用串口下载,首先将下载器正确连接(说明一下,板子上下载口从左到右依次接下载器的+5V、地、TX、RX,下载器上标的有),打开STC下载器如图。
选择STC89C52RC,点击“打开程序文件”选择程序文件夹中(Output-> 电压表.HEX)的温度控制.hex文件。
点击下载,当提示上电时拔下电源再插上就可以了。
2、按键使用如上图所示,档位1/2、档位3、档位4、档位5,以及复位五个按键。
具体按键功能在上边已经介绍。
3、使用说明刚开始使用是,不要测量高电压,应该先用低电压试试电压表好坏。
测量较高的电压时,要用最高档测量一下大致电压是多少,再换用合适档位进行精确测量。
因为不同型号的电源,导致单片机的工作电压和PCF8591芯片的基准电压,都不是标准的5V,所以在测量时会有误差,这时候就需要通过对电位器进行微调来调节误差,使测量更精确。
4、注意事项需要特别注意的是测量电压千万不要高于测量档位的电压,不然会因为瞬间电流过大,直接烧坏芯片,使电压表产生损坏。
因为操作不当造成的后果,我们一概不负责,一定要特别注意。
pcf859芯片的使用

pcf859芯片的使用PCF8591芯片的使用基于PCF8591的AD—DA的程序设计。
本设计是通过PCF8591芯片选择通道1将滑动变阻器的电压记过A/D转换,有单片机读回,并在数码管显示,比且有这个数据再经过D/A转换成模拟电压驱动发光二极管。
发光二极管的亮度与数码管显示的电压值相对。
1. PCF8591芯片PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串行I2C总线接口。
3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线而不需要额外硬件。
器件地址、控制和数据通道通过两线双向I2C总线传输。
器件功能包括多路复用模拟量输入、片上跟踪和保持功能、8位模数转换和8位数模转换。
最大转换速率取决于I2C总线的最高速率。
我实现的AD转换是使用通道0将滑动变阻器两端的电压AIN0~AIN3:模拟信号输入端。
A0~A2:引脚地址端。
VDD、VSS:电源端。
(2.5~6V)SDA、SCL:I2C 总线的数据线、时钟线。
OSC:外部时钟输入端,内部时钟输出端。
EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。
AGND:模拟信号地。
AOUT:D/A 转换输出端。
VREF:基准电源端。
地址:I2C总线系统中的每一片PCF8591通过发送有效地址到该器件来激活。
该地址包括固定部分和可编程部分。
可编程部分必须根据地址引脚A0、A1和A2来设置。
在I2C 总线协议中地址必须是起始条件后作为第一个字节发送。
地址字节的最后一位是用于设置以后数据传输方向的读/写位。
(见下图)控制字:发送到PCF8591的第二个字节将被存储在控制寄存器,用于控制器件功能。
控制寄存器的高板字节用于允许模拟输出,和将模拟输入编程为单端过查分输入。
低半字节选择一个有高板字节定义的模拟输入通道。
如果自动增量标志置1,每次A/D转换后通道号将自动增加。
如果自动增量模式是使用内部振荡器的应用中所需要的,那么控制字中模拟输出允许标志应置1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delay();
}
return k;
D/A转换:发送给PCF8591的第三个字节被存储到DAC数据寄存器,并使用片上D/A转换器转换成对应的模拟电压。这个D/A转换器由连接至外部参考电压的具有256个接头的电阻分压电路和选择开关组成。模拟输出电压由自动清零单位增益放大器缓冲。这个缓冲放大器可通过设置控制寄存器的模拟输出允许标志来开户或关闭。在激活状态,输出电压保持到新的数据字节被发送。
/Y0~/Y7:输出端(低电平有效)
VCC:电源正
GND:地
4.电路图
5.源程序代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define PCF8591 0x90 //PCF8591地址
bit write=0; //写24c02的标志
void delay() //延时4-5个微秒
{;;}
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
void start()//开始信号
{
SDA=1;delay(来自;SCL=1;delay();
SDA=0;
delay();
PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线而不需要额外硬件。器件地址、控制和数据通道通过两线双向I2C总线传输。
器件功能包括多路复用模拟量输入、片上跟踪和保持功能、8位模数转换和8位数模转换。最大转换速率取决于I2C总线的最高速率。
控制字:发送到PCF8591的第二个字节将被存储在控制寄存器,用于控制器件功能。控制寄存器的高板字节用于允许模拟输出,和将模拟输入编程为单端过查分输入。低半字节选择一个有高板字节定义的模拟输入通道。如果自动增量标志置1,每次A/D转换后通道号将自动增加。
如果自动增量模式是使用内部振荡器的应用中所需要的,那么控制字中模拟输出允许标志应置1。这要求内部振荡器持续运行,因此要防止振荡器启动延时的转换错误结果。模拟输出标志可以在其他时候复位以减少静态功耗。
A/D转换:A/D转换器采用逐次逼近转换技术。在A/D转换周期将来临时片上D/A抓换器和高增益比较器。一个A/D转换周期总是开始于发送一个有效读模式地址给PCF8591之后。A/D转换周期在应答时钟脉冲的后沿被触发,并在传输前一次转换结果时执行。一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片被转换为对应的8为二进制码。
delay();
}
void init() //初始化
{
SDA=1;
delay();
SCL=1;
delay();
}
uchar read_byte()
{
uchar i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位
sbit SCL=P1^5; //串行时钟输入端
sbit SDA=P3^6; //串行数据输入端
sbit LS138A=P2^0;//138译码器的3位控制数码管的
sbit LS138B=P2^1;
sbit LS138C=P2^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数显管字模
②利用E1、E2和E3可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。
③若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
④可用在8086的译码电路中,扩展内存。
引脚功能:
A~C:地址输入端
STA(G1):选通端
/STB(/G2A)、/STC(/G2B):选通端(低电平有效)
我实现的AD转换是使用通道0将滑动变阻器两端的电压
AIN0~AIN3:模拟信号输入端。
A0~A2:引脚地址端。
VDD、VSS:电源端。(2.5~6V)
SDA、SCL:I2C总线的数据线、时钟线。
OSC:外部时钟输入端,内部时钟输出端。
EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。
AGND:模拟信号地。
PCF8591芯片的使用
PCF8591芯片的使用
基于PCF8591的AD—DA的程序设计。本设计是通过PCF8591芯片选择通道1将滑动变阻器的电压记过A/D转换,有单片机读回,并在数码管显示,比且有这个数据再经过D/A转换成模拟电压驱动发光二极管。发光二极管的亮度与数码管显示的电压值相对。
1.PCF8591芯片
2.74HC573芯片
74HC573为八位制3态非反转透明锁存器,具有高性能硅门CMOS器件。管脚图如下:
1脚三态允许控制端低电平有效
D0~D7为数据输入端
/Q0~/Q7为数据输出端
3.74LS138芯片
74LS138为3线—8线译码器,引脚图如下:
工作原理:①当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=110时,则Y6输出端输出低电平信号。
}
void stop() //停止信号
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
void respons()//应答相当于一个智能的延时函数
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))
i++;
SCL=0;
AOUT:D/A转换输出端。
VREF:基准电源端。
地址:I2C总线系统中的每一片PCF8591通过发送有效地址到该器件来激活。该地址包括固定部分和可编程部分。可编程部分必须根据地址引脚A0、A1和A2来设置。在I2C总线协议中地址必须是起始条件后作为第一个字节发送。地址字节的最后一位是用于设置以后数据传输方向的读/写位。(见下图)