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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機驅動a4988和tb6600,加按鍵單機沒反映

[復制鏈接]
跳轉到指定樓層
樓主
ID:1042077 發表于 2024-1-27 21:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大佬們,我兩個驅動分別驅動,電機都能正常轉動,加上按鍵卻沒響應

單片機源程序如下:
#include <reg51.h>
#include <intrins.h>  //微秒(_nop_)頭文件
#define uint  unsigned int
#define uchar unsigned char

sbit dir=P1^0;
sbit pul=P1^1;
sbit ena=P1^5;

sbit dir1=P1^2;
sbit step1=P1^3;

sbit key1 = P0^0;
sbit key2 = P0^1;
sbit key3 = P0^2;
sbit key4 = P0^3;

uint x,y;        
uchar flag = 0;

/*******************************************************************/
/***********             延時函數                     **************/
/*******************************************************************/
void Delay1000us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 2;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
  for(j=0;j<112;j++);
}

void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
  for(j=0;j<112;j++);
}
/*******************************************************************/
/***********                運動函數                    *************/
/*******************************************************************/
void up_1()
{
                  ena = 1;
                                                dir=1;       //dir為1時正轉,dir為0時反轉
                                                 for( x = 0; x <=133; x++)
                  {        //一圈200個脈沖      兩個pul為一個脈沖    16個脈沖就是28.8°距離30°是1.2°,如果改成17個脈沖就是30.6°
                                                         pul=1;
                                                         Delay1000us();                 //修改微秒值可以調速
                                                         pul=0;
                                                         Delay1000us();              
                                                }

}
void do_1()
{
                                                  ena = 1;
              dir=0;       //dir為1時正轉,dir為0時反轉
                                                 for( x = 0; x <=133; x++)
                  {        //一圈200個脈沖      兩個pul為一個脈沖    16個脈沖就是28.8°距離30°是1.2°,如果改成17個脈沖就是30.6°
                                                         pul=1;
                                                         Delay1000us();                 //修改微秒值可以調速
                                                         pul=0;
                                                         Delay1000us();              
                                                }

}

void up_2()
{
                            dir1=1;//電機正轉
                                                 for( x = 0; x <=100; x++) {     //一個圈200個脈沖
                                                         step1=1;
                                                         Delay1000us();
                                                         step1=0;
                                                         Delay1000us();
                                                }
}
void do_2()
{
                                                        dir1=0;//電機反轉
                                                        for( x = 0; x <=100; x++) {     
                                                         step1=1;
                                                         Delay1000us();//時間長短會影響電機運動
                                                         step1=0;
                                                         Delay1000us();
                                                }
}
/*******************************************************************/
/***********              中斷函數                     *************/
/*******************************************************************/
void keyscan()
{
        
//按鍵一
                if(P0^0==0)                        //如果K1按鍵按下
                {
                        delay(20);                //延時消抖
                        while(P0^0==1);        //松手檢測
                        delay(20);                //延時消抖
      flag = 1;
                }               
//按鍵二        
                else if(P0^1==0)                        //如果K1按鍵按下
                {
                        delay(20);                //延時消抖
                        while(P0^1==1);        //松手檢測
                        delay(20);                //延時消抖
      flag = 2;
                }
//按鍵三
                else if(P0^2==0)                        //如果K1按鍵按下
                {
                        delay(20);                //延時消抖
                        while(P0^2==1);        //松手檢測
                        delay(20);                //延時消抖                        
      flag = 3;                                
                }
                else
                        flag =0;
        
}
void time0_init() //定時器T0初始化
{
        TMOD=0x01;          //設置定時器0工作方式1
        TH0=(65536-50000)/256;//定時50ms取高八位
        TL0=(65536-50000)%256; //取低八位
        ET0=1; //開定時器0中斷使能
        EA=1;  //開總中斷使能
        TR0=1; //開啟中斷
}

void time0() interrupt 1 //定時器T0入口函數
{
        TH0=(65536-50000)/256; //定時50ms重新賦初值
        TL0=(65536-50000)%256;
        keyscan();
}
/*******************************************************************/
/***********                主函數                     *************/
/*******************************************************************/
void main()
{
        time0_init();
                while(1){        
                if(flag != 0)
                {
                        
      if(flag == 1)
                        {
                                up_1();
                                         delay(1000);               
        do_1();               
                                         delay(1000);               
                                
                        }
      else if(flag == 2)
                        {
                                up_2();
                                         delay(1000);               
        do_2();               
                                         delay(1000);               
                        }
      else if(flag == 3)
                        {do_2();                                       
                                         delay(1000);               
        up_2();
        
                                         delay(1000);               
                        }
                }
        }        
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.天天操.com | 91网站在线播放 | 久久久久久中文字幕 | 中文字幕在线观看视频网站 | 日韩人体在线 | 91在线电影| 午夜av在线 | 亚洲欧美日韩在线不卡 | 亚洲精品一区久久久久久 | 三级成人片 | 国产我和子的乱视频网站 | 国产精久久久久久久妇剪断 | 性高朝久久久久久久3小时 av一区二区三区四区 | 超碰国产在线 | 国产综合久久久久久鬼色 | 亚洲成人一区二区 | 欧美国产中文字幕 | 国产亚洲日本精品 | 中文字幕 欧美 日韩 | 日韩精品一区二区三区在线观看 | 最新国产在线 | 伊人性伊人情综合网 | 国产三区四区 | 亚洲成人av | 奇米影视77 | 91久久久久久久久久久久久 | 日韩手机在线看片 | 老外几下就让我高潮了 | 久久国产精品久久久久久久久久 | 日韩av一区二区在线观看 | 爱草在线 | 中文成人无字幕乱码精品 | 精品视频在线播放 | 蜜臀网站 | 成人在线播放网址 | 日韩在线视频一区二区三区 | 日韩精品久久久久久 | 亚洲欧美精品在线 | 久久久久久亚洲精品不卡 | www.久久久久久久久久久 | 日韩精品一区二区三区久久 |