⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 主要是LED屏的驱动,户外屏显示,程序中显示四个不停变化的图案.
💻 C
📖 第 1 页 / 共 2 页
字号:


/*********************************************************************************************
 *文件:HD(070422).C
 *版本:
 *功能:

 *用法:
 *修改记录:
 =============================================================================
 *日期          作者            内容





************************************************************************************************/



#include<reg51.h>
#include<absacc.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit G1=P1^7;
sbit R1=P3^0;
sbit CLK=P3^1;
sbit RCK=P3^2;
sbit OE=P3^3;
sbit Key=P3^4;

uchar FirstFlag;	      //红星
uchar SecondFlag;
uchar ThreeFlag;
uchar FourthFlag;
uchar SetFlag;

uchar StopFlag;            // 1为停,0为走
uint KeyTimes;	           //按键次数
uint AllReadStarTimes;      //全红星显示时的次数

uchar ColourType;
uchar PatternType; //0为绿色,1为红色,2为橙色
uchar idata ZK[128];




uint code SetKeyTimes[1]={500};
uchar code ZKA[]={ 0x0E,0x70,0x1F,0xF8,0x3F,0xFC,0x7F,0xFE,0x7F,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0x3F,0xFE,0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0,0x01,0xC0,0x00,0x80,	  //红桃
                   0x03,0xE0,0x04,0x10,0x08,0x08,0x08,0x08,0x04,0x10,0x1A,0x2C,0x26,0x32,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x81,0x20,0x82,0x12,0xA4,0x0C,0x98,0x01,0xC0,0x03,0xE0,	  //梅花
				   0x00,0x80,0x02,0x20,0x08,0x10,0x10,0x08,0x20,0x04,0x40,0x02,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x41,0x82,0x23,0xC4,0x1D,0xB8,0x03,0xC0,0x07,0xE0,   //黑桃
				   0x00,0x80,0x01,0xC0,0x03,0xE0,0x07,0xF0,0x0F,0xF8,0x1F,0xFC,0x3F,0xFE,0x7F,0xFF,0x7F,0xFF,0x3F,0xFE,0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0,0x01,0xC0,0x00,0x80	 //方块
				  
				  };

/*uchar code ZKA[]={
				  0x00,0x00,0x00,0x00,0x06,0x00,0x09,0x00,0x10,0x80,0x20,0x40,0x40,0x20,0xFF,0xF0,0xFF,0xF0,0x40,0x20,0x20,0x40,0x10,0x80,0x09,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
				  0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x14,0x00,0x12,0x00,0xFF,0xE0,0x12,0x00,0x14,0x00,0x18,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
				  0x00,0x00,0x01,0xC0,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x3F,0xC0,0x20,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0xC0,
				  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFE,0x10,0x02,0x10,0x02,0x10,0x02,0x10,0x02,0x08,0x02,0x04,0x02,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00};	
*/


uchar code ZKB[]={0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,3,
                  0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,3,
                  0,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,
                  3,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,
                  3,0,1,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,
                  1,2,3,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,
                  1,2,3,0,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,
                  0,1,2,3,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,0,1,2,0,1,2,3,0,0,1,2,3,0,1,0,1,2,3,0,0,1,2,3,
                  0,1,2,3,0,0,0,0,1,1,1,1,2	,2,2,2,3 ,3,3,3
                                                                                                               };


void Time0_Init();
void Time0_ISR();
void DisPlay(uchar FirstPatter,uchar SecondPatter,uchar ThreePatter,uchar FourthPatter);

void DelayMS(uchar MS);
void DelayUS(uchar US);
void WR_595(uchar Byte,uchar Colour);
void OUT_595(uchar FirstPatter,uchar SecondPatter,uchar ThreePatter,uchar FourthPatter);
void SendDataTo_595(uchar FirstPatter,uchar SecondPatter,uchar ThreePatter,uchar FourthPatter);


void main ()
{
 uchar i;
 
 R1=0;
 G1=0;
 OE=1;
 CLK=0;
 RCK=0;
 
  
 FirstFlag=0;	      //
 SecondFlag=1;
 ThreeFlag=2;
 FourthFlag=3;

 SetFlag=0;
 StopFlag=0;
 KeyTimes=0;	    //按键次数
 AllReadStarTimes=2;


 Time0_Init();


 //DelayMS(10); 
// for(i=0;i<128;i++)
 //{
  //ZK[i]=ZKA[i];
 //}

 

 do
 {
  if(StopFlag==0)
  {
   i=0;
   while(i<396) 
   {
     FirstFlag=ZKB[i];
	 DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);	 
	 if(StopFlag==1) break;
     
     SecondFlag=ZKB[i+1];
	 DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	 if(StopFlag==1) break;

	 ThreeFlag=ZKB[i+2];
	 DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	 if(StopFlag==1) break;

     FourthFlag=ZKB[i+3];
	 DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	 if(StopFlag==1) break;
	 i=i+4;
    }
   }
   else
   {
     if(FirstFlag==SecondFlag==ThreeFlag==FourthFlag==SetFlag)
	 {
	  if(AllReadStarTimes==KeyTimes)
	  {
	   DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	  }
	  else
	  {
	    FirstFlag=0;
		SecondFlag=1;
		ThreeFlag=2;
		FourthFlag=3;
	  }
	 }
	 else
	 {
	  if(AllReadStarTimes==KeyTimes)
	  {
	   FirstFlag=SetFlag;
	   SecondFlag=SetFlag;
	   ThreeFlag=SetFlag;
	   FourthFlag=SetFlag;
	   DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	  }
	  else
	  {
	   DisPlay(FirstFlag,SecondFlag,ThreeFlag,FourthFlag);
	  }
	 }
	 if(KeyTimes==SetKeyTimes[0])
	 {
	   KeyTimes=0;
       AllReadStarTimes--;
	   if(AllReadStarTimes==0) AllReadStarTimes=2;
	 }
   	}
  }while(1);
 }







/*****************************************************************************************

*移位寄存器接收数据子程序

******************************************************************************************/

void OUT_595( uchar FirstPatter,uchar SecondPatter,uchar ThreePatter,uchar FourthPatter)
{
 uchar i,j,m,n,a;
 uchar B,Temp,Byte;
 
 B=0;
 OE=1;
 n=0;
 Byte=ZK[n];		                 //OE控制每行显示
 for(i=0;i<16;i++)
 {
  P1=P1&0x0f0;
  P1=(P1|(B&0x0f));
  OE=0;
  a=0;  
  for(m=0;m<8;m++)
  {   
    Temp=Byte;
    for(j=0;j<8;j++)
    {
     if(Temp&1)
     { 
	   if(a<2)
	   {
        switch(FirstPatter) 
        {
         case 0:G1=1;
                R1=0;
	            break;
         case 1:G1=0;
                R1=0;
	            break;
         case 2:G1=0;
                R1=1;
	            break;
		 case 3:G1=1;
                R1=0;
	            break;
        default:break;
       }
	  }
      if((a>=2)&&(a<4))
	  {
       switch(SecondPatter) 
       {
         case 0:G1=1;
                R1=0;
	            break;
         case 1:G1=0;
                R1=0;
	            break;
         case 2:G1=0;
                R1=1;
	            break;
		 case 3:G1=1;
                R1=0;
	            break;
        default:break;
       }
	  }
      if((a>=4)&&(a<6))
	  {
       switch(ThreePatter) 
       {
         case 0:G1=1;
                R1=0;
	            break;
         case 1:G1=0;
                R1=0;
	            break;
         case 2:G1=0;
                R1=1;
	            break;
		 case 3:G1=1;
                R1=0;
	            break;
        default:break;
       }
	  }
      if((a>=6)&&(a<8))
	  {
       switch(FourthPatter) 
      {
         case 0:G1=1;
                R1=0;
	            break;
         case 1:G1=0;
                R1=0;
	            break;
         case 2:G1=0;
                R1=1;
	            break;
		 case 3:G1=1;
                R1=0;
	            break;
        default:break;
       }
	  }
     }
     else 
     {
      G1=1;
      R1=1; 
      
     }
     CLK=0;
     _nop_();
     _nop_();
     CLK=1;
     Temp>>=1;
     CLK=0;
    }
    RCK=0;
    _nop_();
    _nop_();
    RCK=1;
    Byte=ZK[n+1];
    n++;
	a++; 
	
  }  
  OE=1;
  B++;
  //DelayUS(1);   
 }
 OE=1;
}


/*********************************************************************************************

* 单字符显示子程序



***********************************************************************************************/
void SendDataTo_595(uchar FirstPatter,uchar SecondPatter,uchar ThreePatter,uchar FourthPatter)
{
  uchar i;
 
  //for(m=0;m<5;m++)
  //{
   //for(k=0;k<8;k++)
   //{ 
    for(i=0;i<32;i++)
    {
     OUT_595(FirstPatter,SecondPatter,ThreePatter,FourthPatter);
    }
    //DelayUS(50);
   /* for(j=0;j<15;j++)
    {
     TEM[j]=ZK[j+1];
    }
    TEM[15]=ZK[0];*/
   /* for(j=15;j>0;j--)
    {
     TEM[j]=ZK[j-1];
    }
    TEM[0]=ZK[15];
    for(j=0;j<16;j++)
    {
     ZK[j]=TEM[j];
    }*/
   //}
  //}
 }


/******************************************************************************

*移位寄存器接收数据子程序

******************************************************************************/
/*
void WR_595(uchar Byte,uchar Colour)
{
 uchar i,j;
 uchar B,Temp;
 
 B=0;
 OE=1;
 for(i=0;i<16;i++)
 {
  P1=P1&0x0f0;
  P1=(P1|(B&0x0f));
  Temp=Byte;
  OE=0;
  for(j=0;j<8;j++)
  {
   if(Temp&1)
   { 
    switch( Colour) 
    {
     case 0:G1=0;
            R1=1;
	     break;
     case 1:G1=1;
            R1=0;
	     break;
     case 2:G1=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -