新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC16F877A單片機-AD轉(zhuǎn)換經(jīng)典C程序

        PIC16F877A單片機-AD轉(zhuǎn)換經(jīng)典C程序

        作者: 時間:2016-11-17 來源:網(wǎng)絡(luò) 收藏
        #include

        #include
        #define HC595_SER RB7
        #define HC595_SCK RB6
        #define HC595_RCK RB5
        #define key_164_data RB3
        #define key_164_clk RB2
        #define key_com1 RB1
        #define key_com0 RB0
        #define TURE 1

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

        bit key_finish; //定義位變量,這是PICmate仿真軟件環(huán)境的特有的地方 unsigned int sample_key;
        unsigned int sample_keyBuf[2];
        unsigned int key_value;
        unsigned char key_row_sel;
        unsigned char key_number;//鍵號
        unsigned int T100ms;
        unsigned char disbuf[8];
        unsigned int ad_data;
        int a[4];
        const unsigned char seven_seg[16]=
        {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
        //----------------------------------------------
        void disbuf_update(void)
        {
        disbuf[7]=seven_seg[a[3]];
        disbuf[6]=seven_seg[a[2]];
        disbuf[5]=seven_seg[a[1]];
        disbuf[4]=seven_seg[a[0]];
        disbuf[3]=seven_seg[0];
        disbuf[2]=seven_seg[0];
        disbuf[1]=seven_seg[0];
        disbuf[0]=seven_seg[0];
        }
        //----------------------------------------------
        //發(fā)送一個字節(jié)
        void s_pData(unsigned char key) //形參key對應(yīng)著實參disbuf[i]
        {
        unsigned char i;
        for(i=0;i<8;i++)
        {
        if(0x80&(key< HC595_SER=1;
        else HC595_SER=0;
        HC595_SCK=0;
        HC595_SCK=1;
        }
        }
        //----------------------------------------------


        //----------------------------------------------
        void display (void)
        {
        unsigned char i;
        for(i=0;i<8;i++)
        s_pData(disbuf[i]);
        HC595_RCK=0;
        HC595_RCK=1;
        }
        //----------------------------------------------

        void start_ad_change (void) //開始A/D轉(zhuǎn)化
        {
        ADCON1=0x80;
        ADCON0=0x48;
        ADON=1;
        ADIF=0;
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");
        ADGO=1;
        while(ADIF==0);
        ADIF=0;
        ad_data =ADRESL;
        ad_data |=(unsigned int)(ADRESH<<8); //強制ADRESH的8位放在ad_data的高八位
        ADON=0;
        }

        void two_change_ten(void) //二進制轉(zhuǎn)十進制
        {
        int s=0,i;
        for(i=0;i<=15;i++)
        {if(0x0001&(ad_data>>i))
        s=s+pow(2,i);
        }
        a[0]=s%10;
        a[1]=(s/10)%10;
        a[2]=(s/100)%10;
        a[3]=s/1000;
        }

        //主程序
        int main(void)
        {
        PORTB=0;
        TRISB=0x03;
        PORTA=0;
        TRISA=0x02;
        while(1)
        {
        start_ad_change();
        two_change_ten();
        disbuf_update();
        display();
        }


        }
        //----------------------------------------------



        評論


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

        關(guān)閉
        主站蜘蛛池模板: 彰武县| 平谷区| 上饶市| 太白县| 房产| 铜鼓县| 九江市| 裕民县| 苏州市| 兖州市| 石河子市| 任丘市| 绥棱县| 句容市| 六枝特区| 军事| 来凤县| 鄄城县| 札达县| 灵武市| 吐鲁番市| 澄江县| 进贤县| 土默特左旗| 罗平县| 嘉兴市| 肃北| 尉氏县| 香河县| 桂林市| 泊头市| 乐安县| 库尔勒市| 安福县| 彭州市| 嵩明县| 武乡县| 岳西县| 梓潼县| 叙永县| 孟村|