一路AD轉換
2019-11-11 02:15:33
供稿:網友
 
/*-----------------------------------------------  名稱:IIC協議 PCF8591 AD/DA轉換  論壇:www.doflye.net  編寫:shifang  修改:無  內容:使用4路AD中的1路檢測外部模擬量輸入------------------------------------------------*/  #include <reg52.h>                #include "i2c.h"#include "delay.h"#include "display.h"#define AddWr 0x90   //寫數據地址 #define AddRd 0x91   //讀數據地址extern bit ack;unsigned char ReadADC(unsigned char Chl);bit WriteDAC(unsigned char dat);/*------------------------------------------------              主程序------------------------------------------------*/main(){ unsigned char num=0; Init_Timer0();while (1)         //主循環  { num=ReadADC(0); TempData[0]=dofly_DuanMa[num/51] + 0x80; //TempData[1]=0x80;     TempData[1]=dofly_DuanMa[(num%51)/10]; TempData[2]=dofly_DuanMa[(num%51)%10]; //主循環中添加其他需要一直工作的程序 DelayMs(100); num=ReadADC(3); TempData[4]=dofly_DuanMa[num/51] + 0x80; //TempData[1]=0x80;     TempData[5]=dofly_DuanMa[(num%51)/10]; TempData[6]=dofly_DuanMa[(num%51)%10]; //主循環中添加其他需要一直工作的程序 DelayMs(100);  }}/*------------------------------------------------             讀AD轉值程序輸入參數 Chl 表示需要轉換的通道,范圍從0-3返回值范圍0-255------------------------------------------------*/unsigned char ReadADC(unsigned char Chl) {   unsigned char Val;   Start_I2c();               //啟動總線   SendByte(AddWr);             //發送器件地址     if(ack==0)return(0);   SendByte(0x40|Chl);            //發送器件子地址     if(ack==0)return(0);   Start_I2c();   SendByte(AddWr+1);      if(ack==0)return(0);   Val=RcvByte();   NoAck_I2c();                 //發送非應位   Stop_I2c();                  //結束總線  return(Val); }/*------------------------------------------------               寫入DA轉換數值輸入參數:dat 表示需要轉換的DA數值,范圍是0-255------------------------------------------------*//*bit WriteDAC(unsigned char dat){   Start_I2c();               //啟動總線   SendByte(AddWr);             //發送器件地址     if(ack==0)return(0);   SendByte(0x40);            //發送器件子地址     if(ack==0)return(0);   SendByte(dat);             //發送數據     if(ack==0)return(0);   Stop_I2c();  }*/