欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    51单片机课程设计AD转换.docx

    • 资源ID:14107914       资源大小:287.40KB        全文页数:21页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机课程设计AD转换.docx

    1、51单片机课程设计AD转换51-单片机课程设计题 目:用PCF8591P芯片对电位器上的电压进行AD采样,将采到的数据用1602LCD进行显示。 姓 名: 学 号: 学 院: 专 业: 指导教师: 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 就可

    2、以实现。 I2C 总线是Philips (飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可靠性高等优点。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引脚功

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

    4、送的第一字节。图2 地址选择字格式描述D0:读写控制位,对转换器件进行读操作时为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进行写读操作后便立即启动 A/D转换,并读出A/D 转换结果

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

    7、分别对应于前一个数据读取期间所采样的模拟电压。A/D 转换结束后,先发送一个非应答信号位A 再发送结束信号位P。 灰底位由主机发出,白底位是由PCF8591 产生。 上电复位后控制字节状态为00H ,在 A/D转换时须设置控制字,即须在读操作之前进行控制字节的写入操作。逻辑操作波形时序图如图5所示。图5 A/D转换逻辑操作波形时序图4、A/D转换程序设计流程如下图6所示图65、1602LCD主要技术参数:显示容量:162个字符,芯片工作电压:4.55.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.954.35(WH)mm。5.1引脚功能说明1602LCD采用

    8、标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图7编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极图7引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电

    9、平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。5.2 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如图8序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式000

    10、00001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容图81602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向

    11、,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指

    12、令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。读操作时序写操作时序5.3 1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置6、仿真原理图如下所示7、C语言程序#include#include#define uchar

    13、unsigned char#define uint unsigned int#define Delay4us()_nop_();_nop_();_nop_();_nop_();sbit LCD_RS=P26;sbit LCD_RW=P25;sbit LCD_EN=P27;sbit SCL=P20; /I2C时钟引脚sbit SDA=P21; /I2C数据输入输出引脚uchar Recv_Buffer4; /数据接收缓冲uint Voltage=0,0,0,0; /数据分解为电压x.xxbit bdata IIC_ERROR; /I2C错误标志位uchar LCD_Line_1= . V ;/延

    14、时void delay(int ms)uchar i;while(ms-) for(i=0;i250;i+) Delay4us();/LCD忙检测bit LCD_Busy_Check()bit 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;Del

    15、ay4us();LCD_EN=1;Delay4us();LCD_EN=0;/ 写数据void LCD_Write_Data(uchar dat)while(LCD_Busy_Check();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_Wri

    16、te_Command(0x01);delay(5);/设置显示位置void LCD_Set_Position(uchar pos)LCD_Write_Command(pos|0x80);/显示一行void LCD_Display_A_Line(uchar Line_Addr,uchar s)uchar i;LCD_Set_Position(Line_Addr);for(i=0;i16;i+)LCD_Write_Data(si);/ 将模数转换后得到的值分解存入缓存void Convert_To_Voltage(uchar val)uchar Tmp; /最大值为255,对应5V,255/5=5

    17、1Voltage2=val/51+0; /整数部分Tmp=val%51*10; / 第一位小数Voltage1=Tmp/51+0;Tmp=Tmp%51*10;Voltage0=Tmp/51+0;/*函数名称: iic_start()函数功能: 启动I2C总线子程序时钟保持高,数据线从高到低一次跳变,I2C通信开始*/void iic_start(void) SDA = 1; SCL = 1; Delay4us(); / 延时5us SDA = 0; Delay4us(); SCL = 0;/*函数名称: iic_stop()函数功能: 停止I2C总线数据传送子程序时钟保持高,数据线从低到高一次

    18、跳变,I2C通信停止*/void iic_stop(void) SDA = 0; SCL = 1; Delay4us(); SDA = 1; Delay4us(); SCL = 0;/*函数名称: iicInit_()函数功能: 初始化I2C总线子程序*/void iicInit(void) SCL = 0; iic_stop();/*函数名称: slave_ACK函数功能: 从机发送应答位子程序*/void slave_ACK(void) SDA = 0; SCL = 1; Delay4us(); SCL = 0; SDA = 1;/*函数名称: slave_NOACK函数功能: 从机发送非

    19、应答位子程序,迫使数据传输过程结束*/void slave_NOACK(void) SDA = 1; SCL = 1; Delay4us(); SDA = 0; SCL = 0; SDA = 0;/*函数名称: check_ACK函数功能: 主机应答位检查子程序,迫使数据传输过程结束*/void check_ACK(void) SDA = 1; /置成输入 SCL = 1; F0 = 0; Delay4us(); if (SDA = 1) /若SDA=1表明非应答 F0 = 1; /置位非应答标志F0 SCL = 0;/*函数名称: IICSendByte入口参数: indata函数功能: 发

    20、送一个字节*/void IICSendByte(unsigned char indata) unsigned char n = 8; /发送一字节数据,共八bit while (n-) SDA = (bit)(indata &0x80); SCL = 1; Delay4us(); SCL = 0; indata = indata 1; /数据左移一位 /*函数名称: IICreceiveByte返回接收的数据 tdata函数功能: 接收一字节子程序*/unsigned char IICreceiveByte(void) unsigned char n = 8; /读取一字节数据,共八bit u

    21、nsigned char tdata = 0; while (n-) SDA = 1; SCL = 1; tdata = tdata 1; /左移一位 if (SDA = 1) tdata = tdata | 0x01; /若接收到的位为1,则数据的最后一位置1 else tdata = tdata &0xfe; /否则数据的最后一位置0 SCL = 0; return (tdata);/*函数名称: ADC_PCF8591函数功能: A/D转换,结果存入receivebuf*/void ADC_PCF8591(unsigned char controlbyte) unsigned char

    22、i = 0; iic_start(); IICSendByte(0x90); /控制字0x90 check_ACK(); IICSendByte(controlbyte); /通道控制字 check_ACK(); iic_start(); /重新发送开始命令 IICSendByte(0x91); /控制字0x91 check_ACK(); IICreceiveByte(); /空读一次 slave_ACK(); /收到一个字节后发送一个应答位 while (i 3) /采集0,1,2通道 Recv_Bufferi+ = IICreceiveByte(); slave_ACK(); Recv_B

    23、uffer3 = IICreceiveByte(); /采集第3通道 slave_NOACK(); /收到最后一个字节后发送一个非应答位 iic_stop();/主程序void main()LCD_Initialise();while(1)ADC_PCF8591(0x04);Convert_To_Voltage(Recv_Buffer0);LCD_Line_12=Voltage2;LCD_Line_14=Voltage1;LCD_Line_15=Voltage0;LCD_Display_A_Line(0x00, LCD_Line_1);8、结语 在这次单片机课设中,通过自己动手查阅资料,不仅知道了芯片PCF8591和LCD1602工作原理、各引脚的功能等,还巩固了C语言程序的编写,对51单片机也有了更深的理解,能熟练的运用Keil等软件。期间遇到过LCD显示数据会抖动的问题,检查了相关的IIC总线程序,延长了延时程序,修改了LCD查忙时程序与AD转换程序中的控制字写入检查模块,在主程序中增加了一个模块:若控制字写入有问题则重新启动IIC总线重新开始转换电压与数据传送。问题解决!9、参考文献 单片机原理及应用(c语言版) 周国运


    注意事项

    本文(51单片机课程设计AD转换.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开