新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR與VB通信模擬量輸入簡單程序

        AVR與VB通信模擬量輸入簡單程序

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

        //----------------------------------------AVR代碼------------------------
        #include
        #include

        #define uchar unsigned char
        #define uint unsigned int

        uchar seg[10]={0x3f,0x06,0x5b, //共陰極數碼管0~9的字形碼
        0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        uchar tab[4]={0xfe,0xfd,0xfb,0xf7};//4位共陰極數碼管的位選碼

        #define UDRE 5
        #define RXC 7

        uchar datt; //接受到的數據比較變量
        uchar adc_val; //模擬量轉換值

        void delay(uint k)
        {
        while(k--);
        }

        void port_init()
        {
        PORTA=0x7f; // 通道7作為模擬量輸入
        DDRA=0x7f;
        PORTB=0xff;
        DDRB=0xff;
        PORTC=0xff;
        DDRC=0xff;
        PORTD=0xff;
        DDRD=0xff;
        }

        void adc_init() //模擬量初始化
        {
        ADCSRA=0xe3;
        ADMUX=0xc7;
        }

        uint adc_vert()
        {
        uint temp1,temp2;
        temp1=(uint)ADCL;
        temp2=(uint)ADCH;
        temp2=(temp2<<8)+temp1;
        return temp2;
        }


        void time0_init() //定時器0初始化
        {
        TCNT0=0x83;
        TCCR0=0x03;
        TIMSK=0x01; //定時器0溢出中斷
        }

        #pragma vector = 0x24
        __interrupt void time0_vef()
        {
        static uchar i;
        TCNT0=0x83;
        i++;
        if(i>3)i=0;
        switch(i)
        {
        case 0:PORTA=seg[adc_val%10];PORTC=tab[0];break;
        case 1:PORTA=seg[adc_val%100/10];PORTC=tab[1];break;
        case 2:PORTA=seg[adc_val%1000/100];PORTC=tab[2];break;
        case 3:PORTA=seg[adc_val/1000];PORTC=tab[3];break;
        default:break;
        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 桃江县| 延庆县| 吉安市| 临泽县| 宁阳县| 丹棱县| 贵溪市| 浦北县| 绥中县| 玉树县| 阿合奇县| 苍梧县| 雷山县| 文昌市| 黑水县| 开远市| 六盘水市| 丰宁| 德保县| 桓台县| 尚志市| 八宿县| 惠东县| 祁门县| 元朗区| 夹江县| 库伦旗| 革吉县| 清水河县| 峨边| 横峰县| 芦山县| 宕昌县| 连州市| 镇巴县| 磴口县| 泽州县| 资溪县| 凭祥市| 金溪县| 夏邑县|