简介:
256+9个3mm蓝雾led1个自闪led。 32个8550三极管。 32个1K贴片电阻。 细导线若干。 9*15洞洞板。 stc8c52一块。 单片机座1个。 12M晶振1个 30pf瓷片电容2个 10uf电解电容1个 10K电阻1个 按键一个 自锁开关一个。 电源输入自已选,   16*16   还有一个22R电阻与顶部串联
30,27,25,22.75,21,19.6,18.5,17.75,17.25,16.75,17,17,16.68,18.5,19.7,21.1
 
三极管带字一面为正面!
+5V接左脚,,右脚接列(阳)
-5V接右脚,,左脚接横(阴)

 




#include<reg52.h>
#include<intrins.h>//循环函数的头文件
#define uint unsigned int
#define uchar unsigned char
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//从低位往高位移一个灯
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//从高位往低位移一个灯
uchar code table2[]={0xfe,0xfa,0xf8,0xf0,0xe0,0xa0,0x80,0x00};//从低位到高位逐步全部点亮
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//从高位到低位逐步全部点亮
uchar code table4[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//从低位到高位逐步全部熄灭
uchar code table5[]={0x80,0xa0,0xe0,0xf0,0xf8,0xfa,0xfe,0xff};//从高位到低位逐步全部熄灭
uchar code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//从低位到高位,灭一个灯移动
uchar code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//从高位到低位,灭一个灯移动
uchar i;
void delay(uint z) //延时函数
{
 uint x,y;
 for(x=z;x>0;x--)
 for(y=314;y>0;y--);
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
void deng123()//
{
 for(i=0;i<8;i++)
 {
 P2=table1[i];
 P0=table1[i];
 delay(25);
 }
}
/***********************************************
************************************************/
void deng0()//所有灯亮一会儿
{
 P0=0x00;P1=0x00;P2=0x00;P3=0x00;
 delay(150);
}
/////////////////////////////////
void deng0_1()//所有灯灭一会儿
{
 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
 delay(150);
}
//////////////////////////////////////
 void deng1()//两列灯顺时针旋转2遍,然后逐渐降低
 { 
 uchar c;
 P1=0x00;P3=0x00;
 
 for(c=2;c>0;c--)
 {
 deng123();
 }
 ////////////////
P1=0x03;
 deng123();
 ///////////////// 
 P1=0x0f;
 deng123();
 ////////////////
 P1=0x3f;
 deng123();
 ///////////////
 P1=0xff;
 deng123();
 ////////////////////////
 P3=0x03;
 deng123();
 //////////////
 P3=0x0f;
 deng123();
 //////////////
 P3=0x3f;
 deng123();
 /////////////
 P3=0xff;
 deng123();
 P2=0xff;P0=0xff;
 
 }
///////////////////////////////////////////////
void deng2()//四列灯顺时针旋转2遍
 { 
 uchar a;
 uchar b;
 b=0x77;
 P2=b;
 P0=b;
 P1=0x00;P3=0x00;
 for(a=4;a>0;a--)
 {
 for(i=0;i<8;i++)
 {
 b=_cror_(b,1);//循环左移
 delay(25);
 P2=b;
 P0=b;
 }
 } 
 
 P2=0xff;P0=0xff;P1=0xff;P3=0xff;
 
 }
//////////////////////////////////////////////
 void deng3()//单层,向上升
 {
 P0=0x00;
 P2=0x00;
 
 for(i=0;i<8;i++)
 {
 P3=table1[i];
 delay(25);
 }
 P3=0xff;
/*----------------------*/ 
 for(i=0;i<8;i++)
 {
 P1=table1[i];
 delay(25);
 }
 P1=0xff;
 }
/////////////////////////////////////////
 void deng4()//单层,向下降
 { 
 P2=0x00;P0=0x00;
 for(i=0;i<8;i++)
 {
 P1=table0[i];
 delay(25);
 }
 P1=0xff;
/*----------------------*/
 for(i=0;i<8;i++)
 {
 P3=table0[i];
 delay(25);
 }
 P3=0xff;P1=0xff;P0=0xff;P2=0xff; 
 }
 /////////////////////////////////////////
 void deng5()//从上到下,逐层全部点亮】
 {
 P0=0x00;P2=0x00;
 for(i=0;i<8;i++)
 {
 P1=table2[i];
 delay(25);
 }
 for(i=0;i<8;i++)
 {
 P3=table2[i];
 delay(25);
 }
 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
 }
 ////////////////////////////////////////
 void deng6()//从上到下,逐层全部熄灭】
 {
 P0=0x00;P2=0x00;
 P1=0x00;P3=0x00;
 for(i=0;i<8;i++)
 {
 P1=table4[i];
 delay(25);
 }
 P1=0xff;
 for(i=0;i<8;i++)
 {
 P3=table4[i];
 delay(25);
 }
 P3=0xff;
 P0=0xff;P2=0xff;
 }
///////////////////////////////////
void deng7()//四组灯,交替两次
{
 for(i=2;i>0;i--)
 {
 P1=0x00;P2=0x00;//上左
 delay(40);
 P1=0xff;P2=0xff;
 delay(40);
 
 
 /////////////
 P3=0x00;P0=0x00;//下右
 delay(40);
 P3=0xff;P0=0xff;
 delay(40);
 /////////////
 P3=0x00;P2=0x00;//下左
 delay(40);
 P3=0xff;P2=0xff;
 delay(40);
 /////////////
 P1=0x00;P0=0x00;//上右
 delay(40);
 P1=0xff;P0=0xff;
 delay(40);
 }
 
}
void deng8()//上半先逐步列点亮,然后再向下点点亮
{
 P0=0xff;P2=0xff;P3=0xff;
 P1=0x00;
 for(i=0;i<8;i++)
 {
 P0=table3[i];
 P2=table3[i];
 delay(25); 
 }
 delay(70);
 P1=0x00;P2=0x00;P0=0x00;
 for(i=0;i<8;i++)
 {
 P3=table2[i];
 delay(25);
 }
}
//////////////////////////////////////
void deng9()//从中间向上、下点亮,再熄灭
{
 P0=0x00;P2=0x00;
 for(i=0;i<8;i++)
 {
 P1=table3[i];
 P3=table2[i];
 delay(25);
 }
 for(i=0;i<8;i++)
 {
 P1=table4[i];
 P3=table5[i];
 delay(25);
 }
}
///////////////////////////////////////////
void deng10()//从中间向上、下熄灭
{
 P0=0x00;P2=0x00;
 for(i=0;i<8;i++)
 {
 P1=table5[i];
 P3=table4[i];
 delay(25);
 }
 P1=0xff;P3=0xff;
}
void deng11()//逆时针逐列点亮所有灯
{
 P1=0x00;P3=0x00;
 P0=0xff;P2=0xff;
 for(i=0;i<8;i++)
 {
 P0=table2[i];
 delay(25);
 }
 for(i=0;i<8;i++)
 {
 P2=table2[i];
 delay(25);
 }
 P0=0xff;P2=0xff;P3=0xff;P1=0xff;
}
///////////////////////////////////////////
void deng12()//闪烁
{
 uchar i;
 uchar b;
 b=0xaa;
 P2=b;
 P0=b;
 P1=b;
 P3=b;
 
 for(i=0;i<8;i++)
 {
 b=_cror_(b,1);//循环左移
 delay(50);
 P2=b;
 P0=b;
 P1=b;
 P3=b;
 
 }
 P0=0xff;P1=0xff;P2=0xff;P3=0xff;
}
void deng13()//两层灯,分别从中间向上、下移动
{
 P2=0x00;P0=0x00;
 for(i=0;i<8;i++)
 {
 P1=table1[i];
 P3=table0[i];
 delay(25);
 }
 P2=0xff;P0=0xff;P1=0xff;P3=0xff;
}
void deng14_1()//点满一圈的小函数(限内部用)
{ 
 P2=0xff;P0=0xff;
for(i=0;i<8;i++)
 {
 P2=table2[i];
 delay(15);
 }
 
 for(i=0;i<8;i++)
 {
 P0=table2[i];
 delay(15);
 }
 P2=0xff;P0=0xff;
}
///////////////////////////
void deng14()//从下开始,点满一圈后,灭,再上升点亮第二圈
{
 P1=0xff;
P3=0x7f;//1层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xbf;//2层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xdf;//3层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xef;//4层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xf7;//5层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xfb;//6层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xfd;//7层
 deng14_1();//点满一圈的小函数(限内部用)
 P3=0xfe;//8层
 deng14_1();//点满一圈的小函数(限内部用)
 //////////////////
 P3=0xff;
P1=0x7f;//1层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xbf;//2层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xdf;//3层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xef;//4层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xf7;//5层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xfb;//6层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xfd;//7层
 deng14_1();//点满一圈的小函数(限内部用)
 P1=0xfe;//8层
 deng14_1();//点满一圈的小函数(限内部用)
P1=0xff;
}
/*====================================================
===================主函数君===========================
======================================================*/ 
void main()
{
 while(1)
 { 
 
 deng0_1();//所有灯灭一会儿
 deng0_1();//所有灯灭一会儿 
 deng14();//从下开始,点满一圈后,灭,再上升点亮第二圈 
 deng4();//单层,向下降
 
 deng5();//从上到下,逐层全部点亮
 deng6();//从上到下,逐层全部熄灭】
 deng8();//上半先逐步点亮,然后再向下点亮
 deng0();//所有灯亮一会
deng6();//从上到下,逐层全部熄灭】
 deng9();//从中间向上、下点亮,再熄灭
 deng9();//从中间向上、下点亮,再熄灭
 deng0_1();//所有灯灭一会儿
 deng11();//逆时针逐列点亮所有灯
 deng10();//从中间向上、下熄灭
 deng0_1();//所有灯灭一会儿
 deng13();//两层灯,分别从中间向上、下移动
 deng3();//单层,向上升
 deng5();//从上到下,逐层全部点亮
 deng12();//闪烁
 deng12();//闪烁
 deng2();//四列灯顺时针旋转2遍
 deng1();//两列灯顺时针旋转2遍,然后逐渐降低
 deng0_1();//所有灯灭一会儿 
 }
}