📄 led.c
字号:
/*********************************************************************************************
*文件: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 + -