• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于STC12C56系列單片機的AD轉換C程序

    基于STC12C56系列單片機的AD轉換C程序

    作者: 時間:2012-09-19 來源:網(wǎng)絡 收藏

    /****************
    STC12c56

    本文引用地址:http://www.czjhyjcfj.com/article/170837.htm

    入口參數(shù):通道數(shù)(0,1,2,3,4,5,6,7)
    返回值: 結果


    *****************/

    #includereg51.h>

    sfr C_CONTR=0xc5; //AD寄存器
    sfr ADC_DATA=0xc6; //AD轉換結果寄存器,為10位
    sfr P1M0=0x91;
    sfr P1M1=0x92;


    /***************************
    微秒延時函數(shù)
    ********************************/
    void delay_us(unsigned int i)//延時 如果需要高精度延時 請嵌入?yún)R編
    {
    unsigned char a;
    if (i == 0)
    {
    return ;
    }

    for (a = 1; a i; a++)
    {
    ;

    }
    }

    /***************************
    毫秒延時函數(shù)
    ********************************/
    void delay_ms(int num)
    {
    int x,y;
    for(y=0;ynum;y++)
    {
    for(x = 0;x 5000;x)
    x++;
    }
    }

    /*********************
    入口參數(shù):通道數(shù)(0,1,2,3,4,5,6,7)
    返回值: AD轉換結果
    **************************/
    unsigned char AD(unsigned char Channel)
    {
    unsigned char ADResult;
    ADC_CONTR|=0x80; //開AD轉換電源
    delay_ms(1); //延時1ms
    switch(Channel)
    {
    case 0:
    P1M0|=0x01;P1M1|=0x01; //設置開漏
    ADC_CONTR=0xe0; //選擇AD轉換通道
    break;
    case 1:
    P1M0|=0x02;P1M1|=0x02;
    ADC_CONTR=0xe1;
    break;
    case 2:
    P1M0|=0x04;P1M1|=0x04;
    ADC_CONTR=0xe2;
    break;
    case 3:
    P1M0|=0x08;P1M1|=0x08;
    ADC_CONTR=0xe3;
    break;
    case 4:
    P1M0|=0x10;P1M1|=0x10;
    ADC_CONTR=0xe4;
    break;
    case 5:
    P1M0|=0x20;P1M1|=0x20;
    ADC_CONTR=0xe5;
    break;
    case 6:
    P1M0|=0x40;P1M1|=0x40;
    ADC_CONTR=0xe6;
    break;
    case 7:
    P1M0|=0x80;P1M1|=0x80;
    ADC_CONTR=0xe7;
    break;
    }
    delay_us(100);
    ADC_DATA=0x00;
    ADC_CONTR|=0x08; //啟動AD轉換
    delay_us(200); //等待轉換完成
    ADC_CONTR=0xe7; //清0 ADC_FLAG,ADC_START 位,停止AD轉換
    ADResult=ADC_DATA; //保存轉換結果
    switch(Channel)
    {
    case 0:
    P1M0=0xfe;P1M1=0xfe; //設置普通IO
    break;
    case 1:
    P1M0=0xfd;P1M1=0xfd;
    break;
    case 2:
    P1M0=0xfb;P1M1=0xfb;
    break;
    case 3:
    P1M0=0xf7;P1M1=0xf7;
    break;
    case 4:
    P1M0=0xef;P1M1=0xef;
    break;
    case 5:
    P1M0=0xdf;P1M1=0xdf;
    break;
    case 6:
    P1M0=0xbf;P1M1=0xbf;
    break;
    case 7:
    P1M0=0x7f;P1M1=0x7f;
    break;
    }
    return ADResult;
    }



    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 武邑县| 海阳市| 乌兰察布市| 班玛县| 阿拉尔市| 乌苏市| 图们市| 三明市| 靖州| 永济市| 吴桥县| 武陟县| 缙云县| 顺义区| 鄯善县| 贵南县| 五华县| 镇江市| 兰坪| 镇江市| 利辛县| 宁德市| 海口市| 宣恩县| 洛浦县| 桃江县| 兴文县| 南通市| 来凤县| 万载县| 依兰县| 内乡县| 中西区| 安福县| 凤庆县| 延庆县| 上杭县| 咸宁市| 呈贡县| 湖北省| 盐源县|