ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:39.15KB ,
资源ID:7324306      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7324306.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PCF8591模数与数模转换实验.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

PCF8591模数与数模转换实验.docx

1、PCF8591模数与数模转换实验源程序:#include #include #define uint unsigned int#define uchar unsigned char#define Delay4us() _nop_();_nop_();_nop_();_nop_();sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;sbit SCL = P10;sbit SDA = P11;uchar Recv_Buffer4;uint Voltage=0,0,0,0;bit bdata IIC_ERROR;uchar LCD_Line_

2、1 = 1- . V 2- . V;uchar LCD_Line_2 = 3- . V 4- . V;void Delay(uint ms) uchar i; while(ms-) for(i=0;i120;i+)Delay4us(); 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_

3、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_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

4、_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 | 0x80); void LCD_Display_A_Line(uchar Line_Addr,uchar s) uchar i; LCD_Set_Position(Line_Addr); for(i=0;i16;i+) LCD_Wr

5、ite_Data(si); / 将模数转换后得到的值分解存入缓存void Convert_To_Voltage(uchar val) uchar Tmp; /最大值为255,对应5V,255/5=51 Voltage2 = val/51+0; /整数部分 Tmp = val%51*10; /第一位小数 Voltage1 = Tmp/51+0; Tmp = Tmp%51*10; Voltage0 = Tmp/51+0;void IIC_Start() SDA = 1; SCL = 1; Delay4us(); SDA = 0; Delay4us(); SCL = 0;void IIC_Stop(

6、) 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 IIC_SendByte(uchar wd) uchar i; for(i=0;i8;i+) SDA=(bit)(wd&0x80); _nop_(); _nop_(); SCL = 1; Delay4us()

7、; 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(); SCL = 0; Delay4us(); SCL = 0; Delay4us(); return rd;/连续读入4路通道的A/D转换结果并保存到Recv_Buffervoid A

8、DC_PCF8591(uchar CtrlByte) uchar i; IIC_Start();/PCF8591地址定义1001*,高四位固定1001/第3,2,1位对应A2,A1,A0第0位为读写标志位,1为读0为写/下面代码中0x90,0x91分别为10010000,10010001 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;

9、IIC_ReceiveByte(); Slave_ACK(); for(i=0;i4;i+) Recv_Bufferi = IIC_ReceiveByte(); Slave_ACK(); Slave_NOACK(); IIC_Stop();void DAC_PCF8591(uchar CtrlByte,uchar dat) IIC_Start(); Delay4us(); IIC_SendByte(0x90);/发送地址字节 if(IIC_ERROR = 1) return; IIC_SendByte(CtrlByte);/发送控制字节 if(IIC_ERROR = 1) return; II

10、C_SendByte(dat);/发送待转换为模拟量的数值 if(IIC_ERROR = 1) return; IIC_Stop(); Delay4us(); Delay4us();/*PCF8591控制字节定义:0*0*,第3,7位固定为0第6位取0时为模拟输入,取1时为模拟输出第4,5位为00表示4路单端的模拟输入第二位为自动递增标志,取1时自动递增第0,1位取值为00,01,10,11分别表示通道0,1,2,3调用ADC_PCF8591时参数为00000100,即0x04调用DAC_PCF8591时参数为01000000,即0x40*/void main() LCD_Initialise

11、(); while(1) ADC_PCF8591(0x04); Convert_To_Voltage(Recv_Buffer0); LCD_Line_12=Voltage2; LCD_Line_14=Voltage1; LCD_Line_15=Voltage0; Convert_To_Voltage(Recv_Buffer1); LCD_Line_110=Voltage2; LCD_Line_112=Voltage1; LCD_Line_113=Voltage0; Convert_To_Voltage(Recv_Buffer2); LCD_Line_22=Voltage2; LCD_Line_24=Voltage1; LCD_Line_25=Voltage0; Convert_To_Voltage(Recv_Buffer3); LCD_Line_210=Voltage2; LCD_Line_212=Voltage1; LCD_Line_213=Voltage0; LCD_Display_A_Line(0x00, LCD_Line_1); LCD_Display_A_Line(0x40, LCD_Line_2); DAC_PCF8591(0x40,Recv_Buffer0);

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

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