#include <stc12c2052ad.h> //头文件
rzmzy(); //红色走马左移声明
rlszy(); //红色流水左移声明
rlsyy(); //红色流水右移声明
rzmyy(); //红色走马右移声明
rzmnwyd(); //红色走马内外移动声明
rlsnwyd(); //红色流水内外移动声明
rtbyd(); //红色跳变移动声明
rsdzmyy(); //红色3灯走马右移声明
rsdzmzy(); //红色3灯走马左移声明
rjl(); //红色渐亮声明
rja(); //红色渐暗声明
rdlszy(); //倒流水左移函数
//rdlsyy(); //倒流水右移函数,还未加入
zkb(unsigned char d);
void ys1ms(unsigned int s); //延时声明,修改s的数值,就可以改变时间
main() //主函数,由于模块化设计,只要修改下面各模块的排列顺序和时间,就可以实现各种变化模式
{
EA=1;//打开中断,使用中断方便调试查看模式
EX0=1; //允许外部中断0中断
EX1=1; //允许外部中断1中断
PX0=1; // 外部中断0位高优先级
while(1) //无限循环
{
rdlszy(); //倒流水左移
rja(); //渐暗
P1=0xff;
ys1ms(300); //延时0.3秒
//rdlsyy(); // 倒流水右移
//P1=0xff;
//ys1ms(300);
rzmyy(); //走马右移
P1=0xff;
ys1ms(300);
rzmzy(); //走马左移
P1=0xff;
ys1ms(300);
rjl(); //渐亮
rja(); //渐暗
P1=0xff;
ys1ms(300);
rzmnwyd(); //走马内外移动
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(); //流水内外移动
P1=0xff;
ys1ms(300);
rtbyd(); //跳变7种模式
P1=0xff;
ys1ms(300);
}
}
rzmyy() //走马拖尾右移函数
{
P1=0x7f;
ys1ms(60);
P1=0xbf;
if(P1_7==1)
{
unsigned int a;
for(a=0;a<350;a++) //调节点亮时间
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_7 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xdf;
if(P1_6==1)
{
unsigned int a;
for(a=0;a<350;a++) //调节点亮时间
{
unsigned char i;
P1_6 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_7 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_5 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_6 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_4 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_5 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_3 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_4 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_2 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_3 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_1 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_2 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_1 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
P1_0 = 1;
for(i = 0; i < 50; i++);
}
}
}
/****************************************************************************/
rzmzy() //走马拖尾左移函数
{
P1=0xfe;
ys1ms(60);
P1=0xfd;
if(P1_0==1)
{
unsigned int a;
for(a=0;a<350;a++) //调节点亮时间
{
unsigned char i;
P1_0 = 0;
for(i = 0; i < 10; i++); //调节亮度高低
P1_0 = 1;
for(i = 0; i < 50; i++);
}
}
P1=0xfb;
if(P1_1==1)
{
unsigned int a;
for(a=0;a<350;a++) //调节点亮时间
{
unsigned char i;
P1_1 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_0 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_2 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_1 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_3 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_2 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_4 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_3 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_5 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_4 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_6 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_5 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 15; i++); //调节亮度高低
P1_6 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
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++) //调节点亮时间
{
unsigned char i;
P1_7 = 0;
for(i = 0; i < 1; i++); //调节亮度高低
P1_7 = 1;
for(i = 0; i < 50; i++);
}
}
}
/****************************************************************************/
rlszy() //流水左移函数
{
unsigned char a,i,led; //声明无字符整形变量a,i,led
led=0xfe; //左移初始值定位
P1=led; //输出
ys1ms(120); //延时
for(i=1;i<8;i++) //设置移动7次
{
a=led<<i;//灯左移i位
P1=a; //依次点亮
ys1ms(120);
}
}
/***************************************************************************/
rlsyy() //流水右移函数
{
unsigned char a,i,led; //声明无字符整形变量a,i,led
led=0x7f; //左移初始值定位
P1=led; //输出
ys1ms(120); //延时
for(i=1;i<8;i++) //设置移动7次
{
a=led>>i;//灯右移i位
P1=a; //依次点亮
ys1ms(120);
}
}
/***************************************************************************/
rdlszy() //倒流水左移函数
{
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() //倒流水右移函数,参考上面左移
{
}
/***************************************************************************/
rsdzmyy() //3灯走马右移函数 ,可以参考单灯走马加入拖尾
{
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灯走马左移函数, 可以参考单灯走马加入拖尾
{
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() //走马内外移动函数
{
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() //红色流水内外移动函数
{
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模式移动函数
{
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;
}
/**************单片机晶振为11.0592兆的1毫秒延时*************************/
void ys1ms(unsigned int s) //定时器精确延时1毫秒函数,改变S数值即改变时间
{
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 //外中断函数
{
unsigned char n,m; //声明无字符整形变量a和b
unsigned int i; //声明无字符整形变量i
for(i=0;i<5000;i++); //延时50毫秒,防抖动
if (INT0==0) //暂停
{
n=P1; //保留状态
m=P2;
P3=0xfb; //保持暂停状态
}
if(INT1==0) //继续运行
{
P3=0xff; //释放暂停状态
P1=n; //恢复运行
P2=m;
}
}
/****************************************************************************/
rjl() //渐亮函数
{
unsigned char a, b;//a控制延时长度 b控制循环周期
P1 = 0xff;
a = 0;
for (b=250; b>0; b--) //循环周期设置
{
a++;
zkb (a); //延时长度随a而改变
P1 = 0xff;
a = ~a; //a值取反,决定灯灭时的占空比
zkb (a);
P1 = 0x00;
a = ~a; //a值取反 使a回到原值继续循环
}
}
/****************************************************************************/
rja() //渐暗函数
{
unsigned char a, b;//a控制延时长度 b控制循环周期
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) //占空比函数,由d决定延时长度
{
unsigned char i;
while( --d != 0)
{
for(i = 0; i < 1; i++); //占空比时间设置
}
}
/****************************************************************************/
|