/****************su***************/
/*************20160702************/
/**********STCIAP15W4K58S4********/
/***************3PWM**************/
/***********QQ774145445***********/
#include <stc15.h>
#define IO0 0x01
#define IO1 0X02
#define IO2 0x04
#define IO3 0x08
#define IO4 0x10
#define IO5 0x20
#define IO6 0x40
#define IO7 0x80
#define kuozhan1 P_SW2 |=IO7 //打开扩展sfr访问
#define kuozhan0 P_SW2 &=~IO7 //关闭扩展sfr访问
unsigned int xa,xb,xc;
bit a,b,c;
void main()
{
xa=1;
xb=xa+60;
xc=xb+60;
a=0;
b=0;
c=0;
P0M0 &=~(IO6|IO7);
P0M1 &=~(IO6|IO7);
P2M0 &=~(IO7|IO2|IO3); //IO配置
P2M1 &=~(IO7|IO2|IO3); //IO配置
P4M0 &=~IO5;
P4M1 &=~IO5;
/*******************************************************/
PWMCFG &=~IO0; //PWM2初始低电平
PWMCFG |=IO1; //PWM3初始高电平
PWMCFG &=~IO2; //PWM4初始低电平
PWMCFG |=IO3; //PWM5初始高电平
PWMCFG &=~IO4; //PWM6初始低电平
PWMCFG |=IO5; //PWM7初始高电平
/*******************************************************/
PWMCR |=(IO0|IO1|IO2|IO3|IO4|IO5);//PWM2PWM3PWM4PWM5PWM6PWM7使能
/*******************************************************/
kuozhan1;
PWMCH =2400/256; //PWM周期
PWMCL =2400%256; //PWM周期
/*******************************************************/
PWM2T1H =(200+24)/256; //第一次翻转
PWM2T1L =(200+24)%256; //第一次翻转
PWM2T2H =(xa+224)/256; //第二次翻转
PWM2T2L =(xa+224)%256; //第二次翻转
PWM3T1H =200/256;
PWM3T1L =200%256;
PWM3T2H =(xa+248)/256;
PWM3T2L =(xa+248)%256;
/*******************************************************/
PWM4T1H =(200+24)/256; //第一次翻转
PWM4T1L =(200+24)%256; //第一次翻转
PWM4T2H =(xb+224)/256; //第二次翻转
PWM4T2L =(xb+224)%256; //第二次翻转
PWM5T1H =200/256;
PWM5T1L =200%256;
PWM5T2H =(xb+248)/256;
PWM5T2L =(xb+248)%256;
/*******************************************************/
PWM6T1H =(200+24)/256; //第一次翻转
PWM6T1L =(200+24)%256; //第一次翻转
PWM6T2H =(xc+224)/256; //第二次翻转
PWM6T2L =(xc+224)%256; //第二次翻转
PWM7T1H =200/256;
PWM7T1L =200%256;
PWM7T2H =(xc+248)/256;
PWM7T2L =(xc+248)%256;
/*******************************************************/
PWM2CR |=IO3; //选择PWM2_2
PWM3CR |=IO3; //选择PWM3_2
PWM6CR |=IO3; //选择PWM6_2
PWM7CR |=IO3; //选择PWM7_2
kuozhan0;
/*******************************************************/
PWMCR |=IO6; //计数器归零中断
PWMCR |=IO7; //启动PWM
/*******************************************************/
EA=1;
for(;;);
}
void ppp()interrupt 22
{
PWMIF &=~IO6;
if(a==0)
{
xa+=5;
if(xa>2000)
{
a=1;
}
kuozhan1;
PWM2T1H =(200+24)/256; //第一次翻转
PWM2T1L =(200+24)%256; //第一次翻转
PWM2T2H =(xa+224)/256; //第二次翻转
PWM2T2L =(xa+224)%256; //第二次翻转
PWM3T1H =200/256;
PWM3T1L =200%256;
PWM3T2H =(xa+248)/256;
PWM3T2L =(xa+248)%256;
kuozhan0;
}
if(a==1)
{
xa-=5;
if(xa<20)
{
a=0;
}
kuozhan1;
PWM2T1H =(200+24)/256; //第一次翻转
PWM2T1L =(200+24)%256; //第一次翻转
PWM2T2H =(xa+224)/256; //第二次翻转
PWM2T2L =(xa+224)%256; //第二次翻转
PWM3T1H =200/256;
PWM3T1L =200%256;
PWM3T2H =(xa+248)/256;
PWM3T2L =(xa+248)%256;
kuozhan0;
}
/*******************************************************/
if(b==0)
{
xb+=5;
if(xb>2000)
{
b=1;
}
kuozhan1;
PWM4T1H =(200+24)/256; //第一次翻转
PWM4T1L =(200+24)%256; //第一次翻转
PWM4T2H =(xb+224)/256; //第二次翻转
PWM4T2L =(xb+224)%256; //第二次翻转
PWM5T1H =200/256;
PWM5T1L =200%256;
PWM5T2H =(xb+248)/256;
PWM5T2L =(xb+248)%256;
kuozhan0;
}
if(b==1)
{
xb-=5;
if(xb<20)
{
b=0;
}
kuozhan1;
PWM4T1H =(200+24)/256; //第一次翻转
PWM4T1L =(200+24)%256; //第一次翻转
PWM4T2H =(xb+224)/256; //第二次翻转
PWM4T2L =(xb+224)%256; //第二次翻转
PWM5T1H =200/256;
PWM5T1L =200%256;
PWM5T2H =(xb+248)/256;
PWM5T2L =(xb+248)%256;
kuozhan0;
}
/*******************************************************/
if(c==0)
{
xc+=5;
if(xc>2000)
{
c=1;
}
kuozhan1;
PWM6T1H =(200+24)/256; //第一次翻转
PWM6T1L =(200+24)%256; //第一次翻转
PWM6T2H =(xc+224)/256; //第二次翻转
PWM6T2L =(xc+224)%256; //第二次翻转
PWM7T1H =200/256;
PWM7T1L =200%256;
PWM7T2H =(xc+248)/256;
PWM7T2L =(xc+248)%256;
kuozhan0;
}
if(c==1)
{
xc-=5;
if(xc<20)
{
c=0;
}
kuozhan1;
PWM6T1H =(200+24)/256; //第一次翻转
PWM6T1L =(200+24)%256; //第一次翻转
PWM6T2H =(xc+224)/256; //第二次翻转
PWM6T2L =(xc+224)%256; //第二次翻转
PWM7T1H =200/256;
PWM7T1L =200%256;
PWM7T2H =(xc+248)/256;
PWM7T2L =(xc+248)%256;
kuozhan0;
}
/*******************************************************/
}