欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

按鍵控制失效 需幫忙看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:125710 發表于 2016-7-17 17:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序流程如下
開機后延時2秒——然后步進電機一直轉————按下按鍵1————步進電機一直停止運行     我現在是測試的時候 電機就一直運行。按下的時候 雖然停止了  但是松開按鍵 又開始了   我設置了按下按鍵 讓一個變量++但是還是失敗了。 請大家幫忙看看這個程序  指導下哪里出錯了。提個建議謝謝
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code FFW[9]={  0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6,0x00};//28BYJ-48正時鐘旋轉相序表單雙八拍工作方式:A-AB-B-BC-C-CD-D-DA 停止運行
char num,num1,num2,num3,num4,i,abb;
sbit out1=P3^4;
sbit out2=P3^5;
sbit out3=P3^6;
sbit LED=P3^7;

sbit LED1=P1^0;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit LED6=P1^5;
sbit beep=P2^3;
void init();

/*****************************************************************
                    延時函數
*****************************************************************/
void delay(uint z)            //ms延時函數
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}

/*****************************************************************
                    28BYJ-48步進電機加ULN2003驅動步進電機正轉
*****************************************************************/
void  motor_ffw(unsigned int n)  //步進電機一周函數
{
  unsigned char tmp;  //定義2個臨時變量
   unsigned int  j;
   for (j=0; j<8*64*n; j++)  //運行一周期
    {
     
        
     tmp=P0;         //用 tmp 把 P0 口當前值暫存
     tmp = tmp & 0xF0; //用&操作清零低 4 位 高四位不影響
     tmp = tmp | FFW[i];//用|操作把節拍代碼寫到低 4 位
          P0 =tmp;
       i++;
       i=i&0x07;              
       delay(2);
         beep=0;
    }
}
void moto_off()  //關步進電機函數
{
    unsigned char i,tmp;  //定義2個臨時變量
     tmp=P0;         //用 tmp 把 P0 口當前值暫存
     tmp = tmp & 0xF0; //用&操作清零低 4 位 高四位不影響
     tmp = tmp | FFW[9];//用|操作把節拍代碼寫到低 4 位
          P0 =tmp;
      
     //  i=9;                     
         beep=1;
}



/*****************************************************************
                    按鍵函數
*****************************************************************/
void keyscan()        //按鍵函數
{
  motor_ffw(1);
if(K1==0)             //檢測K1=P1.0按鍵是否被按下,確定按下后步進電機停止 延長2秒P0.4一直持續低電平
   {
   delay(10);
   
   if(K1==0)
     {
    LED6=1;
   
     //delay(2000);  //等待2秒
    out1=0;       //P0.4程序低電平      
     while(!K1);    //等待按鍵釋放
   
   
     }  
    }
  
  
  if(K2==0)        //檢測K2=P1.1按鍵是否被按下,確定按下P0.5保持0.5秒
   {
   delay(10);
   
   if(K2==0)
     {
         
   // LED6=0;      //P0.5變低電平
      // beep=0;   
  delay(500);     //保持0.5秒低電平
    //LED6=1;       // 然后變為高電平
       //beep=1;
        
     while(!K1);         //等待按鍵釋放
     }  
    }
     
  if(K3==0)        //檢測K3=P1.2按鍵是否被按下,確定按下P0.4變為高電平
   {
   delay(10);
   
   if(K3==0)
     {
         
//   LED2=1;
//    beep=1;
        
     while(!K3);         //等待按鍵釋放
     }  
    }
  
  if(K4==0)        //檢測K4=P1.3按鍵是否被按下,確定按下步進電機運行10周后停止。
   {
   delay(10);
   
   if(K4==0)
     {
         
//   LED6=0;         
     while(!K4);         //等待按鍵釋放
     }  
    }
  
  if(K5==0)        //檢測K5=P1.4按鍵是否被按下,如果按下P0.6=L 保持1秒  P0.7一直保持低電平
   {
   delay(10);
   
   if(K5==0)
     {
         
  // LED6=0;         //如果按下P0.6=L 保持1秒
     //LED7=0;         //如果按下 P0.7一直保持低電平
     delay(1000);
//     LED6=1;   
     while(!K5)         //等待按鍵釋放
    {
     delay(2000);
      zihanshu();
       }
  
     }  
    }
  
}



/*****************************************************************
                    定時器
*****************************************************************/
void init()                  //定時器初始化
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void T0_time()interrupt 1   //中斷函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)           //一秒時間到  
{
   num3++;
   num1++;
num=0;
   }
}
/*****************************************************************
                    延時2秒
*****************************************************************/
void delay2s()
{
  if(num1>2)
  num1=0;
}


/*****************************************************************
                  主函數
*****************************************************************/
void main()   
{
  init();
   moto_off();
  LED6=0;
  
  
while(1)
{
  
  if(num1>=2)    //開機后等待2秒 定時器不清0;
  {  
     
   motor_ffw(1);
   keyscan();
            
  }
   }
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表