标题:
STC15单片机的5050PCA流水灯程序
[打印本页]
作者:
天蓝色的Toto
时间:
2021-2-13 02:08
标题:
STC15单片机的5050PCA流水灯程序
通过74HC595控制8位流水灯,PCA的三路PWM控制颜色
引脚定义(仅供参考)
sbit DQ=P1^2;
sbit RCK=P1^3;
sbit SCLK=P1^4;
sbit Blue=P1^0;
sbit Red=P1^1;
sbit Green=P3^7;
单片机源程序如下:
#include<stc15f2k60s2.h>
#include<intrins.h>
sbit DQ=P1^2;
sbit RCK=P1^3;
sbit SCLK=P1^4;
/*
sbit Blue=P1^0;
sbit Red=P1^1;
sbit Green=P3^7;
*/
unsigned int bianliang;
unsigned char red,green,blue;
#define CCP_S0 0x10
#define CCP_S1 0x20
void delay(void) //误差 0us
{
unsigned char a,b;
for(b=173;b>0;b--)
for(a=143;a>0;a--);
}
void Timer0Init(void) //7500微秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TH0 = 0x0F1;
TL0 = 0x9A;
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;
ET0=1;
}
void Write595(unsigned char dat)
{
unsigned char i;
RCK=0;
for(i=0;i<8;i++)
{
SCLK=0;
dat<<=1;
_nop_();
DQ=CY;
_nop_();
_nop_();
SCLK=1;
}
RCK=1;
}
void PWMInit()
{
ACC=P_SW1;
ACC&=~(CCP_S0|CCP_S1);
P_SW1=ACC;
CCON=0X00;
CL=0;
CH=0;
CMOD=0x08;
/*红*/
PCA_PWM0=0x00;
CCAP0H=CCAP0L=0X00;
CCAPM0=0X42;
/*蓝*/
PCA_PWM1=0x00;
CCAP1H=CCAP1L=0X00;
CCAPM1=0X42;
/*绿*/
PCA_PWM2=0x00;
CCAP2H=CCAP2L=0Xff;
CCAPM2=0X42;
}
void PWMSet(unsigned char re,blu,gree)
{
CCAP0H=CCAP0L=re;
CCAP1H=CCAP1L=blu;
CCAP2H=CCAP2L=gree;
}
void main()
{
bianliang=0;blue=255;green=0;red=0;
PWMInit();
Timer0Init();
while(1)
{
unsigned char ams,i,j,sma;
for(j=0;j<12;j++)
{
ams=0x80;
for(i=0;i<8;i++)
{
Write595(~ams);
ams>>=1;
delay();
}
}
for(j=0;j<12;j++)
{
ams=0x01;
for(i=0;i<8;i++)
{
Write595(~ams);
ams<<=1;
delay();
}
}
for(j=0;j<8;j++)
{
ams=0x80;
for(i=0;i<8;i++)
{
Write595(~ams);
ams>>=1;
delay();
}
ams=0x01;
for(i=0;i<8;i++)
{
Write595(~ams);
ams<<=1;
delay();
}
}
for(j=0;j<16;j++)
{
ams=0x80;sma=0x01;
for(i=0;i<8;i++)
{
Write595(~(ams|sma));
ams>>=1;
sma<<=1;
delay();
}
}
for(j=0;j<8;j++)
{
ams=0x7f;
for(i=0;i<8;i++)
{
Write595(ams);
ams>>=1;
delay();
}
}
for(j=0;j<8;j++)
{
ams=0xfe;
for(i=0;i<8;i++)
{
Write595(ams);
ams<<=1;
delay();
}
}
for(j=0;j<12;j++)
{
ams=0xf0;
for(i=0;i<2;i++)
{
Write595(~ams);
delay();
delay();
delay();
ams>>=4;
Write595(~ams);
delay();
delay();
delay();
}
}
for(j=0;j<12;j++)
{
ams=0xaa;
for(i=0;i<2;i++)
{
Write595(~ams);
delay();
delay();
delay();
Write595(ams);
delay();
delay();
delay();
}
}
for(j=0;j<12;j++)
{
ams=0x88;
for(i=0;i<4;i++)
{
Write595(~ams);
ams>>=1;
delay();
delay();
}
}
for(j=0;j<12;j++)
{
ams=0x11;
for(i=0;i<4;i++)
{
Write595(~ams);
ams<<=1;
delay();
delay();
}
}
}
}
void Timer() interrupt 1
{
if(bianliang==0)
{blue=255;green=0;red=0;}
if(bianliang>0&&bianliang<255)
{blue--;red++;}
if(bianliang==255)
{blue=0;green=0;red=255;}
if(bianliang>255&&bianliang<510)
{red--;green++;}
if(bianliang==510)
{blue=0;green=255;red=0;}
if(bianliang>510&&bianliang<765)
{blue++;}
if(bianliang==765)
{blue=255;green=255;red=0;}
if(bianliang>765&&bianliang<1020)
{red++;green--;}
if(bianliang==1020)
{blue=255;green=0;red=255;}
if(bianliang>1020&&bianliang<1275)
{blue--;green++;}
if(bianliang==1275)
{blue=0;green=255;red=255;}
if(bianliang>1275&&bianliang<1530)
{blue++;}
if(bianliang==1530)
{blue=255;}
if(bianliang>1530&&bianliang<1785)
{red--;}
if(bianliang==1785)
{red=0;}
if(bianliang>1785&&bianliang<2040)
{red++;blue--;}
if(bianliang==2040)
{blue=0;red=255;}
if(bianliang>2040&&bianliang<2295)
{blue++;green--;}
if(bianliang==2295)
{blue=255;green=0;red=255;}
if(bianliang>2295&&bianliang<2550)
{red--;green++;}
if(bianliang==2550)
{blue=255;green=255;red=0;}
if(bianliang>2550&&bianliang<2805)
{blue--;}
if(bianliang==2805)
{blue=0;green=255;red=0;}
if(bianliang>2805&&bianliang<3060)
{red++;green--;}
if(bianliang==3060)
{blue=0;green=0;red=255;}
if(bianliang>3060&&bianliang<3315)
{red--;blue++;}
bianliang++;
PWMSet(red,blue,green);
if(bianliang==3315)
{bianliang=0;}
}
复制代码
所有程序51hei提供下载:
5050全彩流水灯PCA.zip
(34.5 KB, 下载次数: 11)
2021-2-13 02:08 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1