新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 31. 6位數顯頻率計數器

        31. 6位數顯頻率計數器

        作者: 時間:2016-11-18 來源:網絡 收藏
        1.實驗任務
        利用AT89S51單片機的T0、T1的定時計數器功能,來完成對輸入的信號進行頻率計數,計數的頻率結果通過8位動態數碼管顯示出來。要求能夠對0-250KHZ的信號頻率進行準確計數,計數誤差不超過±1HZ。
        2.電路原理

        圖4.31.1

        3.系統板上硬件連線
        (1).把“單片機系統”區域中的P0.0-P0.7與“動態數碼顯示”區域中的ABCDEFGH端口用8芯排線連接。
        (2).把“單片機系統”區域中的P2.0-P2.7與“動態數碼顯示”區域中的S1S2S3S4S5S6S7S8端口用8芯排線連接。
        (3).把“單片機系統”區域中的P3.4(T0)端子用導線連接到“頻率產生器”區域中的WAVE端子上。
        4.程序設計內容
        (1).定時/計數器T0和T1的工作方式設置,由圖可知,T0是工作在計數狀態下,對輸入的頻率信號進行計數,但對工作在計數狀態下的T0,最大計數值為fOSC/24,由于fOSC=12MHz,因此:T0的最大計數頻率為250KHz。對于頻率的概念就是在一秒只數脈沖的個數,即為頻率值。所以T1工作在定時狀態下,每定時1秒中到,就停止T0的計數,而從T0的計數單元中讀取計數的數值,然后進行數據處理。送到數碼管顯示出來。
        (2).T1工作在定時狀態下,最大定時時間為65ms,達不到1秒的定時,所以采用定時50ms,共定時20次,即可完成1秒的定時功能。
        5.C語言源程序
        #include
        unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
        unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
        0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
        unsignedchardispbuf[8]={0,0,0,0,0,0,10,10};
        unsignedchartemp[8];
        unsignedchardispcount;
        unsignedcharT0count;
        unsignedchartimecount;
        bitflag;
        unsignedlongx;
        voidmain(void)
        {
        unsignedchari;
        TMOD=0x15;
        TH0=0;
        TL0=0;
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%256;
        TR1=1;
        TR0=1;
        ET0=1;
        ET1=1;
        EA=1;
        while(1)
        {
        if(flag==1)
        {
        flag=0;
        x=T0count*65536+TH0*256+TL0;
        for(i=0;i<8;i++)
        {
        temp=0;
        }
        i=0;
        while(x/10)
        {
        temp=x%10;
        x=x/10;
        i++;
        }
        temp=x;
        for(i=0;i<6;i++)
        {
        dispbuf=temp;
        }
        timecount=0;
        T0count=0;
        TH0=0;
        TL0=0;
        TR0=1;
        }
        }
        }
        voidt0(void)interrupt1using0
        {
        T0count++;
        }
        voidt1(void)interrupt3using0
        {
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%256;
        timecount++;
        if(timecount==250)
        {
        TR0=0;
        timecount=0;
        flag=1;
        }
        P0=dispcode[dispbuf[dispcount]];
        P2=dispbit[dispcount];
        dispcount++;
        if(dispcount==8)
        {
        dispcount=0;
        }
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 赤城县| 安图县| 梧州市| 乡宁县| 阿拉善盟| 天镇县| 同仁县| 来凤县| 广东省| 习水县| 柏乡县| 麟游县| 刚察县| 旬邑县| 荔波县| 河北省| 和静县| 凉山| 长治县| 印江| 双柏县| 灵山县| 中方县| 吉水县| 安庆市| 夏河县| 仁寿县| 黑山县| 饶阳县| 博罗县| 石家庄市| 长顺县| 手机| 云浮市| 寻甸| 绍兴市| 金寨县| 曲麻莱县| 扎鲁特旗| 瑞昌市| 兴宁市|