標(biāo)題: 關(guān)于如何用PCF8951更換ADC0832的問題,要求基本功能不變,望大神指點(diǎn)迷津 [打印本頁]

作者: 木君哥哥    時(shí)間: 2017-12-12 13:03
標(biāo)題: 關(guān)于如何用PCF8951更換ADC0832的問題,要求基本功能不變,望大神指點(diǎn)迷津

  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;    //拉低時(shí)鐘
  7.     ADC_DI=1;   //初始化
  8.     _nop_();
  9.         ADC_CS=0;    //芯片選定
  10.     _nop_();
  11.     ADC_Clk=1;   //拉高時(shí)鐘
  12.     _nop_();

  13.         if(CH==0)      //通道選擇
  14.     {
  15.       ADC_Clk=0;      //第一次拉低時(shí)鐘
  16.       ADC_DI=1;     //通道0的第一位
  17.       _nop_();
  18.       ADC_Clk=1;    //拉高時(shí)鐘
  19.           _nop_();
  20.       ADC_Clk=0;    //第二次拉低時(shí)鐘,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;  //第三次拉低時(shí)鐘,此前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;  //拉高時(shí)鐘

  71.     return date;

復(fù)制代碼



作者: zl2168    時(shí)間: 2017-12-14 21:09
本帖最后由 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è)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1書中電路和程序設(shè)計(jì)有詳細(xì)說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1