久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: PCF8591 ADC電壓采樣 [打印本頁]

作者: apin123    時間: 2015-7-26 11:35
標題: PCF8591 ADC電壓采樣
  1. -------------------------------------------------------
  2. 文件名: IIC_drv.c
  3. 描述: IIC通信驅動c文件
  4. 作者:
  5. =========================================================
  6. -----------------------------------------------------------------------------------------------------------*/
  7. #include "IIC_drv.h"

  8. /**********************************************
  9. 功能:
  10.     起始信號
  11. 輸入參數:
  12.     無
  13. 輸出參數:
  14.     無
  15. 返回值:
  16. **********************************************/
  17. static void Start(void)
  18. {
  19.         Sda = 1;
  20.         Scl = 1;
  21.         Sda = 0;
  22. }

  23. /**********************************************
  24. 功能:
  25.     停止信號
  26. 輸入參數:
  27.     無
  28. 輸出參數:
  29.     無
  30. 返回值:
  31. **********************************************/
  32. static void Stop(void)
  33. {
  34.         Sda = 0;
  35.         Scl = 1;
  36.         Sda = 1;
  37. }

  38. /**********************************************
  39. 功能:
  40.     應答位
  41. 輸入參數:
  42.     無
  43. 輸出參數:
  44.     無
  45. 返回值:
  46.         設備是否應答
  47.         1:應答;0:應答
  48. **********************************************/
  49. static unsigned char Respons(void)
  50. {
  51.         unsigned char OverTime = 0;  //超時
  52.         unsigned char TempFlag = 0;
  53.         OverTime = 0;
  54.     Sda = 1;     //釋放數據線
  55.     Scl = 1;
  56.         while(1)
  57.         {
  58.                 if(Sda)   //應答信號沒來
  59.                 {
  60.                         if(OverTime++ > 200)
  61.                         {
  62.                            TempFlag = 0;   //應答信號長時間沒有來,認為無應答
  63.                            break;
  64.                         }
  65.                 }
  66.                 else
  67.                 {
  68.                     TempFlag = 1;    ///檢測到應答信號
  69.                         break;
  70.                 }
  71.         }
  72.         Scl = 0;
  73.         return 1;
  74. }

  75. /**********************************************
  76. 功能:
  77.     非應答位
  78. 輸入參數:
  79.     無
  80. 輸出參數:
  81.     無
  82. 返回值:
  83. **********************************************/
  84. static void NoRespons(void)  //非應答
  85. {
  86.     Sda = 1;     //釋放數據線
  87.     Scl = 1;
  88.         Scl = 0;
  89. }

  90. /**********************************************
  91. 功能:
  92.     寫字節
  93. 輸入參數:
  94.     temp: 要寫的字節參數
  95. 輸出參數:
  96.     無
  97. 返回值:
  98. **********************************************/
  99. static void WriteByte(unsigned char temp)
  100. {
  101.         unsigned char i;
  102.         Scl = 0;
  103.         for(i = 0;i < 8;i++)
  104.         {
  105.                 Sda = temp & 0x80;
  106.                 temp <<= 1;
  107.                 Scl = 1;    //scl拉高,準備寫數據
  108.                 Scl = 0;   //scl拉低,寫數據完成
  109.         }
  110. }

  111. /**********************************************
  112. 功能:
  113.     讀字節
  114. 輸入參數:
  115.     無
  116. 輸出參數:
  117.     無
  118. 返回值:
  119.     讀取的字節
  120. **********************************************/
  121. static unsigned char ReadByte(void)
  122. {
  123.         unsigned char i;
  124.         unsigned char x = 0;
  125.         for(i = 0;i < 8;i++)
  126.         {
  127.                 Scl = 1;
  128.                 x <<= 1;
  129.                 x |= (unsigned char)Sda;
  130.                 Scl = 0;        
  131.         }
  132.         return x;
  133. }

  134. /**********************************************
  135. 功能:
  136.     寫數據到對應設備
  137. 輸入參數:
  138.     device:   設備地址
  139.     parameter:參數
  140.     temp:     寫入的內容
  141. 輸出參數:
  142.     無
  143. 返回值:
  144. **********************************************/
  145. void WriteIIC(unsigned char device,unsigned char parameter,unsigned char temp)
  146. {
  147.         Start();
  148.         WriteByte(device);
  149.         if(Respons())
  150.         {
  151.                 WriteByte(parameter);
  152.                 if(Respons())
  153.                 {
  154.                         WriteByte(temp);
  155.                         if(Respons())
  156.                         {
  157.                                 Stop();
  158.                         }
  159.                         else
  160.                         {
  161.                                 Stop();
  162.                         }
  163.                 }
  164.                 else
  165.                 {
  166.                         Stop();
  167.                 }
  168.         }
  169.         else
  170.         {
  171.                 Stop();
  172.         }
  173. }

  174. /**********************************************
  175. 功能:
  176.     從對應設備讀取數據
  177. 輸入參數:
  178.     device:   設備地址
  179.     parameter:參數
  180. 輸出參數:
  181.     無
  182. 返回值:
  183.     讀取的內容
  184. **********************************************/
  185. unsigned char ReadIIC(unsigned char device,unsigned char parameter)
  186. {
  187.         unsigned char x;
  188.         Start();
  189.         WriteByte(device);
  190.         if(Respons())
  191.         {
  192.                 WriteByte(parameter);
  193.                 if(Respons())
  194.                 {
  195.                         Start();
  196.                         WriteByte(device | 0x01);
  197.                         if(Respons())
  198.                         {
  199.                                 x = ReadByte();
  200.                                 NoRespons();
  201.                                 Stop();
  202.                         }
  203.                         else
  204.                         {
  205.                                 Stop();
  206.                         }
  207.                 }
  208.                 else
  209.                 {
  210.                         Stop();
  211.                 }
  212.         }
  213.         else
  214.         {
  215.                 Stop();
  216.         }
  217.         return x;
  218. }

  219.         
復制代碼

---------------------------------------------------------
文件名: digitron_drv.c
描述: 數碼管模塊驅動c文件
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include "digitron_drv.h"

code uint8 Segment[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code uint8 Select[] = {0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/**********************************************
功能:
    輸出位選字節和段碼字節
輸入參數:
    SelectByte:  位選字節
    SegmentByte: 段碼字節
輸出參數:
    無
返回值:
**********************************************/
static void DigOutput(uint8 SelectByte, uint8 SegmentByte)
{
    uint8 i;
   
        DIG_SHCP = 0;
        DIG_STCP = 0;

        for(i=0; i<8; i++)
        {
            if(SegmentByte&0x80)
        {
                DIG_DATA = 1;
        }
                else
        {
                    DIG_DATA = 0;
        }
                _nop_();
                DIG_SHCP = 1;
                _nop_();
                DIG_SHCP = 0;
                _nop_();
                SegmentByte <<= 1;
        }
        for(i=0; i<8; i++)
        {
            if(SelectByte&0x80)
                DIG_DATA = 1;
                else
                    DIG_DATA = 0;
                _nop_();
                DIG_SHCP = 1;
                _nop_();
                DIG_SHCP = 0;
                _nop_();
                SelectByte <<= 1;
        }
        DIG_STCP = 1;
        _nop_();
        DIG_STCP = 0;
        _nop_();
}

/**********************************************
功能:
    在某位顯示自定義段碼
輸入參數:
    DigSelect: 數碼管位選擇(1——8,即最右到最左)
    CustomSeg: 自定義段碼值
輸出參數:
    無
返回值:
**********************************************/
void DigShowCustom(uint8 DigSelect, uint8 CustomSeg)
{
    if(0<DigSelect<9)
    {
        DigOutput(Select[DigSelect],CustomSeg);
    }
}

/**********************************************
功能:
    在某位顯示數字
輸入參數:
    DigSelect: 數碼管位選擇(1——8,即最右到最左)
    Number:    數字(0——9)
    Dp:        小數點(1:顯示;0:不顯示)
輸出參數:
    無
返回值:
**********************************************/
void DigShowNumber(uint8 DigSelect, uint8 Number, bit Dp)
{
    if((0<DigSelect<9)&&(Number<10))
    {
        if(Dp)
            {
            DigOutput(Select[DigSelect],(Segment[Number]&~0x80));
            }
            else
            {
            DigOutput(Select[DigSelect],(Segment[Number]|0x80));
            }
    }
}


/**********************************************
功能:
    初始化數碼管,使數碼管全滅
輸入參數:
    無
輸出參數:
    無
返回值:
**********************************************/
void DigInit(void)
{
    DIG_DATA = 0;
        DIG_SHCP = 0;
        DIG_STCP = 0;
    DigOutput(0x00,0xff);
}
#include "PCF8591_AD_drv.h"

/**********************************************
功能:
    配置PCF8591的工作模式
輸入參數:
    anlog_sw:  模擬信號輸出開關
    input_model:  模擬輸入模式設置
    auto_increment: 通道自動增量設置
    AD_channel:模擬轉換通道設置
輸出參數:
    無
返回值:
    配置完成后的控制字節
**********************************************/

unsigned char model_set(bit anlog_sw,unsigned char input_model,bit auto_increment,unsigned char AD_channel)
{
        unsigned char Control_Key;
        Control_Key = 0x00;
        if(anlog_sw)
        {
                Control_Key |= 0x40;
        }
        input_model = input_model << 4;
        Control_Key |= input_model;
        if(auto_increment)
        {
                Control_Key |= 0x04;
        }
        Control_Key |= AD_channel;
        return Control_Key;
}



---------------------------------------------------------
文件名: PCF8591_AD.c
描述: AD采集溫度,光照強度變化
作者:
=========================================================
-----------------------------------------------------------------------------------------------------------*/
#include <reg52.h>
#include "digitron_drv.h"
#include "IIC_drv.h"
#include "PCF8591_AD_drv.h"

/**********************************************
功能:
    數碼管顯示
輸入參數:
    Data: 數據
輸出參數:
    無
返回值:
**********************************************/
void Display(unsigned int Data1,unsigned int Data2)
{
        DigShowNumber(8,Data1/100,0);
        DigShowNumber(7,Data1%100/10,0);
        DigShowNumber(6,Data1%10,0);
        
        DigShowNumber(3,Data2/100,0);
        DigShowNumber(2,Data2%100/10,0);
        DigShowNumber(1,Data2%10,0);
}  

/*---------------------------------------------------------------------------------------------------------*/
/**********************************************
    主函數
**********************************************/
void main()
{
        unsigned char model;
        unsigned char hot,light;
        while(1)
        {
                model = model_set(anlog_output_off,anlog_model_0,auto_increment_off,anlog_channel_0);
                hot = ReadIIC(0x90,model);

                model = model_set(anlog_output_off,anlog_model_0,auto_increment_off,anlog_channel_1);
                light = ReadIIC(0x90,model);

                Display(hot,light);
        }
}

好東西值得擁有

PCF8591 ADC電壓采樣.pdf

2.81 MB, 下載次數: 54, 下載積分: 黑幣 -5


作者: caigen0001    時間: 2015-10-1 16:38
謝謝分享。。。

作者: owenliang    時間: 2018-2-26 22:56
謝謝分享
作者: danpianji3501    時間: 2018-4-10 06:53
謝謝 !銳志開發板上就用的這個,就是不見開發板的視頻教程!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 中文字幕视频一区 | 国产亚洲精品精品国产亚洲综合 | 欧产日产国产精品视频 | 日本免费在线看 | 日本不卡一二三 | 一区二区三区视频在线观看 | 蜜桃视频一区二区三区 | 亚洲一区中文字幕在线观看 | 亚洲精品日韩欧美 | 国产一级久久久久 | 在线播放国产视频 | 欧洲一区在线观看 | 亚洲欧美日韩精品久久亚洲区 | 日韩高清一区 | 久久久久久综合 | 国产一区久久久 | 国产精品国产三级国产aⅴ入口 | 日本一区二区三区四区 | 91精品国产综合久久小仙女图片 | 中文字幕韩在线第一页 | 欧美一区二区三区在线观看 | chinese中国真实乱对白 | www.夜夜草| 精品久久久久久久久久久久久久 | 日韩精品一区二区三区在线播放 | 伊人网91| 高清欧美性猛交xxxx黑人猛交 | 精品一区二区三区在线视频 | 欧美日本在线观看 | 欧美一区二区三区高清视频 | 麻豆国产一区二区三区四区 | 成人在线日韩 | 日本黄色影片在线观看 | 久久精品网| 欧美日韩在线一区二区 | 高清一区二区三区 | 欧美综合精品 | 91精品国产91| 国产成人综合久久 | 日韩精品在线播放 | 国产精品久久久久久吹潮 |