小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

求指導(dǎo) 51單片機(jī)控制 57步進(jìn)電機(jī)|我愛單片機(jī)

 tmxk0574 2019-02-06
灌水-------------------------u哦發(fā)哦

N年以前寫的步進(jìn)電機(jī)測(cè)試程序,可以供樓主可以參考參考

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CP=P1^4;           //脈沖輸出
sbit DIR=P1^5;         //方向控制
sbit enable=P1^6;     //松電機(jī)或緊電機(jī)

sbit key_dir=P3^3;    //正反轉(zhuǎn)按鍵
sbit key_up=P3^4;      //轉(zhuǎn)速增加按鍵
sbit key_down=P3^2;     //轉(zhuǎn)速降低按鍵
sbit key_en=P2^7;         //使能驅(qū)動(dòng)器按鍵

sbit lcd_rs=P3^7;   //LCD1602 Port
sbit lcden=P3^5;
sbit lcd_rw=P3^6;

uchar table1[]='SPEED:';
uchar table2[]='DIR:';
uchar table3[]='ENABLE ';
uchar table4[]='DISABLE';
uchar table5[]='HAND   ';
uchar num=0,num1=0,speed=140,aa=0;
uchar temp=12;
void delay(uint x)
{
    uint a,b;
    for(a=x;a>0;a--)
        for(b=10;b>0;b--);
}


void delay1(uint z)
{
    uchar i,j;
    for(i=z;i>0;i--)
     for(j=110;j>0;j--);
}

void write_com(uchar com)     //寫命令,RS=0
{
    P0=com;
    lcd_rs=0;
    lcden=0;
    delay(10);
    lcden=1;
    delay(10);
    lcden=0;
    
}

void write_data(uchar dat)       //寫數(shù)據(jù),RS=1
{
    P0=dat;
    lcd_rs=1;
    lcden=0;
    delay(10);
    lcden=1;
    delay(10);
    lcden=0;
    
}

void init_LCD()
{
    lcd_rw=0;
    write_com(0x38);   //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口
    delay(20);
    write_com(0x0c);   //顯示模式設(shè)置
    delay(20);
    write_com(0x06);   //顯示模式設(shè)置:光標(biāo)右移,字符不移
    delay(20);
    write_com(0x01);   //清屏幕指令,將以前的顯示內(nèi)容清除
    delay(20);    
}



void keyscan()
{
    if(key_dir==0)
    {
        delay1(5);
        if(key_dir==0)
        {
            while(!key_dir);
            delay1(10);
            while(!key_dir);
            
            num++;
            if(num==2)
            {
                num=0;
}
}
}

    if(key_en==0)
    {
        delay1(5);
        if(key_en==0)
        {
            while(!key_en);
            delay1(10);
            while(!key_en);
            
            num1++;
            if(num1==3)
            {
                num1=0;
}
}
}

    if((key_down==0)&&((num1==0)||(num1==1)))
    {
        delay1(5);
        if((key_down==0)&&((num1==0)||(num1==1)))
        {
            while(!key_down);
            delay1(10);
            while(!key_down);
            
            speed+=10;
            temp--;
            if(temp<=1)
            {
                temp=1;
}
                
            if(speed>=240)
            {
                speed=240;
}
}
}

    if((key_up==0)&&((num1==0)||(num1==1)))
    {
        delay1(5);
        if((key_up==0)&&((num1==0)||(num1==1)))
        {
            while(!key_up);
            delay1(10);
            while(!key_up);
            speed-=10;
            temp++;
            if(temp>=24)
            {
                temp=24;
}
            if(speed<=20)
            {
                speed=20;
}
}
}
}

void display(uchar date)
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+0x07);
    write_data(0x30+shi);
    write_data(0x30+ge);
}



void main()
{
    uchar ss;
    init_LCD();
    DIR=1;
    enable=0;
    TMOD=0x01;         //模式設(shè)置,00000001,可見采用的是定時(shí)器0,工作與模式1(M1=0,M0=1)。
    TR0=1;             //打開定時(shí)器
    TH0=0Xff;         //定時(shí)器設(shè)置,每隔100微秒發(fā)起一次中斷。
    TL0=0Xda;
    ET0=1;             //開定時(shí)器0中斷
    EA=1;             //開總中斷    
    
    while(1)
    {
        keyscan();
        
            write_com(0x80);  //設(shè)置所要顯示字符的位置為第一行第一列
    ss=0;
    while(table1[ss]!='\0')    //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫
        {                    //這是寫字符的第一種方法,用while循環(huán)。
        write_data(table1[ss]);
        ss++;
        }
    write_com(0x80+0x40);  //設(shè)置第二行首字符顯示的位置,為第二行,第一列
    ss=0;
    for(ss=0;ss<4;ss++)       //總共要顯示13個(gè)字符,故循環(huán)十三次。
    {                       //這是寫字符的第二種方法,用for循環(huán)
    write_data(table2[ss]);
    delay(10);

    }        
    
                if(num==0)
        {
            DIR=0;
    write_com(0x80+0x40+0x05);
    write_data(0x30);
}
        
        if(num==1)
        {
            DIR=1;
    write_com(0x80+0x40+0x05);
    write_data(0x31);
   }
      
     if(num1==0)
     {
         enable=0;
         TR0=1;
        
                  write_com(0x80+0x40+0x09);
         ss=0;
         for(ss=0;ss<7;ss++)    
         {
    write_data(table4[ss]);
         }
}
            
     if(num1==1)
     {
         enable=1;
        
          write_com(0x80+0x40+0x09);
         ss=0;
         for(ss=0;ss<7;ss++)    
         {
    write_data(table3[ss]);
         }

        
}
  
     if(num1==2)
     {
         enable=1;
         TR0=0;
        
          write_com(0x80+0x40+0x09);
         ss=0;
         for(ss=0;ss<7;ss++)    
         {
    write_data(table5[ss]);
         }
    
         if((key_up==0)&&(num1==2))
         {
             delay1(5);
             if((key_up==0)&&(num1==2))
             {
                 TR0=1;
                 DIR=1;
                     write_com(0x80+0x40+0x05);
            write_data(0x31);
                 while(!key_up);
}
      else
            {
                TR0=0;
}
}
                 if((key_down==0)&&(num1==2))
         {
             delay1(5);
             if((key_down==0)&&(num1==2))
             {
                 TR0=1;
                 DIR=0;
                  write_com(0x80+0x40+0x05);
            write_data(0x30);
                 while(!key_down);
                
}
      else
            {
                TR0=0;
}
}


}

display(temp);
  }
}

void time0() interrupt 1
{    TH0=0Xff;
    TL0=0xda;  //b4
    aa++;
    if(aa==speed)
    {
        CP=0;
        aa=0;
}
  else
    {
        CP=1;
    }

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多