找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 數字頻率計.rar

        數字頻率計.rar

         

        兩個版本的數字頻率計帶仿真:
        這里有兩個版本的數字頻率計
        這個是用中斷寫的,另一個用計數器計數的,中斷的是我自己寫的,不過好像有點問題,仿真的時候結果不穩定,不知道真的做成硬件是不是好點,后一個挺好,分享給大家了,有問題一起討論共同學習
        #include <reg52.h>
        #define uint unsigned int
        #define uchar unsigned char
        #define A 30

        code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        sbit P37=P3^7;
        uint number;
        uchar sig;
        void delay(uchar m)
        {
        while(--m)
        {;}
        }
        void display(uint number)
        {
        unsigned char B1,B2,B3,B4,B5;//定義數的各個位,萬,千,百,十,個位
        ;
        B1=number/10000;//萬位
        B2=number%10000/1000;//千位
        B3=number%1000/100;//百位
        B4=number%100/10;//十位
        B5=number%10;//個位
        while(1){
        if(P37==1) break;

        P2=0xFE;//顯示個位
        P0=TAB[B5];
        delay(A);

        P2=0xFD;//顯示十位
        P0=TAB[B4];
        delay(A);

        P2=0xFB;//顯示百位
        P0=TAB[B3];
        delay(A);

        P2=0xF7;//顯示千位
        P0=TAB[B2];
        delay(A);

        P2=0xEF;//顯示萬位
        P0=TAB[B1];
        delay(A);
        }
        }
        void main(void)
        { P0=TAB[0];//剛開始顯示00000
        P2=0xC0;
        TMOD=0X01;
        EA=1;
        EX0=1;
        IT0=1;
        PT0=1;
        ET0=1;
        TL0=(65536-50000)%256;
        TH0=(65536-50000)/256;
        TR0=1;
        sig=0;
        while(1)
        { if(P37==1)
        {number=0;
        P2=0xc0;
        P0=TAB[0];
        }
        while(sig==1)
        { sig=0;
        number=number*20;
        display(number);
        number=0;
        }
        }
        }
        void timer0() interrupt 1
        {
        TL0=(65536-50000)%256;
        TH0=(65536-50000)/256;
        sig=1;
        }
        void freint() interrupt 0
        {
        number++;
        }
        計數器版本的
        /******************************************************************
        AT89S51的T0,T1計數器對輸入的信號進行頻率計數,測量結果用五位數碼管
        動態顯示,要求對0~65KHZ的信號頻率進行準確測量,誤差不超過5HZ
        *****************************************************************/
        #include <reg51.h>
        #define uint unsigned int
        #define A 3
        sbit P37=P3^7;
        unsigned char num=0;
        code unsigned char TAB[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        /*顯示變量對應的數值*/
        /***************定時器0中斷服務函數************************/
        void timer0()interrupt 1{
        TH0=0x3C;
        TL0=0xB0;//定時50ms
        num++;//記到20就直接停止

        }
        /**************************延時函數************************************/
        void delay(unsigned char t){
        unsigned char i,j;
        for(i=0;i<t;i++)
        for(j=0;j<125;j++);
        }

        /*************************顯示函數**************************************/
        void Display(){
        uint number;
        unsigned char B1,B2,B3,B4,B5;//定義數的各個位,萬,千,百,十,個位
        number=TH1*256+TL1;
        B1=number/10000;//萬位
        B2=number%10000/1000;//千位
        B3=number%1000/100;//百位
        B4=number%100/10;//十位
        B5=number%10;//個位
        while(1){
        if(P37==1) break;

        P2=0xFE;//顯示個位
        P0=TAB[B5];
        delay(A);

        P2=0xFD;//顯示十位
        P0=TAB[B4];
        delay(A);

        P2=0xFB;//顯示百位
        P0=TAB[B3];
        delay(A);

        P2=0xF7;//顯示千位
        P0=TAB[B2];
        delay(A);

        P2=0xEF;//顯示萬位
        P0=TAB[B1];
        delay(A);
        }
        }

        void main(){
        P0=TAB[0];//剛開始顯示00000
        P2=0xC0;
        TMOD=0x51;//T0 記時 T1計數
        TH0=0x3c;//定時50ms
        TL0=0xB0;
        TH1=0x00;//計數
        TL1=0x00;
        TR0=1; //開T0
        TR1=1;//開T1
        ET0=1;//開中斷
        EA=1;//打開總中斷
        while(1){
        if(num>=20){//記滿一秒
        num=0;
        TR1=0;
        TR0=0;
        Display();
        }
        if(P37==1) break;
        }
        }







        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-4 19:27 , Processed in 0.040506 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        精品久久久久久无码中文字幕一区| 国产三级精品三级| 国亚洲欧美日韩精品| 高清日韩精品一区二区三区| 久久久精品国产亚洲成人满18免费网站 | 久久精品中文字幕一区| 亚洲精品97久久中文字幕无码| 四虎影视永久在线观看精品| 精品久久久久久国产| 热久久国产欧美一区二区精品 | 国产成人精品高清在线观看93| 91在线手机精品超级观看| 真实国产精品vr专区| 99RE6热在线精品视频观看| 国产亚洲午夜高清国产拍精品 | 日产精品一线二线三线芒果| 久久99精品国产麻豆宅宅| 久久久久这里只有精品 | 精品熟女少妇a∨免费久久| 色播精品免费小视频| 一本精品中文字幕在线| 成人区人妻精品一区二区不卡网站 | 91国内揄拍国内精品对白不卡 | 乱精品一区字幕二区| 国产精品99久久久久久董美香| 亚洲之色在线v中文字幕app| MM1313亚洲国产精品| 久久久久人妻精品一区三寸蜜桃| 精品一区二区三区无码免费视频| 国产精品 猎奇 另类视频| 免费人成黄页网站在线观看| 四虎精品8848ys一区二区| 欧美成人免费全部观看天天性色| 四虎成人精品免费影院| 亚洲国产精品线观看不卡 | 久久国产精品偷99| 日产精品久久久久久久性色| 国产精品无码一区二区在线观一| 日本午夜精品一区二区三区电影| 国产精品∧v在线观看| 久久久久人妻一区精品色|