中级会员 
   
	- 积分
 - 291
 
        - 金钱
 - 291 
 
       - 注册时间
 - 2017-7-19
 
      - 在线时间
 - 87 小时
 
 
 
 | 
 
5金钱 
51单片机 怎么用定时器输出方波从宽到窄,单片机用定时器输出,不借助按键调速。  用来控制步进电机转速,给定高速脉冲时无法启动,必须有一个加速的过程。 
 
#include<reg52.h> 
 
//宏定义 
//*************************************************************** 
#define uchar unsigned char 
#define uint unsigned int 
#define TERM 10//周期为10 
//*************************************************************** 
 
//管脚定义 
//*************************************************************** 
 
 
 
sbit ZHENGKEY = P2^4;//正转 
 
sbit KUAIZHENGKEY = P2^5;//快正转 
 
sbit FANKEY = P2^6; //反转 
 
sbit DIR = P0^1; //方向 
sbit EN = P0^2;  //使能 
sbit CP = P0^3; // 脉冲 
 
//*************************************************************** 
 
//变量定义 
//*************************************************************** 
 
 
//*************************************************************** 
 
 
 
 
 
//函数定义 
//*************************************************************** 
void sysinit(void);//初始化 
void delayms(unsigned int Num);//延时函数 
void T0_time(void); 
 
 
//*************************************************************** 
 
//主函数 
//*************************************************************** 
void main() 
{ 
    static bit temp; 
    ZHENGKEY = 1; 
    FANKEY = 1; 
 
    sysinit(); 
    temp = 0; 
    CP = 1; 
 
     while(1) 
    {     
        jianshu(); 
         
        if (ZHENGKEY == 0) //正转 
        { 
            delayms(10); 
            if (ZHENGKEY == 0) 
            { 
                EN = 1; 
              TR0=1; 
                DIR = 1; 
            } 
                 
        } 
      else if (KUAIZHENGKEY == 0)    //快正转 
        { 
            delayms(10); 
            if (KUAIZHENGKEY == 0) 
            { 
                EN = 1; 
                TR0=1; 
                DIR = 1;                 
            } 
        }         
        else if (FANKEY == 0)    //反转 
        { 
            delayms(10); 
            if (FANKEY == 0) 
            { 
                EN = 1; 
                TR0=1; 
                DIR = 02; 
            } 
        } 
        else 
            { 
             EN = 0; 
             TR0=0; 
            } 
    } 
} 
 
void sysinit(void) 
{ 
    TMOD = 0x02; 
  TH0=(65536-80)/256;          
    TL0=(65536-80)%256; 
 
    EA=1; 
    ET0=1; 
    TR0=0;     
} 
void T0_time()interrupt 1  
{     
 
    TH0=(65536-80)/256;          
    TL0=(65536-80)%256; 
 
     
 
          
 
} 
void jianshu() 
{     
 
        
} 
 
void delayms(unsigned int Num) 
{ 
    unsigned int i,j; 
    for(i=0;i<Num;i++) 
    { 
     for(j=0;j<300;j++); 
    }; 
} 
 
 
 |   
 
 
 
 
 
 |