在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)內(nèi)部A/D轉(zhuǎn)換

            PIC單片機(jī)內(nèi)部A/D轉(zhuǎn)換

            作者: 時(shí)間:2014-01-13 來源:網(wǎng)絡(luò) 收藏

            //需求,將板子上電位器接RA0,設(shè)置PIC的AD相關(guān),顯示電壓
            #includepic.h>
            __CONFIG(0x3831);//配置位18323831
            #define uint unsigned int
            #define uchar unsigned char

            //共陰數(shù)碼管(板子上用了達(dá)林頓管ULN2003,反向器)
            const unsigned char table[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};

            //加小數(shù)點(diǎn)的共陰數(shù)碼管顯示,非常不錯
            const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
            0x87,0xff,0xef};
            void init();//數(shù)碼管,和AD相關(guān)設(shè)置
            uint get_ad();//獲取電壓值,其中包括AD讀取,及AD值轉(zhuǎn)電壓值的處理,返回值為uint型,精度保留小數(shù)點(diǎn)后3位
            void delay_ms(int z);
            void disp(uchar num1,uchar num2,uchar num3,uchar num4);//數(shù)碼管動態(tài)掃描
            void main()
            {
            uint lednum;//
            uchar num1,num2,num3,num4;//高兩位接RA1和RA0用不到了
            init();
            while(1)
            {
            lednum=get_ad();
            num1=lednum/1000;//求模即取整
            num2=lednum/100%10;
            num3=lednum/10%10;
            num4=lednum%10;
            disp(num1,num2,num3,num4);
            }
            }
            void init()//數(shù)碼管,和AD相關(guān)設(shè)置
            {
            TRISA=0x01;//RA0設(shè)置為輸入,用于AD模擬信號輸入
            TRISD=0;//接數(shù)碼管段選IO設(shè)置為輸出
            PORTA=0;
            PORTD=0;
            ADCON0=0x41;//選擇8分頻(4M/8=0.5MHz)時(shí)鐘頻率即8倍時(shí)鐘周期,開AD
            ADCON1=0x8E;//選擇結(jié)果右對齊,ADRESH高6位讀作0,選擇A通道以電源VDD VSS作參考電壓
            delay_ms(10);//延時(shí)等待AD穩(wěn)定

            }
            //獲取電位器電壓,PIC內(nèi)部AD
            uint get_ad()//一般做工程的時(shí)候帶個通道參數(shù),讀取幾通道直接帶通道數(shù)就可以
            {
            //實(shí)際中要進(jìn)行數(shù)字濾波(如20個數(shù)取平均值,然后將其返回去,濾波算法有很多,平均值是一種而已)
            uint adval;//存放AD的值
            float advalf;//存放AD值轉(zhuǎn)換為的電壓值
            ADGO=1;//開始轉(zhuǎn)換,ADGO與GODONE宏定義一致
            while(ADGO);//完,硬件自動清零ADGO
            adval=ADRESH;//先讀AD高8位寄存器的低二位
            adval=adval8|ADRESL;
            advalf=adval/1023.0*5.0;//1023為電位器顯示的最大值,假設(shè)板子電壓為5v時(shí)
            adval=advalf*1000;//精度取小數(shù)點(diǎn)后三位,如4.2356,則讀為4.235
            return(adval);

            }
            void disp(uchar num1,uchar num2,uchar num3,uchar num4)//數(shù)碼管動態(tài)顯示
            {
            PORTD=table1[num1];
            PORTA=0x20;//0010 0000
            delay_ms(2);
            PORTD=table[num2];
            PORTA=0x10;//0001 0000
            delay_ms(2);
            PORTD=table[num3];
            PORTA=0x08;//0000 1000
            delay_ms(2);
            PORTD=table[num4];
            PORTA=0x04;//0000 0100
            delay_ms(2);
            }
            void delay_ms(int z)
            {
            int x,y;
            for(x=z;x>0;x--)
            for(y=110;y>0;y--);
            }



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉