在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > c51寫的測轉速源程序

            c51寫的測轉速源程序

            作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
            以前寫的c51單片機測轉速源程序,比較久了,當時電路板有數(shù)碼顯示,代碼不是最優(yōu)化的,不過朋友可以看看其中的測速代碼,當時費了點心思寫的,24c02的讀寫代碼,貼出來給朋友看看,寫的很差勁,高手就不要見笑了。

            #include
            #include
            #include

            本文引用地址:http://www.biyoush.com/article/201611/315930.htm

            #define ucharunsignedchar
            #defineuintunsignedint
            #defineulongunsignedlong

            sbitkey0=P3^0;//按鍵0
            sbitkey1=P3^1;//按鍵1
            sbitkey2=P3^3;//按鍵2
            sbitkey3=P3^4;//按鍵3
            sbitled0=P1^0;//數(shù)碼管0
            sbitled1=P1^1;//數(shù)碼管1
            sbitled2=P1^2;//數(shù)碼管2
            sbitled3=P1^3;//數(shù)碼管3
            sbitscl=P1^6;//24c02scl端
            sbitsda=P1^5;//24c02scd端
            sbitout=P1^7;//輸出端
            sbitin=P3^2;//輸入

            codeucharascled[12]={
            0x3f,0x06,0x5b,0x4f,0x66,//0,1,2,3,4
            0x6d,0x7d,0x07,0x7f,0x6f,//5,6,7,8,9
            0x71,0x00};//F,''

            /*****************函數(shù)列表**********************/
            ucharx24c02_read(ucharaddr);//從24c02的地址addr中讀取一個字節(jié)數(shù)據(jù)
            voidx24c02_write(ucharaddr,ucharinfo);//向24c02的addr地址中寫入一字節(jié)數(shù)據(jù)info
            voidx24c02_init();//24c02初始化子程序
            voiddelay(ucharx);//延時子程序ms
            voidflash();//24c02延時子程序nop
            voidstart();//24c02ic開始
            voidstop();//24c02ic停止
            voidack();//24c02ic應答
            voidnack();//24c02ic不應答
            voidwritex(ucharj);//24c02ic寫1byte數(shù)據(jù)
            voiddsp();//顯示子程序
            voiddelay(uchari);//us延時
            voiddelay1(uchari);//us延時
            ucharreadx();//24c02ic讀1byte數(shù)據(jù)
            /****************全局變量定義*******************/
            ucharktemp;
            uchardisp[4];

            uintcount;//預設報警值
            uintzs;//轉速值
            uinttime0;//
            uinttime1;//記時器
            bitbegin1;//T1開始啟動標志
            ucharltj=1;//高低速
            uintjs;//脈沖計數(shù)器
            ulongt0;
            ulongt1;

            bitkey_set;//設置標志
            uchardisp_i[4];//顯示閃動標志
            uintdisp_c;//閃動顯示計數(shù)器//借用time0
            uintdisp_j;//閃動顯示定時//借用time1
            bitss=0;//閃動標志
            uintbj;//報警輸出信號定時
            biten_bj=0;//允許報警標志
            bitbjing=0;//報警中

            //m:菜單級數(shù)mi:參數(shù)標號bh:檢測保護時間1-10
            ucharbh=0;
            ucharm=0,mi=0;//借用zs,js
            ucharbhtm=0;//保護檢測
            //bitcmi=0;//參數(shù)設置改變標志//借用bjing
            /**********************************************/

            voidint_ex0()interrupt0using0
            {
            /*外部中斷0*/
            delay1(20);
            if(key_set==0){///0非設置狀態(tài)
            if(in==0){
            if(ltj==1)
            {
            js++;
            EA=0;
            TR0=0;
            TL0=0xaf;//50ms
            TH0=0x3c;/*計數(shù)初值重裝*/
            if(begin1==0)
            {//開始記數(shù)
            begin1=1;
            js=0;
            TR1=0;
            TL1=0xaf;//50ms
            TH1=0x3c;/*計數(shù)初值重裝*/
            TR1=1;/*啟動T1*/
            }
            /*啟動T0*/
            TR0=1;
            time0=0;
            EA=1;
            }
            else
            {
            if(begin1==0)
            {
            begin1=1;
            EA=0;
            TR0=0;
            zs=0;
            /*啟動T0*/
            TL0=0xaf;//50ms
            TH0=0x3c;/*計數(shù)初值重裝*/
            TR0=1;
            time0=0;
            EA=1;
            }
            else
            {
            EA=0;
            TR0=0;
            begin1=0;
            if(time0==0)
            {
            zs=0;
            }
            else
            {//計算轉速
            t0=(time0*50000+(TH0*256+TL0)-0x3caf);
            if(t0>0){zs=60000000/t0;}
            }
            if(zs{
            if(en_bj==1)
            {
            out=1;
            bjing=1;//報警
            }
            }
            disp[3]=(zs%10000)/1000;//顯示轉速
            disp[2]=(zs%1000)/100;
            disp[1]=(zs%100)/10;
            disp[0]=zs%10;
            TL0=0xaf;//50ms
            TH0=0x3c;/*計數(shù)初值重裝*/
            TR0=1;
            time0=0;
            EA=1;
            }
            }
            }
            //
            }///0
            }
            voidtimer0(void)interrupt1using0//記時定時中斷
            {uchart;
            //////
            if(key_set==0){///0非設置狀態(tài)
            time0++;
            TL0=0xaf;//50ms
            TH0=0x3c;/*計數(shù)初值重裝*/
            TR0=1;
            /*啟動T1*/
            t=time0%20;
            if(t==0){en_bj=0;}
            if(time0>1200)//超時
            {
            time0=0;
            disp[3]=0;
            disp[2]=0;
            disp[1]=0;
            disp[0]=0;
            zs=0;
            if(en_bj==1)
            {
            out=1;
            bjing=1;//報警
            }
            }
            }///0
            }
            voidtimer1(void)interrupt3using0//1s記時定時中斷
            {
            /*T1中斷服務程序入口*/
            //////
            if(key_set==0){///0非設置狀態(tài)
            time1++;
            if(time1==20)//1s
            {EA=0;
            TR1=0;
            //計算轉速
            ///////////////////
            t0=time0*50000+(TH0*256+TL0)-0x3caf;
            t1=1000000-t0;
            t0=60*js*t0;
            zs=60*js+t0/t1;
            if(zs>6000){zs=0;}
            if(zs{
            if(en_bj==1)
            {
            if(bhtm>=bh)
            {
            out=1;
            bjing=1;//報警
            }
            bhtm++;
            }
            }
            else
            {
            bhtm=0;
            }
            if(zs==0)
            {///////
            ///////
            disp[3]=0;
            disp[2]=0;
            disp[1]=0;
            disp[0]=0;
            }
            else
            {
            disp[3]=zs/1000;//顯示轉速
            disp[2]=(zs%1000)/100;
            disp[1]=(zs%100)/10;
            disp[0]=zs%10;
            }
            begin1=0;
            js=0;
            time0=0;
            time1=0;
            en_bj=0;//非保護狀態(tài)
            }
            //////
            TL1=0xaf;//50ms
            TH1=0x3c;/*計數(shù)初值重裝*/
            TR1=1;/*啟動T1*/
            EA=1;
            }///0
            }
            voiddelay(uchari)
            {ucharj;
            for(j=0;j<=i;j++);
            }

            voiddelay1(uchari)
            {ucharj;
            for(j=0;j<=i;j++);
            }

            voidflash()
            {
            _nop_();
            _nop_();
            _nop_();
            //_nop_();
            //_nop_();
            }
            voidx24c02_init()
            {
            scl=1;
            flash();
            sda=1;
            flash();
            }
            voidstart()
            {
            sda=1;
            flash();
            scl=1;
            flash();
            sda=0;
            flash();
            scl=0;
            flash();
            }
            voidstop()
            {
            sda=0;
            flash();
            scl=1;
            flash();
            sda=1;
            flash();
            }
            voidack()
            {
            sda=0;
            flash();
            scl=1;
            flash();
            scl=0;
            flash();
            }
            voidnack()
            {
            sda=1;
            flash();
            scl=1;
            flash();
            scl=0;
            flash();
            }
            voidwritex(ucharj)
            {
            uchari,temp;
            temp=j;
            for(i=0;i<8;i++){
            temp=temp<<1;
            scl=0;
            flash();
            sda=CY;
            flash();
            scl=1;
            flash();
            }
            scl=0;
            flash();
            sda=1;
            flash();
            }
            ucharreadx()
            {
            uchari,j,k=0;
            scl=0;
            flash();
            sda=1;
            for(i=0;i<8;i++){
            flash();
            scl=1;
            flash();
            if(sda==1)j=1;
            elsej=0;
            k=(k<<1)│j;
            scl=0;
            flash();
            }
            return(k);
            }

            ucharx24c02_read(ucharaddr)
            {
            uchari;
            start();
            writex(0xa0);
            ack();
            writex(addr);
            ack();
            start();
            writex(0xa1);
            ack();
            i=readx();
            nack();
            stop();
            delay(10);
            return(i);
            }
            voidx24c02_write(ucharaddr,ucharinfo)
            {
            //EA=0;//中斷總禁止
            start();
            writex(0xa0);
            ack();
            writex(addr);
            ack();
            writex(info);
            ack();
            stop();
            //EA=1;//中斷開//設置狀態(tài)禁止所有外部中斷
            }
            voidgetdate(void)
            {ucharda5,da4,da3,da2,da1,da0;
            x24c02_init();
            da0=(x24c02_read(0x00)%10);
            da1=(x24c02_read(0x01)%10);
            da2=(x24c02_read(0x02)%10);
            da3=(x24c02_read(0x03)%10);
            da4=(x24c02_read(0x04)%10);
            da5=(x24c02_read(0x05)%10);
            ltj=(x24c02_read(0x06)%10);
            count=da3*1000+da2*100+da1*10+da0;
            bh=da5*10+da4;
            if(bh>99){bh=0;}
            if(count>6000){count=6000;}
            if(ltj>1){ltj=1;}

            }
            voidsavedate(void)
            {ucharda5,da4,da3,da2,da1,da0;
            da5=bh/10;
            da4=bh%10;
            da3=count/1000;
            da2=(count%1000)/100;
            da1=(count%100)/10;
            da0=count%10;
            dsp();
            x24c02_init();
            x24c02_write(0x00,da0);
            x24c02_write(0x00,da0);
            dsp();
            x24c02_write(0x01,da1);
            x24c02_write(0x01,da1);
            dsp();
            x24c02_write(0x02,da2);
            x24c02_write(0x02,da2);
            dsp();
            x24c02_write(0x03,da3);
            x24c02_write(0x03,da3);
            dsp();
            x24c02_write(0x04,da4);
            x24c02_write(0x04,da4);
            dsp();
            x24c02_write(0x05,da5);
            x24c02_write(0x05,da5);
            dsp();
            x24c02_write(0x06,ltj);
            x24c02_write(0x06,ltj);
            dsp();
            }
            //動態(tài)顯示
            voiddsp(void)
            {
            P2=ascled[disp[0]];led0=0;delay(50);led0=1;//led0=0顯示,=1不顯示
            P2=ascled[disp[1]];led1=0;delay(50);led1=1;
            P2=ascled[disp[2]];led2=0;delay(50);led2=1;
            P2=ascled[disp[3]];led3=0;delay(50);led3=1;
            }

            //閃爍動態(tài)顯示有效
            voiden_dsp(void)
            {disp_j=0;
            disp_i[0]=0x0;//顯示閃動標志0顯示
            disp_i[1]=0x0;
            disp_i[2]=0x0;
            disp_i[3]=0x0;
            }
            //閃爍動態(tài)顯示
            voiddsp_flash(void)
            {
            disp_j++;
            if(disp_j>240)
            {disp_j=0;
            disp_i[disp_c]=!(disp_i[disp_c]&0x01);
            }
            P2=ascled[disp[0]];led0=disp_i[0];delay(50);led0=1;//led0=0顯示,=1不顯示
            P2=ascled[disp[1]];led1=disp_i[1];delay(50);led1=1;
            P2=ascled[disp[2]];led2=disp_i[2];delay(50);led2=1;
            P2=ascled[disp[3]];led3=disp_i[3];delay(50);led3=1;
            }

            voiddisplay(void)
            {
            //設定狀態(tài)時如果有鍵按下就不閃爍
            if((ss==0)││(ktemp!=0x1b))
            {
            dsp();
            }
            else
            {
            dsp_flash();
            }
            }

            voidkbscan(void)//鍵盤掃描
            {uchartemp,i;//0
            temp=P3;
            ktemp=temp&0x1b;//檢查key0,key1,key2,key300011011
            if(ktemp!=0x1b)
            {//1
            for(i=0;i<250;i++){display();}
            temp=P3;
            if(ktemp==(temp&ktemp))
            {//2
            //keyval=ktemp;//記錄鍵值
            if(key_set==1)
            {//3
            switch(ktemp){
            case0x1a://key0
            {
            /////////////////
            m++;
            if(m>2){m=1;}
            switch(m){
            case1:////顯示參數(shù)名稱
            ss=0;disp_c=0;en_dsp();
            switch(mi){
            case0:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=1;
            dsp();
            break;
            case1:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=2;
            dsp();
            break;
            case2:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間,2顯示高低轉速測量
            disp[2]=11;
            disp[1]=10;
            disp[0]=3;
            dsp();
            break;
            }
            break;
            case2:////顯示參數(shù)
            ss=1;en_dsp();
            switch(mi){//顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            case0:
            disp[3]=count/1000;
            disp[2]=(count%1000)/100;
            disp[1]=(count%100)/10;
            disp[0]=count%10;
            for(i=0;i<150;i++){dsp();}
            break;
            case1:
            disp[3]=11;
            disp[2]=11;
            disp[1]=bh/10;
            disp[0]=bh%10;
            for(i=0;i<150;i++){dsp();}
            break;
            case2:
            disp[3]=11;
            disp[2]=11;
            disp[1]=11;
            disp[0]=ltj;
            for(i=0;i<150;i++){dsp();}
            break;
            }
            break;
            }
            /////////////////
            }
            case0x19://key1
            {
            break;
            }
            case0x13://key2
            {
            //閃動位移
            if(ss==1)
            {
            switch(mi){
            case0:
            en_dsp();////預設轉速4位顯示
            disp_c++;
            if(disp_c>3){disp_c=0;}
            break;
            case1:
            en_dsp();////輸出保護時間2位顯示
            disp_c++;
            if(disp_c>1){disp_c=0;}
            break;
            case2:
            break;
            }
            }
            if(m==1)
            {//保存數(shù)據(jù)退出設置狀態(tài)
            savedate();
            //借用后恢復
            //bjing=0;
            m=0;
            mi=0;
            key_set=0;
            ss=0;
            en_dsp();
            disp[0]=0;
            disp[1]=0;
            disp[2]=0;
            disp[3]=0;
            for(i=0;i<150;i++){dsp();}
            if(ltj==1)
            {
            TMOD=0x11;TL0=0xaf;TH0=0x3c;TL1=0xaf;TH1=0x3c;ET0=1;ET1=1;TR0=1;TR1=1;
            }
            EA=1;//數(shù)據(jù)保存允許中斷
            }
            break;
            }
            case0x0b://key3
            {
            /////////////////
            if(m==1)
            {disp_c=0;
            mi++;if(mi>2){mi=0;}
            switch(mi){
            case0:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=1;
            dsp();
            break;
            case1:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=2;
            dsp();
            break;
            case2:
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=3;
            dsp();
            break;
            }
            }
            else
            {
            m=0;
            switch(mi){
            case0:
            disp[disp_c]++;
            if(disp[disp_c]>9){disp[disp_c]=0;}
            if((disp[3]*1000+disp[2]*100+disp[1]*10+disp[0])>6000)
            {//如果超出設定范圍
            disp[3]=0;disp[2]=0;disp[1]=0;disp[0]=0;
            }
            count=disp[3]*1000+disp[2]*100+disp[1]*10+disp[0];
            dsp_flash();
            break;
            case1:
            disp[disp_c]++;
            if(disp[disp_c]>9){disp[disp_c]=0;}
            bh=disp[1]*10+disp[0];
            dsp_flash();
            break;
            case2:
            disp[disp_c]++;
            if(disp[disp_c]>1){disp[disp_c]=0;}
            ltj=disp[0];
            dsp_flash();
            break;
            }
            }
            break;
            }
            }
            }//3
            else
            {//4
            switch(ktemp){
            case0x1a://key0
            {
            ////////////////
            //禁止測轉速
            EA=0;
            key_set=1;
            en_bj=0;//如果設定狀態(tài)允許報警標志0
            out=0;//
            /////
            //bjing=0;
            ///disp_c=0;//time0
            /////
            m=1;
            disp[3]=11;////顯示設定參數(shù)mi=0顯示預設報警值,1顯示保護檢測時間
            disp[2]=11;
            disp[1]=10;
            disp[0]=1;
            for(i=0;i<150;i++){dsp();}

            break;
            }
            case0x19://key1
            {
            //允許報警
            en_bj=1;
            break;
            }
            }
            }//4
            }//2
            }//1
            }//0

            main()
            {uchari;
            out=0;
            key_set=0;
            disp[0]=0;
            disp[1]=0;
            disp[2]=0;
            disp[3]=0;
            for(i=0;i<250;i++)display();

            getdate();
            en_dsp();
            //////
            time0=0;time1=0;zs=0;bj=0;js=0;begin1=0;bjing=0;
            EA=0;EX0=1;IT0=1;PT1=1;//CPU關中斷,INT0請求中斷,設定INT0觸發(fā)方式
            if(ltj==1)
            {
            TMOD=0x11;TL0=0xaf;TH0=0x3c;TL1=0xaf;TH1=0x3c;ET0=1;ET1=1;TR0=1;TR1=1;/*50ms,T1T0工作在定時器方式1,T1開中斷,啟動T1*/
            }
            else
            {
            TMOD=0x11;TL0=0xaf;TH0=0x3c;ET0=1;TR0=1;
            }
            EA=1;
            //////
            begin:
            if(bjing==1)
            {
            bj++;
            if(bj>500)
            {
            bjing=0;out=0;//清除報警
            bj=0;bhtm=0;
            }

            }
            else
            {
            bj=0;
            }
            display();
            kbscan();
            gotobegin;
            }



            關鍵詞: c51測轉

            評論


            技術專區(qū)

            關閉