|
#include <stc12c2052ad.h> //頭文件
rzmzy(); //紅色走馬左移聲明
rlszy(); //紅色流水左移聲明
rlsyy(); //紅色流水右移聲明
rzmyy(); //紅色走馬右移聲明
rzmnwyd(); //紅色走馬內(nèi)外移動(dòng)聲明
rlsnwyd(); //紅色流水內(nèi)外移動(dòng)聲明
rtbyd(); //紅色跳變移動(dòng)聲明
rsdzmyy(); //紅色3燈走馬右移聲明
rsdzmzy(); //紅色3燈走馬左移聲明
rjl(); //紅色漸亮聲明
rja(); //紅色漸暗聲明
rdlszy(); //倒流水左移函數(shù)
//rdlsyy(); //倒流水右移函數(shù),還未加入
zkb(unsigned char d);
void ys1ms(unsigned int s); //延時(shí)聲明,修改s的數(shù)值,就可以改變時(shí)間
main() //主函數(shù),由于模塊化設(shè)計(jì),只要修改下面各模塊的排列順序和時(shí)間,就可以實(shí)現(xiàn)各種變化模式
{
EA=1;//打開中斷,使用中斷方便調(diào)試查看模式
EX0=1; //允許外部中斷0中斷
EX1=1; //允許外部中斷1中斷
PX0=1; // 外部中斷0位高優(yōu)先級(jí)
while(1) //無限循環(huán)
{
rdlszy(); //倒流水左移
rja(); //漸暗
P1=0xff;
ys1ms(300); //延時(shí)0.3秒
//rdlsyy(); // 倒流水右移
//P1=0xff;
//ys1ms(300);
rzmyy(); //走馬右移
P1=0xff;
ys1ms(300);
rzmzy(); //走馬左移
P1=0xff;
ys1ms(300);
rjl(); //漸亮
rja(); //漸暗
P1=0xff;
ys1ms(300);
rzmnwyd(); //走馬內(nèi)外移動(dòng)
P1=0xff;
ys1ms(300);
rlszy(); //流水左移
rja(); //漸暗
ys1ms(300);
rlsyy(); //流水右移
rja(); //漸暗
ys1ms(300);
rsdzmyy(); //3燈走馬右移
P1=0xff;
ys1ms(300);
rsdzmzy(); //3燈走馬右移
P1=0xff;
ys1ms(300);
rlsnwyd(); //流水內(nèi)外移動(dòng)
P1=0xff;
ys1ms(300);
rtbyd(); //跳變7種模式
P1=0xff;
ys1ms(300);
}
}
rzmyy() //走馬拖尾右移函數(shù)
{
P1=0x7f;
ys1ms(60);
P1=0xbf;
if(P1_7==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_7 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xdf;
if(P1_6==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_6 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_7 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_6 = 1;
P1_7 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xef;
if(P1_5==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_5 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_6 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_5 = 1;
P1_6 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xf7;
if(P1_4==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_4 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_5 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_4 = 1;
P1_5 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xfb;
if(P1_3==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_3 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_4 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_3 = 1;
P1_4 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xfd;
if(P1_2==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_2 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_3 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_2 = 1;
P1_3 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xfe;
if(P1_1==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_1 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_2 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_1 = 1;
P1_2 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xff;
if(P1_0==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_1 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_0 = 1;
P1_1 = 1;
for(i = 0; i < 50; i++);
}
}
if(P1_7==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_0 = 1;
for(i = 0; i < 50; i++);
}
}
}
/****************************************************************************/
rzmzy() //走馬拖尾左移函數(shù)
{
P1=0xfe;
ys1ms(60);
P1=0xfd;
if(P1_0==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 10; i++); //調(diào)節(jié)亮度高低
P1_0 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xfb;
if(P1_1==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_1 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_0 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_1 = 1;
P1_0 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xf7;
if(P1_2==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_2 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_1 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_2 = 1;
P1_1 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xef;
if(P1_3==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_3 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_2 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_3 = 1;
P1_2 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xdf;
if(P1_4==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_4 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_3 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_4 = 1;
P1_3 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xbf;
if(P1_5==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_5 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_4 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_5 = 1;
P1_4 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0x7f;
if(P1_6==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_6 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_5 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_6 = 1;
P1_5 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xff;
if(P1_7==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 15; i++); //調(diào)節(jié)亮度高低
P1_6 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_7 = 1;
P1_6 = 1;
for(i = 0; i < 50; i++);
}
}
if(P1_0==1)
{
unsigned int a;
for(a=0;a<350;a++) //調(diào)節(jié)點(diǎn)亮?xí)r間
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 1; i++); //調(diào)節(jié)亮度高低
P1_7 = 1;
for(i = 0; i < 50; i++);
}
}
}
/****************************************************************************/
rlszy() //流水左移函數(shù)
{
unsigned char a,i,led; //聲明無字符整形變量a,i,led
led=0xfe; //左移初始值定位
P1=led; //輸出
ys1ms(120); //延時(shí)
for(i=1;i<8;i++) //設(shè)置移動(dòng)7次
{
a=led<<i;//燈左移i位
P1=a; //依次點(diǎn)亮
ys1ms(120);
}
}
/***************************************************************************/
rlsyy() //流水右移函數(shù)
{
unsigned char a,i,led; //聲明無字符整形變量a,i,led
led=0x7f; //左移初始值定位
P1=led; //輸出
ys1ms(120); //延時(shí)
for(i=1;i<8;i++) //設(shè)置移動(dòng)7次
{
a=led>>i;//燈右移i位
P1=a; //依次點(diǎn)亮
ys1ms(120);
}
}
/***************************************************************************/
rdlszy() //倒流水左移函數(shù)
{
P1=0xfe;
ys1ms(60);
P1=0xfd;
ys1ms(60);
P1=0xfb;
ys1ms(60);
P1=0xf7;
ys1ms(60);
P1=0xef;
ys1ms(60);
P1=0xdf;
ys1ms(60);
P1=0xbf;
ys1ms(60);
P1=0x7f;
ys1ms(60);
P1=0x7e;
ys1ms(60);
P1=0x7d;
ys1ms(60);
P1=0x7b;
ys1ms(60);
P1=0x6f;
ys1ms(60);
P1=0x5f;
ys1ms(60);
P1=0x3f;
ys1ms(60);
P1=0x3d;
ys1ms(60);
P1=0x3b;
ys1ms(60);
P1=0x37;
ys1ms(60);
P1=0x2f;
ys1ms(60);
P1=0x1f;
ys1ms(60);
P1=0x1e;
ys1ms(60);
P1=0x1d;
ys1ms(60);
P1=0x1b;
ys1ms(60);
P1=0x17;
ys1ms(60);
P1=0x0f;
ys1ms(60);
P1=0x0e;
ys1ms(60);
P1=0x0d;
ys1ms(60);
P1=0x0b;
ys1ms(60);
P1=0x07;
ys1ms(60);
P1=0x06;
ys1ms(60);
P1=0x05;
ys1ms(60);
P1=0x04;
ys1ms(60);
P1=0x03;
ys1ms(60);
P1=0x02;
ys1ms(60);
P1=0x01;
ys1ms(60);
P1=0x00;
}
/***************************************************************************
rdlsyy() //倒流水右移函數(shù),參考上面左移
{
}
/***************************************************************************/
rsdzmyy() //3燈走馬右移函數(shù) ,可以參考單燈走馬加入拖尾
{
P1=0x1f;
ys1ms(60);
P1=0x8f;
ys1ms(60);
P1=0xc7;
ys1ms(60);
P1=0xe3;
ys1ms(60);
P1=0xf1;
ys1ms(60);
P1=0xf8;
ys1ms(60);
P1=0xfc;
ys1ms(60);
P1=0xfe;
ys1ms(60);
P1=0xff;
}
/****************************************************************************/
rsdzmzy() //3燈走馬左移函數(shù), 可以參考單燈走馬加入拖尾
{
P1=0xf8;
ys1ms(60);
P1=0xf1;
ys1ms(60);
P1=0xe3;
ys1ms(60);
P1=0xc7;
ys1ms(60);
P1=0x8f;
ys1ms(60);
P1=0x1f;
ys1ms(60);
P1=0x3f;
ys1ms(60);
P1=0x7f;
ys1ms(60);
P1=0xff;
}
/****************************************************************************/
rzmnwyd() //走馬內(nèi)外移動(dòng)函數(shù)
{
P1=0x7e;//
ys1ms(90);
P1=0xbd;
ys1ms(90);
P1=0xdb;
ys1ms(90);
P1=0xe7;
ys1ms(90);
P1=0xff;
ys1ms(300);
P1=0xe7;
ys1ms(90);
P1=0xdb;
ys1ms(90);
P1=0xbd;
ys1ms(90);
P1=0x7e;
ys1ms(90);
P1=0xff;
}
/****************************************************************************/
rlsnwyd() //紅色流水內(nèi)外移動(dòng)函數(shù)
{
P1=0xe7;//
ys1ms(90);
P1=0xc3;
ys1ms(90);
P1=0x81;
ys1ms(90);
P1=0x00;
rja();
ys1ms(300);
P1=0x7e;
ys1ms(90);
P1=0x3c;
ys1ms(90);
P1=0x18;
ys1ms(90);
P1=0x00;
rja();
}
/****************************************************************************/
rtbyd() //紅色跳變8模式移動(dòng)函數(shù)
{
P1=0x1f;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0xf8;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0xe7;
ys1ms(180);
P1=0xff;
ys1ms(300);
/****************************************************************************/
P1=0xfc;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0x3f;
ys1ms(180);
P1=0xff;
ys1ms(300);
/****************************************************************************/
P1=0x3c;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0x3c;
ys1ms(180);
P1=0xff;
ys1ms(300);
/****************************************************************************/
P1=0xc3;
ys1ms(120);
P1=0xff;
ys1ms(120);
P1=0xc3;
ys1ms(120);
P1=0xff;
ys1ms(120);
/****************************************************************************/
P1=0xf0;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0xf0;
ys1ms(180);
P1=0xff;
ys1ms(300);
/****************************************************************************/
P1=0xc3;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0xc3;
ys1ms(300);
/****************************************************************************/
P1=0x0f;
ys1ms(180);
P1=0xff;
ys1ms(120);
P1=0x0f;
ys1ms(180);
P1=0xff;
ys1ms(300);
/****************************************************************************/
rjl();
P1=0x00;
ys1ms(100);
P1=0xff;
ys1ms(35);
P1=0x00;
ys1ms(100);
P1=0xff;
ys1ms(35);
P1=0x00;
ys1ms(100);
P1=0xff;
ys1ms(35);
P1=0x00;
ys1ms(100);
P1=0xff;
ys1ms(35);
P1=0x00;
ys1ms(100);
P1=0xff;
ys1ms(35);
rja();
ys1ms(180);
P1=0xff;
}
/**************單片機(jī)晶振為11.0592兆的1毫秒延時(shí)*************************/
void ys1ms(unsigned int s) //定時(shí)器精確延時(shí)1毫秒函數(shù),改變S數(shù)值即改變時(shí)間
{
TR0=1;
while(s!=0)
{
TH0=-(7629/256);
TL0=-(7629%256);
while(TF0!=1);
TF0=0;
s--;
}
TR0=0;
}
/*****************************************************************************
int0_srv() interrupt 0 using 2 //外中斷函數(shù)
{
unsigned char n,m; //聲明無字符整形變量a和b
unsigned int i; //聲明無字符整形變量i
for(i=0;i<5000;i++); //延時(shí)50毫秒,防抖動(dòng)
if (INT0==0) //暫停
{
n=P1; //保留狀態(tài)
m=P2;
P3=0xfb; //保持暫停狀態(tài)
}
if(INT1==0) //繼續(xù)運(yùn)行
{
P3=0xff; //釋放暫停狀態(tài)
P1=n; //恢復(fù)運(yùn)行
P2=m;
}
}
/****************************************************************************/
rjl() //漸亮函數(shù)
{
unsigned char a, b;//a控制延時(shí)長(zhǎng)度 b控制循環(huán)周期
P1 = 0xff;
a = 0;
for (b=250; b>0; b--) //循環(huán)周期設(shè)置
{
a++;
zkb (a); //延時(shí)長(zhǎng)度隨a而改變
P1 = 0xff;
a = ~a; //a值取反,決定燈滅時(shí)的占空比
zkb (a);
P1 = 0x00;
a = ~a; //a值取反 使a回到原值繼續(xù)循環(huán)
}
}
/****************************************************************************/
rja() //漸暗函數(shù)
{
unsigned char a, b;//a控制延時(shí)長(zhǎng)度 b控制循環(huán)周期
P1 = 0x00; //亮起LED
a = 0;
for (b=250; b>0; b--)
{
a++;
zkb (a);
P1 = 0x00;
a = ~a;
zkb (a);
P1 = 0xff;
a = ~a;
}
}
/****************************************************************************/
zkb(unsigned char d) //占空比函數(shù),由d決定延時(shí)長(zhǎng)度
{
unsigned char i;
while( --d != 0)
{
for(i = 0; i < 1; i++); //占空比時(shí)間設(shè)置
}
}
/****************************************************************************/
|
|