本帖最后由 S96TBN 于 2015-7-7 22:34 编辑
用stc12c5a60s2单片机内部自带的pwm寄存器通过双向晶闸管调光 p37接的独立按键按一下输出不同占空比的pwm波 占空比是通过CCAP0H(最大值0xff 也就是255)调节的 CCAP0H 取(255/8)x1,2,3....8 用switch case语句输出 但是做成实物发现pwm没有控制效果 撤掉pwm以后灯泡依然亮 仿真图和程序如下 求大神指导 忘记补充了 实物光耦是moc3023 双向可控硅是 bt138
#include <12C5A.H> //??STC12????????
#define uchar unsigned char //???
sbit kp1=P3^7; //pwm1 ???+
uchar count,count1; //c??pwm1 c1??pwm2
/********************???????***************/
uchar a1,b1,i1;
//nms????
void delayms(uchar n)
{
for(i1=0;i1<n;i1++)
{
for(a1=120;a1>0;a1--)
for(b1=225;b1>0;b1--);
}
}
/**************************END********************/
/***********************???***********************/
void main()
{
P0=0; //????
P2M1=0xff;
P2M0=0x00; //?P2?????????
P1M1=0x00;
P1M0=0xFF;
CCON=0; //???PCA?????
//PCA???????
//?? CF ??
CL=0; //PCA ?????
CH=0;
CMOD=0x00; //????????PCA?????
//??PCA????
CCAP0H=CCAP0L=0xFF; //PWM0 ???????0?????
CCAP1H=CCAP1L=0xFF;
CCAPM0=0x42; //PCA module-0 ???PWM??
//?PCA??
//CCAPM1=0x42;
CR=1; //PCA ?????
while(1)
{
if(kp1==0) //zkb1+
{
delayms(2);
if(kp1==0)
{
count=count+1;
if(count>2)
count=0;
}
while(!kp1);
}
switch(count)
{
case 0: CCAP0H=0x0f; break;
case 1: CCAP0H=0X1f; break; // 1/8
case 2: CCAP0H=0X3F; break; // 2/8 3f
case 3: CCAP0H=0X5F; break; // 3/8
case 4: CCAP0H=0X7F; break; // 4/8
case 5: CCAP0H=0X9F; break; // 5/8
case 6: CCAP0H=0XbF; break; // 6/8
case 7: CCAP0H=0XdF; break; // 7/8
case 8: CCAP0H=0XfF; break; // 8/8
}
}
}
|