找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2565|回复: 1
收起左侧

关于如何用PCF8951更换ADC0832的问题,要求基本功能不变,望大神指点迷津

[复制链接]
回帖奖励 54 黑币 回复本帖可获得 6 黑币奖励! 每人限 1 次
ID:246189 发表于 2017-12-12 13:03 | 显示全部楼层 |阅读模式
IL9[5UBAW%TMA8FFR0[P`EV.png `ZJE2D$NLAQLNWPW_%EP5%0.png
  1. #include "ADC0832.h"
  2. unsigned char Read_ADC0832(unsigned char CH)
  3. {
  4.     unsigned char i,dis0,dis1;
  5.         unsigned int date;  
  6.         ADC_Clk=0;    //拉低时钟
  7.     ADC_DI=1;   //初始化
  8.     _nop_();
  9.         ADC_CS=0;    //芯片选定
  10.     _nop_();
  11.     ADC_Clk=1;   //拉高时钟
  12.     _nop_();

  13.         if(CH==0)      //通道选择
  14.     {
  15.       ADC_Clk=0;      //第一次拉低时钟
  16.       ADC_DI=1;     //通道0的第一位
  17.       _nop_();
  18.       ADC_Clk=1;    //拉高时钟
  19.           _nop_();
  20.       ADC_Clk=0;    //第二次拉低时钟,ADC0832 DI接受数据
  21.       ADC_DI=0;   //通道0的第二位
  22.       _nop_();
  23.       ADC_Clk=1;
  24.       _nop_();
  25.     }
  26.     else
  27.     {
  28.       ADC_Clk=0;
  29.       ADC_DI=1;      //通道1的第一位
  30.       _nop_();
  31.       ADC_Clk=1;
  32.       _nop_();
  33.       ADC_Clk=0;
  34.       ADC_DI=1;      //通道1的第二位
  35.       _nop_();
  36.       ADC_Clk=1;
  37.       _nop_();
  38.     }
  39.         ADC_Clk=0;  //第三次拉低时钟,此前DI两次赋值决定通道
  40.     ADC_DI=1;   //DI开始失效,拉高电平,便于DO数据传输

  41.     for(i= 0;i<8;i++)      //读取前8位的值
  42.     {
  43.        _nop_();
  44.        dis0<<= 1;
  45.        ADC_Clk=1;   
  46.        _nop_();
  47.        ADC_Clk=0;
  48.        if (ADC_DO)
  49.           dis0|=0x01;   
  50.       else
  51.           dis0|=0x00;
  52.     }
  53.     for (i=0;i<8;i++)      //读取后8位的值
  54.     {
  55.        dis1>>= 1;
  56.        if (ADC_DO)
  57.         dis1|= 0x80;
  58.        else
  59.         dis1|= 0x00;
  60.        _nop_();
  61.        ADC_Clk=1;
  62.        _nop_();
  63.        ADC_Clk=0;
  64.     }
  65.         if(dis0==dis1) //两次结束数据比较,若相等
  66.           date=dis0;    //则赋值给dat   
  67.     _nop_();
  68.     ADC_CS=1;  //释暸ADC0832
  69.     ADC_DO=1;  //拉高输出端,暯便下次通道选择DI端有效
  70.     ADC_Clk=1;  //拉高时钟

  71.     return date;

复制代码


回复

使用道具 举报

ID:111634 发表于 2017-12-14 21:09 | 显示全部楼层

回帖奖励 +6 黑币

本帖最后由 zl2168 于 2017-12-14 21:12 编辑

实例85  PCF8591 I2C串行A-D(1602显示)
Proteus仿真一下,确认有效。
实例85 PCF8591 I2C串行A-D.rar (57.96 KB, 下载次数: 19)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表