欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5529|回復: 0
收起左側

YL-40 PCF8591 AD轉換模塊單片機程序+電路資料下載

[復制鏈接]
ID:466105 發表于 2019-1-30 22:24 | 顯示全部樓層 |閱讀模式
0.png

PCF8591電路原理圖如下:
0.png

PCF8591 AD/DA芯片介紹

    PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件。PCF8591 具有 4 個模擬輸入、1 個模擬輸出和 1個串行I2C總線接口。PCF8591的 3個地址引腳A0, A1和A2 可用于硬件地址編程,允許在同個I2C 總線上接入8個PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的地址、控制和數據信號都是通過雙線雙向 I2C 總線以串行的方式進行傳輸。


單片機源程序如下:
  1. #include<reg52.h>    //包含單片機寄存器的頭文件
  2. #include <I2C.H>

  3. #define uchar unsigned char
  4. #define  PCF8591 0x90    //PCF8591 地址



  5. // 變量定義
  6. unsigned char AD_CHANNEL;
  7. unsigned long xdata  LedOut[8];
  8. unsigned int  D[32];
  9. sbit P2_0 = P2^0;
  10. sbit P2_1 = P2^1;
  11. sbit P2_2 = P2^2;
  12. sbit P2_3 = P2^3;

  13. unsigned char date;

  14. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
  15.                         0xf8,0x80,0x90};


  16.   // 函數申明

  17. void display();
  18. void delay(uchar i);
  19. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val);
  20. bit ISendByte(unsigned char sla,unsigned char c);
  21. unsigned char IRcvByte(unsigned char sla);
  22. void Initial_com(void);
  23. //******************************************************************/
  24. main()
  25. {  

  26.         Initial_com();
  27.         while(1)
  28.         {

  29.         /********以下AD-DA處理*************/  
  30.         
  31.             switch(AD_CHANNEL)
  32.                 {
  33.                         case 0: ISendByte(PCF8591,0x41);
  34.                              D[0]=IRcvByte(PCF8591);  //ADC0 模數轉換1      光敏電阻
  35.                                  break;  
  36.                         
  37.                         case 1: ISendByte(PCF8591,0x42);
  38.                              D[1]=IRcvByte(PCF8591);  //ADC1  模數轉換2          熱敏電阻
  39.                                  break;  
  40.                         
  41.                         case 2: ISendByte(PCF8591,0x43);
  42.                              D[2]=IRcvByte(PCF8591);  //ADC2        模數轉換3           懸空
  43.                                  break;  
  44.                         
  45.                         case 3: ISendByte(PCF8591,0x40);
  46.                              D[3]=IRcvByte(PCF8591);  //ADC3   模數轉換4           可調0-5v
  47.                                  break;  
  48.                         
  49.                         case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          數模轉換
  50.                              break;
  51.                  
  52.                 }

  53.             D[4]=D[3];  //把模擬輸入采樣的信號 通過數模轉換輸出
  54.                         
  55.            if(++AD_CHANNEL>4) AD_CHANNEL=0;
  56.         
  57.            /********以下將AD的值通過串口發送出去*************/
  58.          delay(200);        
  59.          SBUF=D[0];                              
  60.          delay(200);                  
  61.          SBUF=D[1];                           
  62.          delay(200);        
  63.          SBUF=D[2];
  64.          delay(200);
  65.          SBUF=D[3];
  66.          delay(200);
  67.          if(RI)
  68.         {
  69.                 date=SBUF;    //單片機接受
  70.                 SBUF=date;    //單片機發送
  71.                 RI=0;
  72.         }         
  73.    }
  74. }


  75. void delay(uchar i)
  76. {
  77.   uchar j,k;
  78.   for(j=i;j>0;j--)
  79.     for(k=125;k>0;k--);
  80. }

  81. /*******************************************************************
  82. DAC 變換, 轉化函數               
  83. *******************************************************************/
  84. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  85. {
  86.    Start_I2c();              //啟動總線
  87.    SendByte(sla);            //發送器件地址
  88.    if(ack==0)return(0);
  89.    SendByte(c);              //發送控制字節
  90.    if(ack==0)return(0);
  91.    SendByte(Val);            //發送DAC的數值  
  92.    if(ack==0)return(0);
  93.    Stop_I2c();               //結束總線
  94.    return(1);
  95. }

  96. /*******************************************************************
  97. ADC發送字節[命令]數據函數               
  98. *******************************************************************/
  99. bit ISendByte(unsigned char sla,unsigned char c)
  100. {
  101.    Start_I2c();              //啟動總線
  102.    SendByte(sla);            //發送器件地址
  103.    if(ack==0)return(0);
  104.    SendByte(c);              //發送數據
  105.    if(ack==0)return(0);
  106.    Stop_I2c();               //結束總線
  107.    return(1);
  108. }

  109. /*******************************************************************
  110. ADC讀字節數據函數               
  111. *******************************************************************/
  112. unsigned char IRcvByte(unsigned char sla)
  113. {  unsigned char c;

  114.    Start_I2c();          //啟動總線
  115.    SendByte(sla+1);      //發送器件地址
  116.    if(ack==0)return(0);
  117.    c=RcvByte();          //讀取數據0

  118.    Ack_I2c(1);           //發送非就答位
  119.    Stop_I2c();           //結束總線
  120.    return(c);
  121. }


  122. //*****串口初始化函數***********

  123. //******************************
  124. void Initial_com(void)
  125. {
  126. EA=1;        //開總中斷
  127. ES=1;        //允許串口中斷
  128. ET1=1;        //允許定時器T1的中斷
  129. TMOD=0x20;   //定時器T1,在方式2中斷產生波特率
  130. PCON=0x00;   //SMOD=0
  131. SCON=0x50;   // 方式1 由定時器控制
  132. TH1=0xfd;    //波特率設置為9600
  133. TL1=0xfd;
  134. TR1=1;       //開定時器T1運行控制位

  135. }
復制代碼

所有資料51hei提供下載:
【Realplay】 PCF8591模塊 ADDA轉換模塊 模數數模轉換送杜邦線.zip (625.18 KB, 下載次數: 71)


評分

參與人數 2黑幣 +65 收起 理由
zhengchong60 + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表