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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2166|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国偷自产av一区二区三区 | 欧美在线天堂 | 亚洲精品久久久久久下一站 | 蜜桃精品在线 | 自拍视频一区二区三区 | 亚洲一区在线播放 | 亚洲成人在线免费 | 久久久久网站 | av在线视 | 日韩一级一区 | 国产精品久久亚洲 | 福利久久 | 激情毛片 | 亚洲欧美中文日韩在线v日本 | 国产成人免费视频网站视频社区 | 午夜影院| 亚洲高清视频一区 | 在线视频日韩 | 在线免费观看视频黄 | 97精品久久 | 一区二区免费在线观看 | 欧美精品福利视频 | 国产东北一级毛片 | 国产九九精品 | 免费国产精品久久久久久 | 日本不卡高字幕在线2019 | 欧美视频精品 | 自拍偷拍第一页 | 久久久久久久国产精品影院 | 亚洲一区免费在线 | 做a视频| 国产视频二区在线观看 | 精品久久久久久一区二区 | 成人三级电影 | 欧美激情亚洲天堂 | 午夜视频免费 | wwwxxx日本在线观看 | 久久久久久久久99精品 | 国内自拍视频在线观看 | 成人在线看片 | 日本精品视频 |