ç»ä½ 个ç¨åºåèä¸ä¸
/*******************************************************************/
/* ç¨åºåï¼PWMç´æµçµæºè°é */
/* æ¶æ¯ï¼11.00592 MHz CPUåå·ï¼AT89C51 */
/* ç´æµçµæºçPWMæ³¢æ§å¶ï¼å¯ä»¥ç´æ¥çè°éä»0å°20级çè°é */
/*****************************************************************/
#include<reg51.h>
#define TH0_TL0 (65536-1000)//设å®ä¸æçé´éæ¶é¿
unsigned char count0 = 50;//ä½çµå¹³çå 空æ¯
unsigned char count1 = 0;//é«çµå¹³çå 空æ¯
bit Flag = 1;//çµæºæ£å转æ å¿ä½,1æ£è½¬ï¼0å转
sbit Key_add=P2 ^ 0; //çµæºåé
sbit Key_dec=P2 ^ 1; //çµæºå é
sbit Key_turn=P2 ^ 2; //çµæºæ¢å
sbit PWM1=P2^6;//PWM éé 1ï¼å转èå²
sbit PWM2=P2^7;//PWM éé 2ï¼æ£è½¬èå²
unsigned char Time_delay;
/************å½æ°å£°æ**************/
void Delay(unsigned char x);
void Motor_speed_high(void);
void Motor_speed_low(void);
void Motor_turn(void);
void Timer0_init(void);
/****************延æ¶å¤ç**********************/
void Delay(unsigned char x)
{
Time_delay = x;
while(Time_delay != 0);//çå¾
ä¸æï¼å¯åå°PWMè¾åºæ¶é´é´é
}
/*******æé®å¤çå pwmå 空æ¯ï¼çµæºå é**********/
void Motor_speed_high(void)
{
if(Key_add==0)
{
Delay(10);
if(Key_add==0)
{
count0 += 5;
if(count0 >= 100)
{
count0 = 100;
}
}
while(!Key_add);//çå¾
é®æ¾å¼
}
}
/******æé®å¤çåpwmå 空æ¯ï¼çµæºåé*****/
void Motor_speed_low(void)
{
if(Key_dec==0)
{
Delay(10);
if(Key_dec==0)
{
count0 -= 5;
if(count0 <= 0)
{
count0 = 0;
}
}
while(!Key_dec );
}
}
/************çµæºæ£ååæ§å¶**************/
void Motor_turn(void)
{
if(Key_turn == 0)
{
Delay(10);
if(Key_turn == 0)
{
Flag = ~Flag;
}
while(!Key_turn);
}
}
/***********å®æ¶å¨0åå§å***********/
void Timer0_init(void)
{
TMOD=0x01; //å®æ¶å¨0å·¥ä½äºæ¹å¼1
TH0=TH0_TL0/256;
TL0=TH0_TL0%256;
TR0=1;
ET0=1;
EA=1;
}
/*********主å½æ°********************/
void main(void)
{
Timer0_init();
while(1)
{
Motor_turn();
Motor_speed_high();
Motor_speed_low();
}
}
/**************å®æ¶0ä¸æå¤ç******************/
void Timer0_int(void) interrupt 1 using 1
{
TR0 = 0;//设置å®æ¶å¨åå¼æé´ï¼å
³éå®æ¶å¨
TL0 = TH0_TL0 % 256;
TH0 = TH0_TL0 / 256 ;//å®æ¶å¨è£
åå¼
TR0 = 1;
if(Time_delay != 0)//延æ¶å½æ°ç¨
{
Time_delay--;
}
if(Flag == 1)//çµæºæ£è½¬
{
PWM1 = 0;
if(++count1 < count0)
{
PWM2 = 1;
}
else
PWM2 = 0;
if(count1 >= 100)
{
count1=0;
}
}
else //çµæºå转
{
PWM2 = 0;
if(++count1 < count0)
{
PWM1 = 1;
}
else
PWM1 = 0;
if(count1 >= 100)
{
count1=0;
}
}
}
/************************************************
void Delay(unsigned char x)
{
Time_delay = x;
while(Time_delay != 0);//çå¾
ä¸æï¼å¯åå°PWMè¾åºæ¶é´é´é
}
Delay(10);
if(Time_delay != 0)//延æ¶å½æ°ç¨
{
Time_delay--;
}
追é®çä¸æç¨åºï¼ä¸ä¼æ¹ï¼ä»è¦è°¢è°¢ä½