//航順8位單片機,錦銳CA51F551S1,只可調光,調速,調燈組數,不會跑馬。程序調試OK
sfr P3 = 0xb0;
sbit EA = 0xAF;
sfr LEDWTML = 0xce;
sfr LEDWTMH = 0xcf;
sfr LEDAT1 = 0xc7;
sfr PWMEN = 0x90;
sfr PWM2DIVL = 0xad;
sfr PWM2DIVH = 0xae;
sfr PWM2DUTL = 0x9f;
sfr PWM2DUTH = 0x91;
sfr PWM2CKD = 0xb3;
sfr PWM2CON = 0xbb;
sfr LEFLG = 0xbf;
#define CKCON (*(unsigned char volatile xdata *)0x8030)
#define P34F (*(unsigned char volatile xdata *)0x801C)
#define LEDUTL (*(unsigned char volatile xdata *)0x8060)
#define LEDUTH (*(unsigned char volatile xdata *)0x8061)
#define PWMIE(N) (N<<7) //N=0-1
#define PWMTOG(N) (N<<6) //N=0-1
#define PWMMOD(N) (N<<3) //N=0-7
#define PWMPOL(N) (N<<2) //N=0-1
#define PWMCKS_SYS 0
#define PWMCKS_IL 1
#define PWMCKS_IH 2 //LEFLG
#define LEF1 (1<<3)
#define LEBSY1 (1<<6)
#define IHCKE (1<<7)
void main(void)
{
EA = 1;
CKCON =(1<<7); //打開IRCH時鐘
P34F =5;
PWM2CON = PWMIE(0) | PWMTOG(0) | PWMMOD(3) | PWMPOL(0) | PWMCKS_IH; //設置PWM時鐘源為IRCH
PWM2CKD = 0;
//設置PWMDIV、PWMDUT
PWM2DIVH = 0;
PWM2DIVL = 30;
PWM2DUTH = 0;
PWM2DUTL = 7;
LEDUTH = 0;
LEDUTL = 14;
LEDWTMH = 0;
LEDWTML = 50;
//開全局中斷
PWMEN |= (1<<2); //PWM2 使能
while(1)
{
unsigned int j,k;//定義一個16位無符號整形變量
unsigned char i;
static unsigned char color_index = 0;
code unsigned char LED_DAT[][3] =
{
{0x00,0x2F,0x00}, //綠,紅,藍
{0x2F,0x00,0x00},
{0x00,0x00,0x2F},
{0x00,0x2F,0x2F},
{0x2F,0x2F,0x00},
{0x2F,0x00,0x2F},
{0x2F,0x2F,0x2F},
};
for(i=0;i<24;i++) //LED個數i*3
{
while(LEFLG & LEBSY1);
LEDAT1 = LED_DAT[color_index][i%3];
}
color_index ++;
if(color_index> 6) color_index =0; //LED數據組數N-1
for(j=0;j<1500;j++) //延時0.2s
{
for(k=1000;k>0;k--);
}
}
} |