以上程序,在加減速那里一直不明白怎么怎么改變占空比,望各位老大指點!
while(1)
{
b=0;
while(!b);
if(N==X) //X初始值為50
PWM=0;
if(N==100) //N為總頻率段
// {
// N=0;
// }
break;
N++;
主要是這一段,真的不明白
單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar N=0; //總頻率段
uchar X=50; //占空比初始值50%
uint a,b;
sbit RS=P3^0;
sbit RW=P3^1;
sbit EN=P3^2;
uchar code str1[]={"FORWARD"}; //前進
uchar code str2[]={"SPEED UP"}; //加速
uchar code str3[]={"REVERSAL"}; //后退
uchar code str4[]={"SPEED DOWN"}; //減速
uchar code str5[]={"STOP"}; //停機
uchar data disdata[5];
void delay1ms(uint ms) //延時0.1毫秒(不夠精確的)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com (uchar com) // 寫指令 // 液晶顯示屏
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P2=com
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(uchar dat) // 寫數(shù)據(jù) // 液晶顯示屏
{
delay1ms(1);
Rs=1;
RW=0;
EN=0;
P2=dat
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init() // 初始化設置 //
{
delay1ms(15);
wr_com(0x38);
wr_com(0x08);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0c); }
void display (uchar *P) // 顯示 //
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_ Play() / / 初始化顯示
{
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
while(1);
}
Sbit PWM=P3^6; // PWM 輸出腳
sbit P1_2=P1^2; // 正轉
sbit P1_3=P1^3; // 反轉
sbit P1_4=P1^4; // 加速
sbit P1_5=P1^5; // 減速
sbit P1_6=P1^6; // 停止
sbit P1_1=P1^1;
sbit P1_0=P1^0;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
void timer1() interrupt 3
{
TH1=0Xff;
TL1=0x17;
b++;
}
main()
{
TMOD=0x10;
IE=0X88;
TH1=0Xff;
TL1=0X17;
TR0=1;
TR1=1;
a=0;
b=0;
while(1)
{
PWM=1;
while(1)
{
b=0;
while(!b);
if(N==X) //X初始值為50
PWM=0;
if(N==100) //N為總頻率段
// {
// N=0;
// }
break;
N++;
if(P1_2==0) // M1 正轉
{
P1_1=1;
P1_0=0;
X=50;
P0_0=0;
P0_1=1;
lcd_init();
wr_com(0x80);
display(str1);
}
if(P1_3==0) // M1 反轉
{
P1_1=0;
P1_0=1;
X=50;
P0_0=1;
P0_1=0;
lcd_init();
wr_com(0x80);
display(str3);
}
if(P1_6==0) // M1 停止
{
P1_1=1;
P1_0=1;
P0_0=1;
P0_1=1;
P0_2=1;
P0_3=1;
lcd_init();
wr_com(0x80);
display(str5);
}
if(P1_4==0) //加速
{
P1_1=1;
P1_0=0;
X=100;
P0_2=0;
P0_3=1;
lcd_init();
wr_com(0xc0);
display(str2);
}
if(P1_5==0) //減速
{
P1_1=1;
P1_0=0;
X=20;
P0_2=1;
P0_3=0;
lcd_init();
wr_ com(0xc0);
display(str4);
}
}
N=0;
}
}
|