<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > c51寫的測(cè)轉(zhuǎn)速源程序

          c51寫的測(cè)轉(zhuǎn)速源程序

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

          #include
          #include
          #include

          本文引用地址:http://www.ex-cimer.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中讀取一個(gè)字節(jié)數(shù)據(jù)
          voidx24c02_write(ucharaddr,ucharinfo);//向24c02的addr地址中寫入一字節(jié)數(shù)據(jù)info
          voidx24c02_init();//24c02初始化子程序
          voiddelay(ucharx);//延時(shí)子程序ms
          voidflash();//24c02延時(shí)子程序nop
          voidstart();//24c02ic開(kāi)始
          voidstop();//24c02ic停止
          voidack();//24c02ic應(yīng)答
          voidnack();//24c02ic不應(yīng)答
          voidwritex(ucharj);//24c02ic寫1byte數(shù)據(jù)
          voiddsp();//顯示子程序
          voiddelay(uchari);//us延時(shí)
          voiddelay1(uchari);//us延時(shí)
          ucharreadx();//24c02ic讀1byte數(shù)據(jù)
          /****************全局變量定義*******************/
          ucharktemp;
          uchardisp[4];

          uintcount;//預(yù)設(shè)報(bào)警值
          uintzs;//轉(zhuǎn)速值
          uinttime0;//
          uinttime1;//記時(shí)器
          bitbegin1;//T1開(kāi)始啟動(dòng)標(biāo)志
          ucharltj=1;//高低速
          uintjs;//脈沖計(jì)數(shù)器
          ulongt0;
          ulongt1;

          bitkey_set;//設(shè)置標(biāo)志
          uchardisp_i[4];//顯示閃動(dòng)標(biāo)志
          uintdisp_c;//閃動(dòng)顯示計(jì)數(shù)器//借用time0
          uintdisp_j;//閃動(dòng)顯示定時(shí)//借用time1
          bitss=0;//閃動(dòng)標(biāo)志
          uintbj;//報(bào)警輸出信號(hào)定時(shí)
          biten_bj=0;//允許報(bào)警標(biāo)志
          bitbjing=0;//報(bào)警中

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

          voidint_ex0()interrupt0using0
          {
          /*外部中斷0*/
          delay1(20);
          if(key_set==0){///0非設(shè)置狀態(tài)
          if(in==0){
          if(ltj==1)
          {
          js++;
          EA=0;
          TR0=0;
          TL0=0xaf;//50ms
          TH0=0x3c;/*計(jì)數(shù)初值重裝*/
          if(begin1==0)
          {//開(kāi)始記數(shù)
          begin1=1;
          js=0;
          TR1=0;
          TL1=0xaf;//50ms
          TH1=0x3c;/*計(jì)數(shù)初值重裝*/
          TR1=1;/*啟動(dòng)T1*/
          }
          /*啟動(dòng)T0*/
          TR0=1;
          time0=0;
          EA=1;
          }
          else
          {
          if(begin1==0)
          {
          begin1=1;
          EA=0;
          TR0=0;
          zs=0;
          /*啟動(dòng)T0*/
          TL0=0xaf;//50ms
          TH0=0x3c;/*計(jì)數(shù)初值重裝*/
          TR0=1;
          time0=0;
          EA=1;
          }
          else
          {
          EA=0;
          TR0=0;
          begin1=0;
          if(time0==0)
          {
          zs=0;
          }
          else
          {//計(jì)算轉(zhuǎn)速
          t0=(time0*50000+(TH0*256+TL0)-0x3caf);
          if(t0>0){zs=60000000/t0;}
          }
          if(zs{
          if(en_bj==1)
          {
          out=1;
          bjing=1;//報(bào)警
          }
          }
          disp[3]=(zs%10000)/1000;//顯示轉(zhuǎn)速
          disp[2]=(zs%1000)/100;
          disp[1]=(zs%100)/10;
          disp[0]=zs%10;
          TL0=0xaf;//50ms
          TH0=0x3c;/*計(jì)數(shù)初值重裝*/
          TR0=1;
          time0=0;
          EA=1;
          }
          }
          }
          //
          }///0
          }
          voidtimer0(void)interrupt1using0//記時(shí)定時(shí)中斷
          {uchart;
          //////
          if(key_set==0){///0非設(shè)置狀態(tài)
          time0++;
          TL0=0xaf;//50ms
          TH0=0x3c;/*計(jì)數(shù)初值重裝*/
          TR0=1;
          /*啟動(dòng)T1*/
          t=time0%20;
          if(t==0){en_bj=0;}
          if(time0>1200)//超時(shí)
          {
          time0=0;
          disp[3]=0;
          disp[2]=0;
          disp[1]=0;
          disp[0]=0;
          zs=0;
          if(en_bj==1)
          {
          out=1;
          bjing=1;//報(bào)警
          }
          }
          }///0
          }
          voidtimer1(void)interrupt3using0//1s記時(shí)定時(shí)中斷
          {
          /*T1中斷服務(wù)程序入口*/
          //////
          if(key_set==0){///0非設(shè)置狀態(tài)
          time1++;
          if(time1==20)//1s
          {EA=0;
          TR1=0;
          //計(jì)算轉(zhuǎn)速
          ///////////////////
          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;//報(bào)警
          }
          bhtm++;
          }
          }
          else
          {
          bhtm=0;
          }
          if(zs==0)
          {///////
          ///////
          disp[3]=0;
          disp[2]=0;
          disp[1]=0;
          disp[0]=0;
          }
          else
          {
          disp[3]=zs/1000;//顯示轉(zhuǎn)速
          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;//非保護(hù)狀態(tài)
          }
          //////
          TL1=0xaf;//50ms
          TH1=0x3c;/*計(jì)數(shù)初值重裝*/
          TR1=1;/*啟動(dòng)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;//中斷開(kāi)//設(shè)置狀態(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();
          }
          //動(dòng)態(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;
          }

          //閃爍動(dòng)態(tài)顯示有效
          voiden_dsp(void)
          {disp_j=0;
          disp_i[0]=0x0;//顯示閃動(dòng)標(biāo)志0顯示
          disp_i[1]=0x0;
          disp_i[2]=0x0;
          disp_i[3]=0x0;
          }
          //閃爍動(dòng)態(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)
          {
          //設(shè)定狀態(tài)時(shí)如果有鍵按下就不閃爍
          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è)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          disp[2]=11;
          disp[1]=10;
          disp[0]=1;
          dsp();
          break;
          case1:
          disp[3]=11;////顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          disp[2]=11;
          disp[1]=10;
          disp[0]=2;
          dsp();
          break;
          case2:
          disp[3]=11;////顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間,2顯示高低轉(zhuǎn)速測(cè)量
          disp[2]=11;
          disp[1]=10;
          disp[0]=3;
          dsp();
          break;
          }
          break;
          case2:////顯示參數(shù)
          ss=1;en_dsp();
          switch(mi){//顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          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
          {
          //閃動(dòng)位移
          if(ss==1)
          {
          switch(mi){
          case0:
          en_dsp();////預(yù)設(shè)轉(zhuǎn)速4位顯示
          disp_c++;
          if(disp_c>3){disp_c=0;}
          break;
          case1:
          en_dsp();////輸出保護(hù)時(shí)間2位顯示
          disp_c++;
          if(disp_c>1){disp_c=0;}
          break;
          case2:
          break;
          }
          }
          if(m==1)
          {//保存數(shù)據(jù)退出設(shè)置狀態(tài)
          savedate();
          //借用后恢復(fù)
          //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è)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          disp[2]=11;
          disp[1]=10;
          disp[0]=1;
          dsp();
          break;
          case1:
          disp[3]=11;////顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          disp[2]=11;
          disp[1]=10;
          disp[0]=2;
          dsp();
          break;
          case2:
          disp[3]=11;////顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          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)
          {//如果超出設(shè)定范圍
          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
          {
          ////////////////
          //禁止測(cè)轉(zhuǎn)速
          EA=0;
          key_set=1;
          en_bj=0;//如果設(shè)定狀態(tài)允許報(bào)警標(biāo)志0
          out=0;//
          /////
          //bjing=0;
          ///disp_c=0;//time0
          /////
          m=1;
          disp[3]=11;////顯示設(shè)定參數(shù)mi=0顯示預(yù)設(shè)報(bào)警值,1顯示保護(hù)檢測(cè)時(shí)間
          disp[2]=11;
          disp[1]=10;
          disp[0]=1;
          for(i=0;i<150;i++){dsp();}

          break;
          }
          case0x19://key1
          {
          //允許報(bào)警
          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關(guān)中斷,INT0請(qǐng)求中斷,設(shè)定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工作在定時(shí)器方式1,T1開(kāi)中斷,啟動(dòng)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;//清除報(bào)警
          bj=0;bhtm=0;
          }

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



          關(guān)鍵詞: c51測(cè)轉(zhuǎn)

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();