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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3594|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

關(guān)于硬件電路按鍵問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:127022 發(fā)表于 2016-6-25 09:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
最近做了一個直流電機閉環(huán)調(diào)速硬件電路,按鍵有4個,1.啟動/停止
2.正轉(zhuǎn)/反轉(zhuǎn)
3.加一轉(zhuǎn)(按住可以連續(xù)加轉(zhuǎn))
4.減一轉(zhuǎn)(按住可以連續(xù)減轉(zhuǎn))
電路焊接完成后,按鍵1按一下本應(yīng)該是啟動,再按一下是停止。可是按一下后啟動后立刻就停止了。求解答
以下是按鍵1的程序


                if(!KEY1) //開始停止按鍵
                {
                        Delay_ms(10);
                        if(!KEY1) //開始停止按鍵
                        {
                                i++;
                                if(i%2==0)
                                {
                                        Motor_Speed(1);//開始
                                        LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
                                }
                                if(i%2==1)
                                {
                                        Motor_Speed(0);//停止
                                        LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
                                }
                                while(!KEY1);
                        }               
                }

其中Motor_Speed(0);Motor_Speed(1);是電機運行狀態(tài)子程序
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:79544 發(fā)表于 2016-6-25 12:38 | 只看該作者
要加個變量或標志位的。標志位取反。
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2016-6-25 15:45 | 只看該作者
未細看你的程序.
應(yīng)該是你防彈動失效.
回復(fù)

使用道具 舉報

地板
ID:128089 發(fā)表于 2016-6-25 15:50 | 只看該作者
給你一個項目中用的:       
static u8 st;
if(K1 == 0)
{
        if(st == 0)
        {
                Delay(5000);
                if(K1 == 0)
                {
                        st = 1;
                        按鍵執(zhí)行代碼。
                }
        }
}
else
        st = 0;
回復(fù)

使用道具 舉報

5#
ID:128093 發(fā)表于 2016-6-25 16:51 | 只看該作者
用標志位,防抖動
回復(fù)

使用道具 舉報

6#
ID:111634 發(fā)表于 2016-6-25 17:12 | 只看該作者
本帖最后由 zl2168 于 2016-6-25 17:15 編輯

直流電機正反轉(zhuǎn)及PWM調(diào)速


Proteus仿真一下,確認有效。
實例100 直流電機正反轉(zhuǎn)及調(diào)速.rar (44.12 KB, 下載次數(shù): 4)



按下Kp,電機正轉(zhuǎn)(順時針);按下Kn,電機反轉(zhuǎn)(逆時針)。兩位數(shù)碼管顯示PWM脈沖波占空比,初始值為70(脈沖高電平占比70%)。按一次加速鍵up,占空比加1;按住不放,快速加1;最大值100(顯示00)。按一次減速鍵up,占空比減1;按住不放,快速減1;最小值20



以上摘自張志良編著《單片機實驗實訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版


書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。




回復(fù)

使用道具 舉報

7#
ID:127022 發(fā)表于 2016-6-25 18:12 | 只看該作者
以下是除了1602以外的全部程序,求各位幫忙看看 哪有錯誤沒!
#include<reg52.h>
#include "LCD1602.h"
#define uchar unsigned char
#define uint  unsigned int

bit flag;             //¶¨òå±ê־λ
unsigned long x,x1;  
uint T0count;        //′óT0μļÆêyμ¥ÔaÖD¶á衼ÆêyμÄêyÖμ
uint timecount;  
unsigned char Motor_Count,Set_Count=199;

sbit KEY1 = P1^3;//°′¼ü11
sbit KEY2 = P1^4;//°′¼ü2
sbit KEY3 = P1^5;//°′¼ü3
sbit KEY4 = P1^6;//°′¼ü4

sbit IN1 = P2^0;//μç»ú¿ØÖƶË1
sbit IN2 = P2^1;//μç»ú¿ØÖƶË2
sbit EN = P2^2;        //μç»úê1Äü¶Ë

void Timer(void);

//Ñóê±oˉêy
void Delay_ms(uint jj) //Ñóê±1oáÃë
{
        uint ii;
        while(jj--)
                for(ii=0;ii<116;ii++);
}
void Motor_Speed(unsigned char Speed) //μç»ú×′ì¬
{
        if(Speed==0)  {IN1=0;IN2=0;}//í£Ö1
        if(Speed==1)  {IN1=0;IN2=1;}//Õy×a
        if(Speed==2)  {IN1=1;IN2=0;}//·′×a
}
void main()           //
{          
        unsigned char  Data[3];
           unsigned int  i,j;
        unsigned char Set_x;
       
        Timer(); //¶¨ê±Æ÷3õê¼»ˉ
    LCD1602_init();//òo¾§3õê¼»ˉ
//////////////////////////0123456789ABCDEF
    LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16);//ÏÔê¾êμê±Ëù¶è
                                                     //0123456789ABCDEF
    LCD1602_Disp_ZF(0x80+0X40,"Set:   r/s      ",16); //éèÖÃËù¶è
        //LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
        //LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
        LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
        Motor_Speed(0);//??
        Set_Count=1;
        Set_x=30;
        Data[0]='0'+Set_x/100;         //ÏÔê¾éèÖÃËù¶è°ùλ
        Data[1]='0'+(Set_x/10)%10; //ÏÔê¾éèÖÃËù¶èê®Î»
        Data[2]='0'+Set_x%10;      //ÏÔê¾éèÖÃËù¶è¸öλ
        LCD1602_Disp_ZF(0x84+0x40,Data,3);        //ÏÔê¾éèÖÃËù¶è
        while(1)
        {
       
                if(flag==1)                  
                {
                        flag=0;                        //Çå±ê־λ
                        x=T0count*65536+TH0*256+TL0;   //è¡μÃê±¼ä¿í¶è2Îêy  
                        x=x/5;     //¼ÆËãËù¶è
                        timecount=0;
                        T0count=0;
                        TH0=0;
                        TL0=0;
                        TR0=1;         //TR0=1,¿ØÖÆ¿a1رÕoÏ£¬¼¼êõÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
                        Data[0]='0'+x/100;          //ÏÔê¾μ±Ç°Ëù¶è
                        Data[1]='0'+(x/10)%10; //ÏÔê¾μ±Ç°Ëù¶è
                        Data[2]='0'+x%10;      //ÏÔê¾μ±Ç°Ëù¶è
                        LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16); //ÏÔê¾μ±Ç°Ëù¶è
                        LCD1602_Disp_ZF(0x8a,Data,3); //ÏÔê¾μ±Ç°Ëù¶è

                        if(x>Set_x)//Ëù¶èμ÷½ú
                        {
                                if(Set_Count==0)Set_Count=1;//¼õËù
                                Set_Count--;       
                        }
                        if(x<Set_x)        //Ëù¶èμ÷½ú
                        {
                                Set_Count++;
                                if(Set_Count==200)Set_Count=199;//¼óËù       
                        }
                       
                }

                if(!KEY1) //¿aê¼í£Ö1°′¼ü
                {
                        Delay_ms(50);
                        if(!KEY1) //
                        {
                                i++;
                                if(i%2==0)
                                {
                                        Motor_Speed(1);//¿aê¼
                                        LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
                                }
                                if(i%2==1)
                                {
                                        Motor_Speed(0);//í£Ö1
                                        LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
                                }
                                while(!KEY1);
                        }               
                }
                if(!KEY2)        //Õy×a·′×a°′¼ü
                {
                        Delay_ms(10);
                        if(!KEY2)
                        {
                                j++;
                                if(j%2==0)//Õy×a
                                {       
                                        Motor_Speed(1);
                                        LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
                                }
       
                                if(j%2==1)//·′×a
                                {
                                        Motor_Speed(2);
                                        LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
                                }
                                while(!KEY2);
                        }               
                }
                //////////////////////////////////
                if(!KEY3) //éèÖüóËù
                {
                        Delay_ms(50);
                        if(!KEY3)//
                        {
                                Set_x ++;
                                if(Set_x>30)Set_x=30;
                                Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
                                Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
                                Data[2]='0'+Set_x%10;  //??????  
                                LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
                        }               
                }
                if(!KEY4)//éèÖüõËù
                {
                        Delay_ms(50);
                        if(!KEY4)//????
                        {
                            if(Set_x==0)Set_x=1;
                                Set_x --;
                                Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
                                Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
                                Data[2]='0'+Set_x%10;  //ÏÔê¾éèÖÃËù¶è
                                LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
                        }               
                }
                /////////////////////////////////

                /////////////////////
                ///////////////////////////
   
        }
            
  }


void t0() interrupt 1 using 0      //T0ÖD¶Ï·tÎñ
{  
T0count++;                      //¶ÔP3.4¿úμÄÂö3å½øDD¼Æêy
}

void t1(void) interrupt 3 using 0       //T1ÖD¶Ï·tÎñ
{   
TH1=(65536-368)/256;               //¼Æêy3õÖμÖØ×°ÔØ
    TL1=(65536-368)%256;
    timecount++;
        Motor_Count++;
        if(Motor_Count==Set_Count)        //μ÷½úËù¶è
        {
                EN=0;
        }
        if(Motor_Count==200)  //μ÷½úËù¶è
        {
                EN=1;
                Motor_Count=0;
        }
    if(timecount==249) //1s¼Æêy±êÖ¾
    {  TR0=0;
        timecount=0;
        flag=1;                       // ÖÃλ±ê־λ
    }  
}

void Timer(void)
{
    TMOD=0x15;       //T01¤×÷Îa16λ¼ÆêyÆ÷£¨·½ê½1£©,T11¤×÷·½ê½Îa16λ¶¨ê±Æ÷
    TH0=0;                     //¼ÆêyÎa65536
    TL0=0;                     //
    TH1=(65536-4000)/256;     //¶¨ê±Æ÷2éóö¨ê±4ms,3õÖμÎa4000
    TL1=(65536-4000)%256;
    TR1=1;   //TR1=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷,Æô¶ˉ¶¨ê±
    TR0=1;   //TR0=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
    ET0=1;                    //¶¨ê±Æ÷0¿aÖD¶Ï
    ET1=1;                    //¶¨ê±Æ÷1¿aÖD¶Ï
    EA=1;                     //CPU¿aÖD¶Ï

}
回復(fù)

使用道具 舉報

8#
ID:127022 發(fā)表于 2016-6-25 18:15 | 只看該作者
騰飛的龍 發(fā)表于 2016-6-25 12:38
要加個變量或標志位的。標志位取反。

以下是全部程序,編譯后沒有錯誤和警告,但是燒錄到單片機后就出現(xiàn)我之前說的按鍵問題了,幫忙看看!謝謝!
#include<reg52.h>
#include "LCD1602.h"
#define uchar unsigned char
#define uint  unsigned int

bit flag;             //¶¨òå±ê־λ
unsigned long x,x1;  
uint T0count;        //′óT0μļÆêyμ¥ÔaÖD¶á衼ÆêyμÄêyÖμ
uint timecount;  
unsigned char Motor_Count,Set_Count=199;

sbit KEY1 = P1^3;//°′¼ü11
sbit KEY2 = P1^4;//°′¼ü2
sbit KEY3 = P1^5;//°′¼ü3
sbit KEY4 = P1^6;//°′¼ü4

sbit IN1 = P2^0;//μç»ú¿ØÖƶË1
sbit IN2 = P2^1;//μç»ú¿ØÖƶË2
sbit EN = P2^2;        //μç»úê1Äü¶Ë

void Timer(void);

//Ñóê±oˉêy
void Delay_ms(uint jj) //Ñóê±1oáÃë
{
        uint ii;
        while(jj--)
                for(ii=0;ii<116;ii++);
}
void Motor_Speed(unsigned char Speed) //μç»ú×′ì¬
{
        if(Speed==0)  {IN1=0;IN2=0;}//í£Ö1
        if(Speed==1)  {IN1=0;IN2=1;}//Õy×a
        if(Speed==2)  {IN1=1;IN2=0;}//·′×a
}
void main()           //
{          
        unsigned char  Data[3];
           unsigned int  i,j;
        unsigned char Set_x;
       
        Timer(); //¶¨ê±Æ÷3õê¼»ˉ
    LCD1602_init();//òo¾§3õê¼»ˉ
//////////////////////////0123456789ABCDEF
    LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16);//ÏÔê¾êμê±Ëù¶è
                                                     //0123456789ABCDEF
    LCD1602_Disp_ZF(0x80+0X40,"Set:   r/s      ",16); //éèÖÃËù¶è
        //LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
        //LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
        LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
        Motor_Speed(0);//??
        Set_Count=1;
        Set_x=30;
        Data[0]='0'+Set_x/100;         //ÏÔê¾éèÖÃËù¶è°ùλ
        Data[1]='0'+(Set_x/10)%10; //ÏÔê¾éèÖÃËù¶èê®Î»
        Data[2]='0'+Set_x%10;      //ÏÔê¾éèÖÃËù¶è¸öλ
        LCD1602_Disp_ZF(0x84+0x40,Data,3);        //ÏÔê¾éèÖÃËù¶è
        while(1)
        {
       
                if(flag==1)                  
                {
                        flag=0;                        //Çå±ê־λ
                        x=T0count*65536+TH0*256+TL0;   //è¡μÃê±¼ä¿í¶è2Îêy  
                        x=x/5;     //¼ÆËãËù¶è
                        timecount=0;
                        T0count=0;
                        TH0=0;
                        TL0=0;
                        TR0=1;         //TR0=1,¿ØÖÆ¿a1رÕoÏ£¬¼¼êõÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
                        Data[0]='0'+x/100;          //ÏÔê¾μ±Ç°Ëù¶è
                        Data[1]='0'+(x/10)%10; //ÏÔê¾μ±Ç°Ëù¶è
                        Data[2]='0'+x%10;      //ÏÔê¾μ±Ç°Ëù¶è
                        LCD1602_Disp_ZF(0x80,"Now Speed:   r/s",16); //ÏÔê¾μ±Ç°Ëù¶è
                        LCD1602_Disp_ZF(0x8a,Data,3); //ÏÔê¾μ±Ç°Ëù¶è

                        if(x>Set_x)//Ëù¶èμ÷½ú
                        {
                                if(Set_Count==0)Set_Count=1;//¼õËù
                                Set_Count--;       
                        }
                        if(x<Set_x)        //Ëù¶èμ÷½ú
                        {
                                Set_Count++;
                                if(Set_Count==200)Set_Count=199;//¼óËù       
                        }
                       
                }

                if(!KEY1) //¿aê¼í£Ö1°′¼ü
                {
                        Delay_ms(50);
                        if(!KEY1) //
                        {
                                i++;
                                if(i%2==0)
                                {
                                        Motor_Speed(1);//¿aê¼
                                        LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
                                }
                                if(i%2==1)
                                {
                                        Motor_Speed(0);//í£Ö1
                                        LCD1602_Disp_ZF(0x8b+0X40,"Stop ",5);
                                }
                                while(!KEY1);
                        }               
                }
                if(!KEY2)        //Õy×a·′×a°′¼ü
                {
                        Delay_ms(10);
                        if(!KEY2)
                        {
                                j++;
                                if(j%2==0)//Õy×a
                                {       
                                        Motor_Speed(1);
                                        LCD1602_Disp_ZF(0x8b+0X40,"Right",5);
                                }
       
                                if(j%2==1)//·′×a
                                {
                                        Motor_Speed(2);
                                        LCD1602_Disp_ZF(0x8b+0X40,"Left ",5);
                                }
                                while(!KEY2);
                        }               
                }
                //////////////////////////////////
                if(!KEY3) //éèÖüóËù
                {
                        Delay_ms(50);
                        if(!KEY3)//
                        {
                                Set_x ++;
                                if(Set_x>30)Set_x=30;
                                Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
                                Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
                                Data[2]='0'+Set_x%10;  //??????  
                                LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
                        }               
                }
                if(!KEY4)//éèÖüõËù
                {
                        Delay_ms(50);
                        if(!KEY4)//????
                        {
                            if(Set_x==0)Set_x=1;
                                Set_x --;
                                Data[0]='0'+Set_x/100;//ÏÔê¾éèÖÃËù¶è
                                Data[1]='0'+(Set_x/10)%10;//ÏÔê¾éèÖÃËù¶è
                                Data[2]='0'+Set_x%10;  //ÏÔê¾éèÖÃËù¶è
                                LCD1602_Disp_ZF(0x84+0x40,Data,3);//ÏÔê¾éèÖÃËù¶è
                        }               
                }
                /////////////////////////////////

                /////////////////////
                ///////////////////////////
   
        }
            
  }


void t0() interrupt 1 using 0      //T0ÖD¶Ï·tÎñ
{  
T0count++;                      //¶ÔP3.4¿úμÄÂö3å½øDD¼Æêy
}

void t1(void) interrupt 3 using 0       //T1ÖD¶Ï·tÎñ
{   
TH1=(65536-368)/256;               //¼Æêy3õÖμÖØ×°ÔØ
    TL1=(65536-368)%256;
    timecount++;
        Motor_Count++;
        if(Motor_Count==Set_Count)        //μ÷½úËù¶è
        {
                EN=0;
        }
        if(Motor_Count==200)  //μ÷½úËù¶è
        {
                EN=1;
                Motor_Count=0;
        }
    if(timecount==249) //1s¼Æêy±êÖ¾
    {  TR0=0;
        timecount=0;
        flag=1;                       // ÖÃλ±ê־λ
    }  
}

void Timer(void)
{
    TMOD=0x15;       //T01¤×÷Îa16λ¼ÆêyÆ÷£¨·½ê½1£©,T11¤×÷·½ê½Îa16λ¶¨ê±Æ÷
    TH0=0;                     //¼ÆêyÎa65536
    TL0=0;                     //
    TH1=(65536-4000)/256;     //¶¨ê±Æ÷2éóö¨ê±4ms,3õÖμÎa4000
    TL1=(65536-4000)%256;
    TR1=1;   //TR1=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷,Æô¶ˉ¶¨ê±
    TR0=1;   //TR0=1,¿ØÖÆ¿a1رÕoÏ,¼ÆêyÂö3å½øèëT1¼ÆêyÆ÷£¬Æô¶ˉ¼Æêy
    ET0=1;                    //¶¨ê±Æ÷0¿aÖD¶Ï
    ET1=1;                    //¶¨ê±Æ÷1¿aÖD¶Ï
    EA=1;                     //CPU¿aÖD¶Ï

}
回復(fù)

使用道具 舉報

9#
ID:111634 發(fā)表于 2016-6-26 21:44 | 只看該作者
本帖最后由 zl2168 于 2016-6-27 19:47 編輯

你這個不是“閉環(huán)調(diào)速”,閉環(huán)是具有負反饋自動調(diào)節(jié)功能,是用輸出信號反饋到輸入端,形成一個閉合環(huán)形電路。
回復(fù)

使用道具 舉報

10#
ID:127022 發(fā)表于 2016-6-28 13:33 | 只看該作者
zl2168 發(fā)表于 2016-6-26 21:44
你這個不是“閉環(huán)調(diào)速”,閉環(huán)是具有負反饋自動調(diào)節(jié)功能,是用輸出信號反饋到輸入端,形成一個閉合環(huán)形電路 ...

我這個是首先通過按鍵設(shè)置馬達的速度,然后通過光耦開關(guān)檢測馬達的速度,然后經(jīng)過程序比較,最后才實現(xiàn)的閉環(huán)調(diào)速。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看一级毛片 | 天天爽夜夜骑 | 国产精品久久久久久久久免费樱桃 | 免费一区二区三区 | 国产美女一区二区三区 | 中文字幕蜜臀av | 一区二区在线免费播放 | 亚洲一区二区三区免费在线观看 | av黄色在线观看 | 一区二区三区欧美 | 99在线精品视频 | 9191av| 国产成人高清成人av片在线看 | 99re99| 国产高清精品网站 | 欧美日韩在线综合 | 在线视频亚洲 | 一级做a爰片性色毛片视频停止 | 99久久婷婷国产综合精品首页 | 99精品网| 欧美中文字幕一区 | 精品日韩一区二区 | 午夜精品一区二区三区在线视频 | 在线观看国产视频 | 久久成 | 国产精品欧美精品 | 国产视频福利一区 | 欧美性网 | 久久综合一区 | 成人美女免费网站视频 | 男女羞羞视频免费看 | 久免费视频 | 国产欧美日韩一区 | a黄在线观看| 在线一级片 | avtt国产| 拍真实国产伦偷精品 | 伦理午夜电影免费观看 | 成人久草| 亚洲永久 | 久草在线|