新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 28. 數(shù)字電壓表

        28. 數(shù)字電壓表

        作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
        1.實驗任務(wù)
        利用單片機AT89S51與ADC0809設(shè)計一個數(shù)字電壓表,能夠測量0-5V之間的直流電壓值,四位數(shù)碼顯示,但要求使用的元器件數(shù)目最少。
        2.電路原理

        圖1.28.1
        3.系統(tǒng)板上硬件連線
        a)把“單片機系統(tǒng)”區(qū)域中的P1.0-P1.7與“動態(tài)數(shù)碼顯示”區(qū)域中的ABCDEFGH端口用8芯排線連接。
        b)把“單片機系統(tǒng)”區(qū)域中的P2.0-P2.7與“動態(tài)數(shù)碼顯示”區(qū)域中的S1S2S3S4S5S6S7S8端口用8芯排線連接。
        c)把“單片機系統(tǒng)”區(qū)域中的P3.0與“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的ST端子用導(dǎo)線相連接。
        d)把“單片機系統(tǒng)”區(qū)域中的P3.1與“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的OE端子用導(dǎo)線相連接。
        e)把“單片機系統(tǒng)”區(qū)域中的P3.2與“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的EOC端子用導(dǎo)線相連接。
        f)把“單片機系統(tǒng)”區(qū)域中的P3.3與“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的CLK端子用導(dǎo)線相連接。
        g)把“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的A2A1A0端子用導(dǎo)線連接到“電源模塊”區(qū)域中的GND端子上。
        h)把“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的IN0端子用導(dǎo)線連接到“三路可調(diào)電壓模塊”區(qū)域中的VR1端子上。
        i)把“單片機系統(tǒng)”區(qū)域中的P0.0-P0.7用8芯排線連接到“模數(shù)轉(zhuǎn)換模塊”區(qū)域中的D0D1D2D3D4D5D6D7端子上。
        4.程序設(shè)計內(nèi)容
        i.由于ADC0809在進行A/D轉(zhuǎn)換時需要有CLK信號,而此時的ADC0809的CLK是接在AT89S51單片機的P3.3端口上,也就是要求從P3.3輸出CLK信號供ADC0809使用。因此產(chǎn)生CLK信號的方法就得用軟件來產(chǎn)生了。
        ii.由于ADC0809的參考電壓VREF=VCC,所以轉(zhuǎn)換之后的數(shù)據(jù)要經(jīng)過數(shù)據(jù)處理,在數(shù)碼管上顯示出電壓值。實際顯示的電壓值(D/256*VREF)
        5.匯編源程序
        (略)
        6.C語言源程序
        #include

        unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
        0xef,0xdf,0xbf,0x7f};
        unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
        0x6d,0x7d,0x07,0x7f,0x6f,0x00};
        unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};
        unsignedchardispcount;
        unsignedchargetdata;
        unsignedinttemp;
        unsignedchari;

        sbitST=P3^0;
        sbitOE=P3^1;
        sbitEOC=P3^2;
        sbitCLK=P3^3;


        voidmain(void)
        {
        ST=0;
        OE=0;
        ET0=1;
        ET1=1;
        EA=1;
        TMOD=0x12;
        TH0=216;
        TL0=216;
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%256;
        TR1=1;
        TR0=1;
        ST=1;
        ST=0;
        while(1)
        {
        if(EOC==1)
        {
        OE=1;
        getdata=P0;
        OE=0;
        temp=getdata*235;
        temp=temp/128;
        i=5;
        dispbuf[0]=10;
        dispbuf[1]=10;
        dispbuf[2]=10;
        dispbuf[3]=10;
        dispbuf[4]=10;
        dispbuf[5]=0;
        dispbuf[6]=0;
        dispbuf[7]=0;
        while(temp/10)
        {
        dispbuf=temp%10;
        temp=temp/10;
        i++;
        }
        dispbuf=temp;
        ST=1;
        ST=0;
        }
        }
        }

        voidt0(void)interrupt1using0
        {
        CLK=~CLK;
        }

        voidt1(void)interrupt3using0
        {
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%256;
        P1=dispcode[dispbuf[dispcount]];
        P2=dispbitcode[dispcount];
        if(dispcount==7)
        {
        P1=P1|0x80;
        }
        dispcount++;
        if(dispcount==8)
        {
        dispcount=0;
        }
        }


        關(guān)鍵詞: 數(shù)字電壓表單片

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 德化县| 凯里市| 静宁县| 临邑县| 大余县| 驻马店市| 彰武县| 壤塘县| 汤原县| 福贡县| 吐鲁番市| 信丰县| 明溪县| 芷江| 高邑县| 抚远县| SHOW| 永靖县| 安顺市| 淮滨县| 铜山县| 玛纳斯县| 越西县| 黄浦区| 嘉峪关市| 岳阳县| 绥芬河市| 北宁市| 英德市| 沙河市| 邓州市| 都兰县| 吉林市| 宾阳县| 奉化市| 垫江县| 白朗县| 长武县| 彭水| 谢通门县| 湟源县|