色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 使用PCF8591進行ADDA轉換

          使用PCF8591進行ADDA轉換

          作者: 時間:2016-11-27 來源:網絡 收藏
          1.電路圖


          本文引用地址:http://cafeforensic.com/article/201611/322104.htm

          2.AD轉換

          //AD轉換,P0口連接J12(數(shù)碼管)
          //功能:通過轉動滑動變阻器改變模擬輸入
          //通過AD轉換,把數(shù)值用數(shù)碼管顯示
          #include 
          #define uchar unsigned char
          #define uint unsigned int
          #define PCF8591 0x90 //PCF8591 地址
          bit write=0;  //寫24c02的標志
          sbit SCL=P2^1;        //串行時鐘輸入端
          sbit SDA=P2^0;  //串行數(shù)據輸入端
          sbit LS138A=P2^2;//138譯碼器的3位 控制數(shù)碼管的 
          sbit LS138B=P2^3;
          sbit LS138C=P2^4;
          uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};      //數(shù)顯管字模
          void delay()   //延時4-5個微秒
          {;;}
          void delay_1ms(uint z)
          {
          uint x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--)
          ;
          }
          void start()//開始信號
          {
          SDA=1;
          delay();
          SCL=1;
          delay();
          SDA=0;
          delay();
          }
          void stop()      //停止信號
          {
          SDA=0;
          delay();
          SCL=1;
          delay();
          SDA=1;
          delay();
          }
          void respons()//應答 相當于一個智能的延時函數(shù)
          {
          uchar i;
          SCL=1;
          delay();
          while((SDA==1)&&(i<250))
          i++;
          SCL=0;
          delay();
          }
          void init()      //初始化
          {
          SDA=1;
          delay();
          SCL=1;
          delay();    
          }
          uchar read_byte()
          {
          uchar i,k;
          SCL=0;
          delay();
          SDA=1;
          delay();
          for(i=0;i<8;i++)
          {
          SCL=1;
          delay();
          k=(k<<1)|SDA;//先左移一位,再在最低位接受當前位
          SCL=0;
          delay();
          }
          return k;
          }
          void write_byte(uchar date)       //寫一字節(jié)數(shù)據
          {
          uchar i,temp;
          temp=date;
          for(i=0;i<8;i++)
          {
          temp=temp<<1; //左移一位 移出的一位在CY中
          SCL=0;                      //只有在scl=0時sda能變化值
          delay();
          SDA=CY;
          delay();
          SCL=1;
          delay();            
          }   
          SCL=0;
          delay();
          SDA=1;
          delay();
          }
          void write_add(uchar control,uchar date)
          {
          start();
          write_byte(PCF8591);        //10010000 前四位固定 接下來三位全部被接地了 所以都是0 最后一位是寫 所以為低電平
          respons();
          write_byte(control);
          respons();
          write_byte(date);
          respons();
          stop();
          }
          uchar read_add(uchar control)
          {
          uchar date;
          start();
          write_byte(PCF8591);
          respons();
          write_byte(control);
          respons();
          start();
          write_byte(PCF8591+1);      //把最后一位變成1,讀
          respons();
          date=read_byte();
          stop();
          return date;
          }				   
          				
                      
                          
          			
          							
          上一頁 1 2 下一頁

          關鍵詞: PCF8591ADDA轉

          評論


          技術專區(qū)

          關閉