找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 5483|回復(fù): 0
收起左側(cè)

YL-40 PCF8591 AD轉(zhuǎn)換模塊單片機(jī)程序+電路資料下載

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

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

PCF8591 AD/DA芯片介紹

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


單片機(jī)源程序如下:
  1. #include<reg52.h>    //包含單片機(jī)寄存器的頭文件
  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.   // 函數(shù)申明

  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 模數(shù)轉(zhuǎn)換1      光敏電阻
  35.                                  break;  
  36.                         
  37.                         case 1: ISendByte(PCF8591,0x42);
  38.                              D[1]=IRcvByte(PCF8591);  //ADC1  模數(shù)轉(zhuǎn)換2          熱敏電阻
  39.                                  break;  
  40.                         
  41.                         case 2: ISendByte(PCF8591,0x43);
  42.                              D[2]=IRcvByte(PCF8591);  //ADC2        模數(shù)轉(zhuǎn)換3           懸空
  43.                                  break;  
  44.                         
  45.                         case 3: ISendByte(PCF8591,0x40);
  46.                              D[3]=IRcvByte(PCF8591);  //ADC3   模數(shù)轉(zhuǎn)換4           可調(diào)0-5v
  47.                                  break;  
  48.                         
  49.                         case 4: DACconversion(PCF8591,0x40, D[4]); //DAC          數(shù)模轉(zhuǎn)換
  50.                              break;
  51.                  
  52.                 }

  53.             D[4]=D[3];  //把模擬輸入采樣的信號(hào) 通過數(shù)模轉(zhuǎn)換輸出
  54.                         
  55.            if(++AD_CHANNEL>4) AD_CHANNEL=0;
  56.         
  57.            /********以下將AD的值通過串口發(fā)送出去*************/
  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;    //單片機(jī)接受
  70.                 SBUF=date;    //單片機(jī)發(fā)送
  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 變換, 轉(zhuǎn)化函數(shù)               
  83. *******************************************************************/
  84. bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  85. {
  86.    Start_I2c();              //啟動(dòng)總線
  87.    SendByte(sla);            //發(fā)送器件地址
  88.    if(ack==0)return(0);
  89.    SendByte(c);              //發(fā)送控制字節(jié)
  90.    if(ack==0)return(0);
  91.    SendByte(Val);            //發(fā)送DAC的數(shù)值  
  92.    if(ack==0)return(0);
  93.    Stop_I2c();               //結(jié)束總線
  94.    return(1);
  95. }

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

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

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

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


  122. //*****串口初始化函數(shù)***********

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

  135. }
復(fù)制代碼

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


評(píng)分

參與人數(shù) 2黑幣 +65 收起 理由
zhengchong60 + 15 很給力!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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