|
5黑幣
51單片機 怎么用定時器輸出方波從寬到窄,單片機用定時器輸出,不借助按鍵調(diào)速。 用來控制步進電機轉(zhuǎn)速,給定高速脈沖時無法啟動,必須有一個加速的過程。
單片機源程序如下:
#include<reg52.h>
//宏定義
//***************************************************************
#define uchar unsigned char
#define uint unsigned int
#define TERM 10//周期為10
//***************************************************************
//管腳定義
//***************************************************************
sbit ZHENGKEY = P2^4;//正轉(zhuǎn)
sbit KUAIZHENGKEY = P2^5;//快正轉(zhuǎn)
sbit FANKEY = P2^6; //反轉(zhuǎn)
sbit DIR = P0^1; //方向
sbit EN = P0^2; //使能
sbit CP = P0^3; // 脈沖
//***************************************************************
//變量定義
//***************************************************************
//***************************************************************
//函數(shù)定義
//***************************************************************
void sysinit(void);//初始化
void delayms(unsigned int Num);//延時函數(shù)
void T0_time(void);
//***************************************************************
//主函數(shù)
//***************************************************************
void main()
{
static bit temp;
ZHENGKEY = 1;
FANKEY = 1;
sysinit();
temp = 0;
CP = 1;
while(1)
{
jianshu();
if (ZHENGKEY == 0) //正轉(zhuǎn)
{
delayms(10);
if (ZHENGKEY == 0)
{
EN = 1;
TR0=1;
DIR = 1;
}
}
else if (KUAIZHENGKEY == 0) //快正轉(zhuǎn)
{
delayms(10);
if (KUAIZHENGKEY == 0)
{
EN = 1;
TR0=1;
DIR = 1;
}
}
else if (FANKEY == 0) //反轉(zhuǎn)
{
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;
CP=~CP;
}
void jianshu()
{
}
void delayms(unsigned int Num)
{
unsigned int i,j;
for(i=0;i<Num;i++)
{
for(j=0;j<300;j++);
};
}
|
|
|