找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3493|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于如何用PCF8951更換ADC0832的問題,要求基本功能不變,望大神指點(diǎn)迷津

[復(fù)制鏈接]
回帖獎勵 54 黑幣 回復(fù)本帖可獲得 6 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:246189 發(fā)表于 2017-12-12 13:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

  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接受數(shù)據(jù)
  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數(shù)據(jù)傳輸

  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) //兩次結(jié)束數(shù)據(jù)比較,若相等
  66.           date=dis0;    //則賦值給dat   
  67.     _nop_();
  68.     ADC_CS=1;  //釋暸ADC0832
  69.     ADC_DO=1;  //拉高輸出端,暯便下次通道選擇DI端有效
  70.     ADC_Clk=1;  //拉高時鐘

  71.     return date;

復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:111634 發(fā)表于 2017-12-14 21:09 | 只看該作者

回帖獎勵 +6 黑幣

本帖最后由 zl2168 于 2017-12-14 21:12 編輯

實(shí)例85  PCF8591 I2C串行A-D(1602顯示)
Proteus仿真一下,確認(rèn)有效。
實(shí)例85 PCF8591 I2C串行A-D.rar (57.96 KB, 下載次數(shù): 19)

實(shí)例86 DAC0832輸出連續(xù)鋸齒波.rar (44.73 KB, 下載次數(shù): 6)


以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1書中電路和程序設(shè)計有詳細(xì)說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表