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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品在线看 | 新av在线 | 天天玩天天干天天操 | 国产亚洲成av人片在线观看桃 | 91玖玖| 久久国产精品一区二区三区 | 91精品国产综合久久久久 | 91精品国产日韩91久久久久久 | 国产成人精品一区二三区在线观看 | 日韩一区二区av | 久久久91精品国产一区二区三区 | 亚洲精品日韩综合观看成人91 | 亚洲日本欧美日韩高观看 | av毛片免费 | 日韩在线精品视频 | 成人国产午夜在线观看 | 欧美.com | 国产在线高清 | 国产偷自视频区视频 | 成人av在线播放 | 国产黄色在线 | 午夜影院中文字幕 | 亚洲国产精品va在线看黑人 | 国产999精品久久久 午夜天堂精品久久久久 | 国内精品久久精品 | 美日韩中文字幕 | 精品国产免费人成在线观看 | 国产一区二区影院 | 精品视频亚洲 | 国产成人精品一区二区三区网站观看 | 久久成人精品视频 | 日本特黄a级高清免费大片 成年人黄色小视频 | 亚洲日本国产 | 国产精品国产精品国产专区不蜜 | 亚洲人人 | 国产午夜精品一区二区三区 | 美日韩免费视频 | 成人欧美一区二区三区黑人孕妇 | 免费观看羞羞视频网站 | 久久婷婷国产麻豆91 | 四虎影院新地址 |