新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stc12c5a60s2使用片內AD轉換

        stc12c5a60s2使用片內AD轉換

        作者: 時間:2016-11-30 來源:網絡 收藏
        #include

        #include
        #define uint unsigned int
        #define uchar unsigned char
        sfr adc_contr=0xbc;//adc控制寄存器,不可位尋址,用或運算來設置
        sfr adc_res=0xbd;//轉換結果寄存器,高八位
        sfr adc_low2=0xbe;//轉換結果寄存器,低兩位
        sfr p1asf=0x9d;//設置p1的那一口為輸入口,不可位尋址.
        //以下都是控制寄存器的各位地址
        #define adc_power 0x80;//adc電源,第7位
        #define adc_flag 0x10;//轉換結束標志位,第4位
        #define adc_start 0x08;//轉換開始,第3位
        #define adc_speedll 0x00;//速度位,第5,6位
        #define adc_speedl 0x20;
        #define adc_speedh 0x40;
        #define adc_speedhh 0x60;
        #define adc_chs 0x00;//輸入通道為第p1.0,1,2,3三位可設置p10-p17
        //位定義完成

        本文引用地址:http://www.104case.com/article/201611/323793.htm

        sbit duan=P2^6;
        sbit wei=P2^7;
        long unsigned int a,shu;
        uint b,wan,qian,bai,shi,ge,adc_finished;//轉換結束標志
        uchar code Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        void yanshi()
        {
        uchar i,j;
        for(i=5;i>0;i--)
        for(j=110;j>0;j--);
        }
        void adcinit()//adc初始化函數
        {
        p1asf=0x01;//設置p10 為ad轉換輸入口
        adc_contr=0xe0;//打開電源,設最高速度
        //adc_contr=adc_power|adc_speedh|adc_chs;//電源X0000000,速度0XX00000
        //通道:00000XXX
        yanshi();
        adc_contr|=adc_chs;//設置頻道
        }

        void fenshu()
        {

        shu=a;
        wan=shu/10000;
        shu=shu%10000;
        qian=shu/1000;
        shu=shu%1000;
        bai=shu/100;
        shu=shu%100;
        shi=shu/10;
        ge=shu%10;
        }
        void xianshi()
        {
        P0=Temp[ge];
        duan=1;
        duan=0;
        P0=0xff;
        P0=0x7f;
        wei=1;
        wei=0;
        P0=0x00;

        yanshi();
        P0=Temp[shi];
        duan=1;
        duan=0;
        P0=0xff;
        P0=0xbf;
        wei=1;
        wei=0;

        yanshi();
        P0=Temp[bai];
        duan=1;
        duan=0;
        P0=0xff;
        P0=0xdf;
        wei=1;
        wei=0;
        yanshi();
        P0=Temp[qian];
        duan=1;
        duan=0;
        P0=0xff;
        P0=0xef;
        wei=1;
        wei=0;
        }

        void main()
        {
        adcinit();
        adc_res=0;
        adc_low2=0;
        while(1)
        {
        adc_contr|=adc_start;//啟動ad轉換,置1為起動,轉換結束后自動置0
        yanshi();
        adc_finished=0;
        while(adc_finished==0)
        {
        adc_finished=adc_contr&adc_flag;//檢測是否轉換結束,沒結束一直等
        }

        adc_contr=adc_contr&0xef;//轉換結束標志清零
        //也可寫成


        a=adc_res*4+adc_low2;

        adc_contr|=adc_start;
        yanshi();
        fenshu();
        xianshi();
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宜丰县| 涪陵区| 贵定县| 安塞县| 京山县| 林周县| 神池县| 巢湖市| 洛扎县| 迁安市| 盐城市| 进贤县| 德州市| 榕江县| 夏邑县| 惠东县| 佛山市| 遂溪县| 南木林县| 麻栗坡县| 黄石市| 沁水县| 绥德县| 鹤壁市| 彭水| 周至县| 涡阳县| 韩城市| 林甸县| 从江县| 晋城| 招远市| 日土县| 万安县| 敦煌市| 丹东市| 金湖县| 宜都市| 高密市| 安丘市| 南平市|