久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1655|回復: 0
打印 上一主題 下一主題
收起左側

步進電機仿真

[復制鏈接]
跳轉到指定樓層
樓主
ID:313067 發表于 2018-4-24 16:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg51.h>      
#include <intrins.h>  
#define uchar unsigned char
#define uint  unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //??
unsigned char code REV[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //??
//unsigned char code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //??
//unsigned char code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //??
sbit  K1   = P2^3;       //?????
sbit  K2   = P2^4;       //????
sbit  K3   = P2^5;       //????
sbit  K4   = P2^6;       //????

sbit  LCD_RS = P2^0;            
sbit  LCD_RW = P2^1;
sbit  LCD_EN = P2^2;

bit  on_off=0;            //???????
bit  direction=1;         //????
bit  rate_dr=1;           //????
bit  snum_dr=1;           //????

uchar code  cdis1[ ] = {"Bi Ye She Ji "};
uchar code  cdis2[ ] = {"    LuoWeilan"};
uchar code  cdis3[ ] = {"    STOP        "};
uchar code  cdis4[ ] = {"NUM:    RATE:   "};
uchar code  cdis5[ ] = {"  RUNNING       "};

uchar   m,v=0,q=0;

uchar   number=0,number1=0;
uchar   snum=20,snum1=20;       //?????
uchar   rate=3;               //?????
uchar   data_temp,data_temP0,data_temp2;   


/********************************************************/
/*                                                  
/* ??t??
/* 11.0592MHz??,???1ms                                    
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uchar k;
   while(t--)
   {
     for(k=0; k<124; k++)
     { }
   }
}

/********************************************************/
void delayB(uchar x)    //x*0.14MS
{
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
}


/********************************************************/
/*                                                               
/*??LCD???                                                   
/*lcd_busy?1?,?,????0?,?,????????     
/*                                                               
/********************************************************/

bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayNOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
}

/********************************************************/
/*                                                                 
/*??????LCD                                                
/*RS=L,RW=L,E=???,D0-D7=????                             
/*                                                               
/********************************************************/

void lcd_wcmd(uchar cmd)

{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;  
}

/********************************************************/
/*                                                               
/*??????LCD                                                  
/*RS=H,RW=L,E=???,D0-D7=???                              
/*                                                               
/********************************************************/

void lcd_wdat(uchar dat)
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}

/********************************************************/
/*                                                               
/*  LCD?????                                                
/*                                                               
/********************************************************/

void lcd_init()
{
    delay(30);                  
    lcd_wcmd(0x38);      //16*2??,5*7??,8???
    delay(5);
    lcd_wcmd(0x38);         
    delay(5);
    lcd_wcmd(0x38);         
    delay(5);

    lcd_wcmd(0x0c);      //???,???
    delay(5);
    lcd_wcmd(0x06);      //????
    delay(5);
    lcd_wcmd(0x01);      //??LCD?????
    delay(5);
}

/********************************************************/
/*                                                                 
/*  ??????                                                  
/*                                                               
/********************************************************/

void lcd_pos(uchar pos)
{                          
  lcd_wcmd(pos | 0x80);  //????=80+????
}


/********************************************************/
/*                                                      
/* LCD1602???????                                             
/*                                                      
/********************************************************/
void  LCD_init_DIS()
{            
     delay(10);                 //??
     lcd_init();                //???LCD            

     lcd_pos(0);                //????????????1???
     m = 0;
     while(cdis1[m] != '\0')
      {                         //????
        lcd_wdat(cdis1[m]);
        m++;
      }

     lcd_pos(0x40);             //???????????1???
     m = 0;
     while(cdis2[m] != '\0')
      {
        lcd_wdat(cdis2[m]);      //????
        m++;
      }

      delay(3000);               //??        

      lcd_pos(0);                //????????????1???
      m = 0;
      while(cdis3[m] != '\0')
        {                        //????
          lcd_wdat(cdis3[m]);
          m++;
        }

      lcd_pos(0x40);             //???????????1???
      m = 0;
     while(cdis4[m] != '\0')
        {
          lcd_wdat(cdis4[m]);    //????
          m++;
        }      
        for(m=0;m<2;m++)
          {
       lcd_pos(0x0c+m);    //??????
             lcd_wdat(0x3e);
    }

}
/********************************************************/
/*
/*???????
/*
/********************************************************/
void  data_conv()
{
     data_temP0=data_temp/10;       //??
  if(data_temP0==0)
  {data_temP0=0x20;}             //???0???
     else
  {data_temP0=data_temP0+0x30;}

   data_temp2=data_temp%10;       //??
     data_temp2=data_temp2+0x30;
}

/********************************************************/
/*
/*???????
/*
/********************************************************/
void  data_dis()
{
    data_temp = snum;        //????
    data_conv();
       lcd_pos(0x44);
       lcd_wdat(data_temP0);
       lcd_pos(0x45);
       lcd_wdat(data_temp2);

    data_temp = rate;         //????
    data_conv();
       lcd_pos(0x4d);
       lcd_wdat(data_temP0);
       lcd_pos(0x4e);
       lcd_wdat(data_temp2);
}
/********************************************************
/*
/* ????????
/*
/********************************************************/
void  motor_DR()
  {
       if(direction==1)           //??????
        { for(m=0;m<2;m++)
          {
      lcd_pos(0x0c+m);      //??????
            lcd_wdat(0x3e);
     }
   }
        else
         { for(m=0;m<2;m++)       //??????
           {
          lcd_pos(0x0c+m);     //??????
             lcd_wdat(0x3c);
     }
   }
  }

/********************************************************
/*
/* ??????
/*
/********************************************************/
void  motor_RUN()
{
      if(on_off==1)
    { TR0=1;
      lcd_pos(0);     //????????????1???
         m = 0;
         while(cdis5[m] != '\0')
          { lcd_wdat(cdis5[m]);      //RUNNING
            m++;   }
            motor_DR();              //
    }  
      else  
    { TR0=0; P0 =0x0f;
   lcd_pos(0);     //????????????1???
         m = 0;
         while(cdis3[m] != '\0')
          { lcd_wdat(cdis3[m]);      //STOP
            m++;   }
            motor_DR();              //
   snum=snum1;             //
   number1=0;              //??????
         }
  }


/********************************************************
*                                                      
*  ???                                               
*                                                      
*********************************************************/

main()
{               
         LCD_init_DIS();

   TMOD = 0x01;       //T0????1
   TL0  = 0x33;
   TH0  = 0xf5;
   EA   = 1;
   ET0  = 1;

   P1=0;
   while(1)
    {  
       if(K1==0)
    {
         //beep();
      while(K1==0);       //?????
      on_off=~on_off;      
         motor_RUN();  
        }   //K1 end
/********************************************************/
      if(K2==0)   
       {
        if(snum_dr==1)
    { snum++;
        snum1=snum;
      if(snum==0x14)
            { snum_dr=~snum_dr;}
    }
   else  
     {snum--;
   snum1=snum;
      if(snum==0x01)
   { snum_dr=~snum_dr; }
     }

    } //K2  end
/********************************************************/
        if(K3==0)   
      {
   direction=~direction;
         motor_DR();
      }//K3 end

/********************************************************/
        if(K4==0)   
       {
   if(rate_dr==1)
    { rate++;
      if(rate==0x10)
            { rate_dr=~rate_dr;}
    }
    else  
     {
      rate--;
      if(rate==0x01)
   { rate_dr=~rate_dr; }
     }
  } //K4 end

/********************************************************/
      if(number1==snum1)   //?????????  
     { number1=0;
         on_off=0;
         TR0=0;
        snum=snum1;
   P1=0x0f;
    motor_RUN();
    }         
         data_dis();
}  // while(1) end
}  //main end


/********************************************************/
/*
/*  ??? T0 ??
/*
/********************************************************/

void  motor_onoff()  interrupt  1  
{     
       TL0  = 0x33;
       TH0  = 0xf5;
       q++;
    if(q < rate)
        { return; }
    else
       {  q=0;   
       number++;                  //????

      if(number==64)              //64????????
       { snum--;
      number=0;
            number1++; }          //??????


         if(direction==1)            //????
       { if(v<8)  
         {P1 = FFW[v];v++;}       //???,??
        if(v==8)
        { v=0;  
          }

      else
       { if(v<8)  
         {P1 = REV[v];v++;}       //???,??
         if(v==8)
         { v=0; }
          }
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久91 | 中文字幕一区二区三区日韩精品 | 日韩欧美精品在线播放 | 天天噜天天干 | 欧美一级视频免费看 | 黄色片在线 | 欧美日韩综合精品 | 欧美激情在线观看一区二区三区 | 日韩一区二区黄色片 | 久久国产精品一区二区三区 | 久久大陆 | 久久久91精品国产一区二区三区 | 天天夜碰日日摸日日澡 | 欧美一级免费看 | 国产精品免费在线 | 久草在线视频中文 | 男女网站免费观看 | 五月天综合影院 | 久久伦理中文字幕 | 久久91| 午夜精品视频 | 国产最新视频在线 | 高清视频一区 | 97超碰站| 国产一区二区三区视频在线观看 | 欧美综合自拍 | 成人av播放 | 在线不卡av | 亚洲成人午夜电影 | 精品久| 久久久综合久久 | 日本一区二区三区四区 | 成人免费一区二区三区牛牛 | 免费成人在线网站 | 国产欧美日韩一区二区三区 | 欧美不卡视频一区发布 | 成人小视频在线观看 | 国产日韩欧美一区二区 | 久久精品性视频 | 久草中文在线观看 | 欧美一区二区三区免费电影 |