基于51单片机用PCF8591进行ADDA转换用1602LCD显示的电流采样_第1页
基于51单片机用PCF8591进行ADDA转换用1602LCD显示的电流采样_第2页
基于51单片机用PCF8591进行ADDA转换用1602LCD显示的电流采样_第3页
基于51单片机用PCF8591进行ADDA转换用1602LCD显示的电流采样_第4页
基于51单片机用PCF8591进行ADDA转换用1602LCD显示的电流采样_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大学学院本科生课程设计题 目: 可编程序控制器实训姓 名:学 号:系 别:专 业:年 级:指导教师:目录1、PCF8591概述 32、芯片介绍 33、PCF8591的 A/D 转换 44、A/D 转换程序设计流程 55、1602LCD主要技术参数 76、Proteus 仿真原理图 107、程序代码 108、结语 179、参考文献 171、PCF8591 概述PCF8591 是一种具有 I2C 总线接口的 8 位 A/D D/A 转换芯片,在与 CPU 的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 I2C 总线是 Philips (飞利浦) 公司推出的串行总线, 它与传统的

2、通信方式相比具有读写方 便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可 靠性高等优点。2、芯片介绍2.1 部结构及引脚功能描述PCF8591 为单一电源供电( 2.5 6 V)典型值为 5 V,CMOS工 艺 PCF8591 有 4 路 8 位 A/D 输入,属逐次比较型,含采样保持电路; 1 路 8 位 D/A 输出, 含有 DAC 的数据寄存器 A/D D/A 的最大转换速率约为 11 kHz ,但是转换的基 准电源需由外部提供 PCF8591 的引脚功能如图 1 所示图 1 PCF8591 引脚功能2.2 片可编程功能设置在 PCF8591 部的可编程功能控

3、制字有两个,一个为地址选择字,另一个为转 换控制字 PCF8591 采用典型的 I2C 总线接口的器件寻址方法,即总线地址由器 件地址引脚地址和方向位组成 Philips (飞利浦)公司规定 A/D 器件高四位地 址为 1001 ,低三位地址为引脚地址 A0A1A2,由硬件电路决定,地址选择字格式 具体描述如表 2 所示 因此 I2C 系统中最多可接 23=8 个具有总线接口的 A/D 器件 地址的最后一位为方向位 R/W,当主控器对 A/D 器件进行读操作时为 1,进行写操作时为 0 总线。操作时, 由器件地址引脚地址和方向位组成的从地址为主控器发送的第一字节图 2 地址选择字格式描述D0:

4、读写控制位, 对转换器件进行读操作时为 1 ,进行写操作时为 0。D1,D2,D3: 引脚硬件地址设置位,由硬件电路设定该 PCF8591的物理地址。 D7,D6,D5,D4: 器件地址位固定为 1001.PCF8591的转换控制字存放在控制寄存器中,用于实现 器件的各种功能 总线操作时为主控器发送的第二字节 转换控制字的格式功能 具体描述如图 3 所示图 3 转换控制字格式描述D0,D1:通道选择位。00 :通道 0; 01:通道 1 ; 10:通道 2; 11:通道 3。 D2:自动增量允许位 ,为 1 时,每对一个通道转换后自动切换到下一通道进行 转换,为 0 时不自动进行通道转换, 可

5、通过软件修改进行通道转换 D3:特征位, 固定位 0。 D4,D5:模拟量输入方式选择位 。00:输入方式 0 ,四路单端输入; 01 :输入方式 1 ,三路差分输入; 10 :输入方式 2,二路单端输入,一路差分 输入; 11 :输入方式 3 ,两路差分输入。 D6:模拟输出允许位, A/D 转换时设 置为 (地址选择字 D0 位此时设置为 1 ),D/A 转换时设置为 1(地址选择字 位 此时设置为 )。 D7:特征位,固定为 0。3、PCF8591的 A/D 转换PCF8591的 A/D 转换为逐次比较型,在 A/D 转换周期中借用 DAC及高增益比 较器 对 PCF8591进行写读操作

6、 (R/W)后便立即启动 A/D 转换,并读出 A/D 转换 结果 在每个应答信号的后沿触发转换周期,采样模拟电压并读出前一次转换后 的结果。A/D 转换中,一旦 A/D 采样周期被触发,所选择通道的采样电压便保存在采样, 保持电路中,并转换成 8 位二进制码( 00四路单端输入)或二进制补码( 01 三 鹿差分输入)存放在 ADC数据寄存器 中等待器件读出。如果控制字节中自动增量 选择位置 1 ,则一次 A/D 转换完毕后自动选择下一通道。读周期中读出的第一 个字节为前一个周期的转换结果 。上电复位后读出的第一字节为 80H。 PCF8591的 A/D 转换亦使用的是 I2C 总线的读方式操

7、作完成的 。其数据操作格 式如图 4 所示。图 4 A/D 转换数据操作格式其中 data0datan 为 A/D 的转换结果,分别对应于前一个数据读取期间所采样 的模拟电压。A/D 转换结束后,先发送一个非应答信号位 A 再发送结束信号位 P 灰底位由主机发出,白底位是由 PCF8591 产生。 上电复位后控制字节状态为 00H ,在 A/D 转换时须设置控制字,即须在读操作之前进行控制字节的写入操 作。逻辑操作波形时序图如图 5 所示。图 5 A/D 转换逻辑操作波形时序图4、A/D 转换程序设计流程如下图 6 所示图65、1602LCD主要技术参数:显示容量 :16 2个字符,芯片工作电

8、压 :4.5 5.5V,工作电流 :2.0mA(5.0V) , 模块最佳工作电压 :5.0V ,字符尺寸 :2.95 4.35(WH)mm。5.1 引脚功能说明1602LCD采用标准的 14脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如图 7编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/ 命令选择12D5数据5R/W读/ 写选择13D6数据6使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极图7引脚接口说明表第1脚: VSS为地电源。第 2脚: VDD接 5V正电源。第 3脚

9、: VL为液晶显示 器对比度调整端, 接正电源时对比度最弱, 接地时对比度最高, 对比度过高时会 产生“鬼影”,使用时可以通过一个 10K的电位器调整对比度。第 4 脚:RS为 寄存器选择,高电平时选择数据寄存器、 低电平时选择指令寄存器。 第5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS为低电平 R/W为高电平时可以读 忙信号,当 RS为高电平 R/W为低电平时可以写入数据。第 6 脚:E端为使能端, 当 E 端由高电平跳变成低电平时, 液晶模块执行命令。 第 714 脚:D0 D7为 8 位双向数据线。

10、第 15 脚:背光源正极。第 16 脚:背光源负极。5.2 1602LCD 的指令说明及时序1602液晶模块部的控制器共有 11 条控制指令,如图 8序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开 / 关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到 CGRAM或DDRA)M10要写的数据容11从 CGRAM或

11、 DDRAM读数11读出的数据容图81602 液晶模块的读写操作、 屏幕和光标的操作都是通过指令编程来实现的。 (说 明:1为高电平、 0为低电平)指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。指令 2:光标复位,光标返回到地址 00H。指令 3:光标和显示模式设置 I/D : 光标移动方向,高电平右移,低电平左移 S: 屏幕上所有文字是否左移或者右移。 高电平表示有效,低电平则无效。指令 4:显示开关控制。 D:控制整体显示的 开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平 表示有光标,低电平表示无光标 B :控制光标是否闪烁,高电平闪烁,低电平不

12、 闪烁。指令 5:光标或显示移位 S/C :高电平时移动显示的文字,低电平时移动 光标。指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N: 低电平时为单行显示, 高电平时双行显示 F: 低电平时显示 5x7 的点阵字符, 高 电平时显示 5x10的点阵字符。指令 7:字符发生器 RAM地址设置。指令 8:DDRAM 地址设置。指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此 时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令 11:读数据。读操作时序写操作时序5.3 1602LCD 的一般初始化(复位)过程延时 15mS写指

13、令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信号)以后每次写指令、读 / 写数据操作均需要检测忙信号 写指令 38H:显示模式设置写指令 08H:显示关闭写指令 01H:显示清屏写指令 06H:显示光标移动设置写指令 0CH:显示开及光标设置6、仿真原理图如下所示时钟引脚 数据输入输出引脚 数据接收缓冲 数据分解为电压 x.xx错误标志位7、C语言程序#include#include #define uchar unsigned char#define uint unsigned int#define Delay4us()_nop_(

14、);_nop_();_nop_();_nop_(); sbit LCD_RS=P26;sbit LCD_RW=P25;sbit LCD_EN=P27;sbit SCL=P20;/I2Csbit SDA=P21;/I2Cuchar Recv_Buffer4;/uint Voltage=0,0,0,0;/bit bdata IIC_ERROR; /I2C uchar LCD_Line_1= . V ;/ 延时 void delay(int ms)uchar i;while(ms-) for(i=0;i250;i+) Delay4us();/LCD 忙检测bit LCD_Busy_Check()bi

15、t Result;LCD_RS=0;LCD_RW=1;LCD_EN=1;Delay4us();Result=(bit)(P0&0x80); LCD_EN=0;return Result;/ 写指令void LCD_Write_Command(uchar cmd) while(LCD_Busy_Check();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;Delay4us(); LCD_EN=1;Delay4us();LCD_EN=0;/ 写数据void LCD_Write_Data(uchar dat) while(LCD_Busy_Che

16、ck();LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delay4us(); LCD_EN=1;Delay4us();LCD_EN=0;/ 初始化void LCD_Initialise()LCD_Write_Command(0x38);delay(5);LCD_Write_Command(0x0c);delay(5);LCD_Write_Command(0x06);delay(5);LCD_Write_Command(0x01);delay(5); / 设置显示位置void LCD_Set_Position(uchar pos)LCD_Write_Command(pos

17、|0x80);/ 显示一行void LCD_Display_A_Line(uchar Line_Addr,uchar s) uchar i;/ 将模数转换后得到的值分解存入缓存最大值为 255, 对应 5V,255/5=51整数部分第一位小数LCD_Set_Position(Line_Addr); for(i=0;i16;i+)LCD_Write_Data(si); void Convert_To_Voltage(uchar val)uchar Tmp; / Voltage2=val/51+0;/Tmp=val%51*10;/Voltage1=Tmp/51+0;Tmp=Tmp%51*10;Vo

18、ltage0=Tmp/51+0;/ 启动 I2C 总线void IIC_Start()SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;/ 停止 I2C 总线void IIC_Stop()SDA=0;SCL=1;Delay4us();SDA=1; Delay4us();SCL=0; / 从机发送应答位void Slave_ACK()SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;/ 从机发送非应答位void Slave_NOACK()SDA=1;SCL=1;Delay4us();SCL=0;SDA=0;/ 发送一字节void II

19、C_SendByte(uchar wd)uchar i;for(i=0;i8;i+) /循环移入 8 位SDA=(bit)(wd&0x80);_nop_();_nop_();SCL=1;Delay4us();SCL=0;wd=1; Delay4us();SDA=1;/ 释放总线并准备读取应答SCL=1;Delay4us();IIC_ERROR=SDA;/IIC_ERROR=1 表示无应答SCL=0;Delay4us();/ 接收一字节uchar IIC_ReceiveByte()uchar i,rd=0x00;for(i=0;i8;i+)SCL=1;rd=1;rd|=SDA;Delay4us(

20、);SCL=0;Delay4us();SCL=0;Delay4us(); return rd;/ 连续读入 4 路通道的 A/D转换结果并保存到 Recv_Buffer void ADC_PCF8591(uchar CtrlByte)uchar i;IIC_Start();IIC_SendByte(0x90); /发送写地址if(IIC_ERROR=1)return;/ IIC_SendByte(CtrlByte);/发送控制字节/if(IIC_ERROR=1)return;IIC_Start(); /重新发送开始命令IIC_SendByte(0x91); /发送读地址if(IIC_ERROR=1)return;IIC_ReceiveByte(); /空读一次 , 调整读顺序Slave_ACK(); /收到一字节后发送一个应答位for(i=0;i4;i+)Recv_Bufferi+=IIC_ReceiveByte();Slave_ACK();Slave_NOACK();IIC_Stop();/收到一个字节后发送一个应答位/收到一个字节后发送一个非应答位/ 向 PCF8591发送 1 字节进行 AD转换/ 主程序void main()LCD_Initialise();while(1)ADC_PCF8591(0x04);Conver

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论