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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī) 液體點(diǎn)滴控制

          單片機(jī) 液體點(diǎn)滴控制

          作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
          //==============================200700821=================//

          //====================從機(jī)滴速測(cè)量========================//
          #include
          //====================數(shù)據(jù)類型定義========================//
          #defineUchar unsigned char
          #define Uint unsigned int
          //====================常量定義============================//
          Uchar t;
          Uchar p;
          Uchar m;
          int time; //ms為單位

          本文引用地址:http://www.ex-cimer.com/article/201611/320794.htm

          //=====================LCD1602變量定義====================//
          char xdata Lcd1602CmdPort _at_ 0xf9fc;//E=1 RS=0 RW=0 寫(xiě)命令
          char xdata Lcd1602WdataPort _at_ 0xf9fd; //E=1 RS=1 RW=0 寫(xiě)
          char xdata Lcd1602StatusPort _at_ 0xf9fe; //E=1 RS=0 RW=1
          #define Busy0x80 // 忙判別位
          static unsigned char ucLcdPosX; //當(dāng)前顯示指針
          static unsigned char ucLcdPosY;
          //=====================LCD1602函數(shù)定義====================//
          extern void LcdWriteData( char dataW ); //LCD寫(xiě)數(shù)據(jù)
          extern void LcdWriteCommand( Uchar CMD,Uchar AttribC ); //LCD寫(xiě)命令
          extern void LcdReset( void );
          extern void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
          void disp_v(void); //顯示速度函數(shù)
          //=====================延時(shí)函數(shù)定義=======================//
          extern void Delay1000Ms(void);
          extern void Delay400Ms(void);
          extern void Delay5Ms(void);
          void delay(Uint m);
          //======================滴速變量定義======================//
          Uchar set_v; //設(shè)定的速度
          Uchar real_v; //實(shí)際速度
          //======================中斷初始化函數(shù)定義================//
          void int_init(void);
          //=======================步進(jìn)電機(jī)變量定義=================//
          Uchar code FFW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
          Uchar code REV[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
          sbit K1 = P1^7; //A
          sbit K2 = P1^6; //B
          sbit K3 = P1^5; //C
          sbit K4 = P1^4; //D
          //=======================步進(jìn)電機(jī)函數(shù)定義=================//
          void motor_ffw(void);//正轉(zhuǎn)
          void motor_rev(void);//反轉(zhuǎn)
          void control(void); //調(diào)節(jié)滴速
          //===================LCD1602函數(shù)說(shuō)明======================//

          /*=======================================================
          顯示光標(biāo)定位4行
          =======================================================*/

          void LocateXY( char posx,char posy) {

          Uchar temp;

          temp = posx & 0xf;
          posy &= 0x03;
          switch ( posy)
          {
          case 0:;
          break;
          case 1:temp |= 0x40;
          break;
          default:;
          }
          temp |= 0x80;
          LcdWriteCommand(temp,0);
          }
          /*=======================================================
          按指定位置顯示數(shù)出一個(gè)字符
          =======================================================*/
          void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {

          LocateXY( x, y );// 定位顯示地址
          LcdWriteData( Wdata );// 寫(xiě)字符
          }

          /*=======================================================
          初始化程序, 必須按照產(chǎn)品資料介紹的初始化過(guò)程進(jìn)行
          =======================================================*/
          void LcdReset( void ) {

          LcdWriteCommand( 0x38, 0);// 顯示模式設(shè)置(不檢測(cè)忙信號(hào))
          Delay5Ms();
          LcdWriteCommand( 0x38, 0);// 共三次
          Delay5Ms();
          LcdWriteCommand( 0x38, 0);
          Delay5Ms();

          LcdWriteCommand( 0x38, 1);// 顯示模式設(shè)置(以后均檢測(cè)忙信號(hào) 參數(shù)--"1")
          LcdWriteCommand( 0x08, 1);// 顯示關(guān)閉
          LcdWriteCommand( 0x01, 1);// 顯示清屏
          LcdWriteCommand( 0x06, 1);// 顯示光標(biāo)移動(dòng)設(shè)置
          LcdWriteCommand( 0x0c, 1);// 顯示開(kāi)及光標(biāo)設(shè)置
          }

          /*=======================================================
          寫(xiě)控制字符子程序: E=1 RS=0 RW=0
          =======================================================*/
          void LcdWriteCommand( Uchar CMD,Uchar AttribC )
          {
          if (AttribC)
          {
          P0=0xff;
          while( Lcd1602StatusPort & Busy );// 檢測(cè)忙信號(hào)?
          }
          Lcd1602CmdPort = CMD;
          }

          /*=======================================================
          當(dāng)前位置寫(xiě)字符子程序: E =1 RS=1 RW=0
          =======================================================*/
          void LcdWriteData( char dataW )
          {
          while( Lcd1602StatusPort & Busy );// 檢測(cè)忙信號(hào)

          Lcd1602WdataPort = dataW;
          }
          //=====================延時(shí)函數(shù)說(shuō)明==========================//
          // 短延時(shí)
          void Delay5Ms(void)
          {
          Uint i = 5552;
          while(i--);
          }

          //長(zhǎng)延時(shí)
          void Delay400Ms(void)
          {
          Uchar i = 5;
          Uint j;
          while(i--)
          {

          j=1817; //100Ms
          while(j--);
          };
          }
          //更長(zhǎng)延時(shí)
          void Delay1000Ms(void)
          {
          Uchar i = 5;
          Uint j;
          while(i--)
          {
          j=18172;

          while(j--);
          };
          }
          void delay(Uint m)
          {
          Uint k;
          while(m--)
          {
          for(k=0; k<125; k++)
          { }
          }
          }
          //==================中斷初始化函數(shù)說(shuō)明====================//
          void int_init(void)
          {EA=1;
          EX1=1;
          EX0=1;
          ET1=1;

          }
          //===================外部中斷0函數(shù)說(shuō)明====================//
          void high(void) interrupt 0 using 0
          {
          EA=0;
          DispOneChar(8,0,E);
          EA=1;
          }
          //===================外部中斷1函數(shù)說(shuō)明====================//
          void count(void) interrupt 2 using 1
          {
          EX1=0;
          while (INT1==0);


          m++;
          if (p==3)
          {
          TR1=0;
          time=(TH1*256+TL1-5536)/1000+60*t;
          real_v=60000/(time/3);
          t=0;
          p=0;
          time=0;

          }
          if(p<3&&p!=0)
          {
          p++;

          }
          if (p==0)
          {
          t=0;
          TH1=0x15;
          TL1=0x9f;
          TR1=1;
          p++;

          }
          }
          //====================定時(shí)器1中斷函數(shù)說(shuō)明=================//
          void get_time(void) interrupt 3 using 3
          {
          TR1=0;
          t++;
          if(t%4==0)
          EX1=1;
          TH1=0x15;
          TL1=0x9f;
          TR1=1;
          }

          //=======================顯示速度函數(shù)說(shuō)明=================//
          void disp_v(void)
          {
          Uchar i;
          Uchar v_real[16]="realspeed: /m";
          v_real[10]=real_v/100+0x30;
          v_real[11]=(real_v%100)/10+0x30;
          v_real[12]=real_v%10+0x30;
          for(i=0;i<15;i++)
          {
          DispOneChar(i,0,v_real[i]);
          }
          }
          //======================步進(jìn)電機(jī)函數(shù)說(shuō)明==================//
          /********************************************************/
          /*
          /*步進(jìn)電機(jī)正轉(zhuǎn)
          /*
          /********************************************************/
          void motor_ffw()
          {
          Uchar i;


          for (i=0; i<8; i++) //一個(gè)周期轉(zhuǎn)7.2度
          {
          P1 = FFW[ i ]; //取數(shù)據(jù)
          delay(15); //調(diào)節(jié)轉(zhuǎn)速
          }

          }
          /********************************************************/
          /*
          /*步進(jìn)電機(jī)反轉(zhuǎn)
          /*
          /********************************************************/
          void motor_rev()
          {
          Uchar i;

          for (i=0; i<8; i++) //一個(gè)周期轉(zhuǎn)7.2度
          {
          P1 = REV[ i ]; //取數(shù)據(jù)
          delay(15); //調(diào)節(jié)轉(zhuǎn)速
          }

          }
          //====================調(diào)節(jié)滴速函數(shù)說(shuō)明====================//
          void control(void)
          {char count;


          count=set_v-real_v;
          if (count>=5)
          {
          motor_rev();
          }
          else if (count<=-5)
          {
          motor_ffw();
          }
          else
          {
          EX1=0;
          ET1=0;
          Delay1000Ms();
          Delay1000Ms();
          EX1=1;
          ET1=1;
          }
          }
          //======================主函數(shù)說(shuō)明========================//
          main()
          {
          TMOD=0x10;
          IT1=0;
          set_v=100;
          p=0;
          t=0;
          m=0;
          time=0;
          real_v=0;
          LcdReset();
          Delay400Ms();
          int_init();
          while(1)
          {
          disp_v();
          DispOneChar(4,1,m/100+48);
          DispOneChar(5,1,m%100/10+48);
          DispOneChar(6,1,m%10+48);
          if(real_v)
          control();
          else
          motor_ffw();

          }

          }

          //========================================================//



          評(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); })();