//程序说明:使用内部内部时钟fosc/12产生周期为256us,占空比为25%的方波
#include<STC12C5616AD.h>
#define uchar unsigned char
#define uint unsigned int
sbit d1=P1^0;
sbit d2=P1^1;
void PWM_init()
{
CMOD=0x00;//PCA计数脉冲选择内部时钟fosc/02(0x02:fosc/2)
CL=0x00;//PCA赋初值
CH=0x00;
}
void PWM0(uchar ZKB)
{
CCAP0L=CCAP0H=ZKB;//255*(100-ZKB)/100;//占空比设置
// =;//255*(100-ZKB)/100;//CL由ff-00溢出时,CCAP0H的值装入CCAP0L
CCAPM0=0x42;// 8位PWM模式
CR=1; //开始计数
}
void PWM1(uchar ZKB) //高电平占得比例占空比为(Gao/255)
{
CCAP1H = CCAP1L = ZKB;//256-(int)(256/100)*Gao;
CCAPM1=0x42;// 8位PWM模式
CR=1;
}
void PWM2(uchar ZKB) //高电平占得比例占空比为(Gao/255)
{
CCAP2H = CCAP2L = ZKB;//256-(int)(256/100)*Gao;
CCAPM2=0x42;// 8位PWM模式
CR=1;
}
void PWM3(uchar ZKB) //高电平占得比例占空比为(Gao/255)
{
CCAP3H = CCAP3L = ZKB;//256-(int)(256/100)*Gao;
CCAPM3=0x42;// 8位PWM模式
CR=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
PWM_init();
while(1)
{
if(d1!=0)
{
PWM0(130);
PWM1(130);
PWM2(255);
PWM3(255);
}
if(d2==1)
{
PWM0(60);
PWM1(255);
PWM2(20);
PWM3(255);
delay(300);
}
i
}
}
若不是新手加上按键应该会的
追问大哥 我问的是MSP430的程序啊。。。
追答/*******************************************************
程序功能:用从P2.3和P2.4输出的PWM波形驱动LED闪烁
P2.3口输出方波的占空比为75%
P2.4口输出方波的占空比为25%
-------------------------------------------------------
测试说明:观察LED的亮灭的时间长短
*******************************************************/
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关狗
P2DIR = 0xff; // P2端口设置为输出
P2OUT = 0x00; // 关闭其他LED
P2SEL |= BIT3 + BIT4; // P2.3和P2.4连接内部模块
CCR0 = 4096-1; // PWM周期为1S
CCTL1 = OUTMOD_7; // CCR1 reset/set
CCR1 = 3072; // CCR1 PWM duty cycle
CCTL2 = OUTMOD_7; // CCR2 reset/set
CCR2 = 1024; // CCR2 PWM duty cycle
TACTL = TASSEL_1 + ID_3 + MC_1; // ACLK/8, up mode
_BIS_SR(LPM3_bits); // Enter LPM3
}
追问大哥 你这说的不靠谱啊。。。靠谱点行么。。