⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc_pwm.c

📁 这是关于stc12c系列单片机PWM的事例程序,对学习单片机的东东很有用
💻 C
字号:
//用PWM0模式控制OE(P3.7&P1.2),达到的效果是红渐亮到最亮,再渐暗到黑,然后是绿色、蓝色、白色。

#include <REGX55.H>
#include "stc12c.h"
#include "b2x.h"

#define u8	unsigned char 	
#define u16	unsigned int
#define STIME 	2000		//定时器时间  32ms
sbit 	OE =P1^2;
sbit 	STB=P1^3;

bit flag_pwm;
bit flag_dir;

void time0(void) interrupt 1 using 1
{
TH0=-(STIME/256);
TL0=-(STIME%256);
flag_pwm=1;
}
void main(void)
{
u8 i,j;
u8 liangdu,color_state;
//ini 
///////////////////////////////io
//P1.2 P3.7为开漏输出,P3.2 P3.3 P3.4 P3.5 为输入 其他默认
P1M0=b00000100;
P1M1=b00000000;
P3M0=b00111100;
P3M1=b00000000;	 
OE=1;
///////////////////////////////spi
SPCTL	=b11010000;
SPSTAT	=b11000000;
//////////////////////////////pwm
CMOD=0x02;
CL=0x00;
CH=0x00;
CCAPOL=0xC0;
CCAPOH=0xC0;  //占空比设置
CCAPM0=0x42;
/////////////////////////////
color_state=0x22;
for(i=0;i<20;i++)
	{
	SPDAT=color_state;
	while(!(SPSTAT&0x80));
	SPSTAT=0x80;
	}
OE=1;
for(j=0;j<2;j++);
STB=1;
for(j=0;j<2;j++);
STB=0;
for(j=0;j<2;j++);
OE=0;
for(j=0;j<2;j++);
flag_pwm=0;
//////////////////////////////time0
TMOD=b00000001;
TH0=-(STIME/256);
TL0=-(STIME%256);
ET0=1;
TR0=1;
///////////////////////////////start
OE=1;
CR=1;
flag_dir=0;
liangdu=2;
EA=1;
while(1)
	{
	if(flag_pwm==1)
		{
		if(flag_dir==0)
			{
			//CCAPOH=liangdu;	
			CCAPOH=(liangdu/8)*8;	
			liangdu++;
			if(liangdu==0)
				{
				liangdu=255;
				flag_dir=1;
				}
			}
		else	
			{
			//CCAPOH=liangdu;	
			CCAPOH=(liangdu/8)*8;
			liangdu--;
			if(liangdu==0)
				{
				switch(color_state)
					{
					case(0x22):
						{
						color_state=0x44;
						for(i=0;i<20;i++)
							{
					       		SPDAT=color_state;
							while(!(SPSTAT&0x80));
							SPSTAT=0x80;
							}
						OE=1;
						for(j=0;j<2;j++);
						STB=1;
						for(j=0;j<2;j++);
						STB=0;
						for(j=0;j<2;j++);
						OE=0;
						for(j=0;j<2;j++);
						liangdu=1;
						break;		
						}
					case(0x44):
						{
						color_state=0x88;
						for(i=0;i<20;i++)
							{
						       	SPDAT=color_state;
							while(!(SPSTAT&0x80));
							SPSTAT=0x80;
							}
						OE=1;
						for(j=0;j<2;j++);
						STB=1;
						for(j=0;j<2;j++);
						STB=0;
						for(j=0;j<2;j++);
						OE=0;
						for(j=0;j<2;j++);
						liangdu=1;
						break;
						}
					case(0x88):
						{
						color_state=0xee;
						for(i=0;i<20;i++)
							{
						       	SPDAT=color_state;
							while(!(SPSTAT&0x80));
							SPSTAT=0x80;
							}
						OE=1;
						for(j=0;j<2;j++);
						STB=1;
						for(j=0;j<2;j++);
						STB=0;
						for(j=0;j<2;j++);
						OE=0;
						for(j=0;j<2;j++);
						liangdu=1;
						break;
						}
					case(0xee):
						{
						color_state=0x22;
						for(i=0;i<20;i++)
							{
						       	SPDAT=color_state;
							while(!(SPSTAT&0x80));
							SPSTAT=0x80;
							}
						OE=1;
						for(j=0;j<2;j++);
						STB=1;
						for(j=0;j<2;j++);
						STB=0;
						for(j=0;j<2;j++);
						OE=0;
						for(j=0;j<2;j++);
						liangdu=1;
						break;
						}						
					default:
						{
						break;	
						}	
	 				}
				flag_dir=0;
				}
			}	
		flag_pwm=0;
			}
		}
} 	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -