📄 点阵595.c
字号:
#include <AT89X52.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Speed 60
char temp;
sbit En=P2^4;
sbit Data=P3^5;
sbit Shclk=P3^6;
sbit Stclk=P3^7;
sbit Left=P0^0;
sbit Right=P0^2;
sbit Up=P0^4;
sbit Down=P0^6;
static uchar LeftFlag;
static uchar RightFlag;
static uchar UpFlag;
static uchar DownFlag;
uchar code table[][32]={
{0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,//"宜",
0x80,0x24,0x0F,0xF0,0x08,0x20,0x08,0x20,
0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,
0x08,0x20,0x08,0x24,0xFF,0xFE,0x00,0x00},
{0x01,0x00,0x7F,0xFC,0x01,0x00,0x3F,0xF8,//"春",
0x02,0x00,0xFF,0xFE,0x04,0x40,0x08,0x20,
0x1F,0xF0,0x28,0x2E,0xC8,0x24,0x0F,0xE0,
0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20},
{0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,//"学",
0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00},
{0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,//"院",
0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,
0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,
0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00},
{0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,//"欢",
0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,
0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,
0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04},
{0x00,0x00,0x41,0x84,0x26,0x7E,0x14,0x44,//"迎",
0x04,0x44,0x04,0x44,0xF4,0x44,0x14,0xC4,
0x15,0x44,0x16,0x54,0x14,0x48,0x10,0x40,
0x10,0x40,0x28,0x46,0x47,0xFC,0x00,0x00},
{0x09,0x00,0x09,0x00,0x13,0xFC,0x12,0x04,//"您",
0x34,0x48,0x59,0x40,0x91,0x50,0x12,0x4C,
0x14,0x44,0x11,0x40,0x10,0x80,0x02,0x00,
0x51,0x84,0x50,0x92,0x90,0x12,0x0F,0xF0},
{0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,//"!",
0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,
0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,
0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
};
void Delay(uchar ms)
{
uchar x;
for(;ms>0;ms--)
for(x=129;x>0;x--);
}
void SendByte(uchar a)//595移位数据
{
uchar i;
uchar byte;
byte=a^0xff;
for(i=0;i<8;i++)
{
Shclk=0;
Data=byte&0x80;
byte=byte<<1;
Shclk=1;
}
}
void SendNull()
{
uchar i;
for(i=0;i<8;i++)
{
Shclk=0;
Data=1;
Shclk=1;
}
}
void ClockByte()
{
Stclk=0;
_nop_();
Stclk=1;
}
void KeyScan(void)
{
if(Left==0)
{
Delay(8);
if(Left==0)
{
while(!Left);
LeftFlag=1;
RightFlag=0;
UpFlag=0;
DownFlag=0;
}
}
if(Right==0)
{
Delay(8);
if(Right==0)
{
while(!Right);
LeftFlag=0;
RightFlag=1;
UpFlag=0;
DownFlag=0;
}
}
if(Up==0)
{
Delay(8);
if(Up==0)
{
while(!Up);
LeftFlag=0;
RightFlag=0;
UpFlag=1;
DownFlag=0;
}
}
if(Down==0)
{
Delay(8);
if(Down==0)
{
while(!Down);
LeftFlag=0;
RightFlag=0;
UpFlag=0;
DownFlag=1;
}
}
}
void LeftDisplay()
{
uchar i,j,k,scan;
for(i=0;i<Speed/2;i++)
{
for(j=0;j<31;j=j+2)
{
SendNull();
if(j%2==0)
scan++;
En=0;
P2=0;
Delay(2);
En=1;
}
}
for(j=0;j<6;j++)
{
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=0;k<31;k=k+2)
{
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j][k+1]);
SendByte(table[j][k]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=0;k<31;k=k+2)
{
SendByte(table[j+4][k]);
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j][k+1]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
}
}
void RightDisplay()
{
uchar i,j,k,scan;
for(i=0;i<Speed/2;i++)
{
for(j=0;j<31;j=j+2)
{
SendNull();
if(j%2==0)
scan++;
En=0;
P2=0;
Delay(2);
En=1;
}
}
for(j=0;j<6;j++)
{
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=0;k<31;k=k+2)
{
SendByte(table[j][k+1]);
SendByte(table[j][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=0;k<31;k=k+2)
{
SendByte(table[j][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+4][k+1]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
}
}
void UpDisplay()
{
uchar i,j,k,scan;
temp=0;
for(i=0;i<Speed/2;i++)
{
for(j=0;j<31;j=j+2)
{
SendNull();
if(j%2==0)
scan++;
En=0;
P2=0;
Delay(2);
En=1;
}
}
for(j=0;j<6;)
{
for(i=0;i<Speed/2;i++)
{
scan=15-temp/2;
for(k=0;k<temp+1;k=k+2)
{
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j][k+1]);
SendByte(table[j][k]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
temp+=4;
if(temp==32)
{
temp=0;
j+=4;
}
for(i=0;i<Speed/2;i++)
{
scan=15-temp/2;
for(k=0;k<temp+1;k=k+2)
{
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j][k+1]);
SendByte(table[j][k]);
ClockByte();
En=0;
P2=scan;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
}
}
void DownDisplay()
{
uchar i,j,k,scan;
temp=30;
for(i=0;i<Speed/2;i++)
{
for(j=0;j<31;j=j+2)
{
SendNull();
if(j%2==0)
scan++;
En=0;
P2=0;
Delay(2);
En=1;
}
}
for(j=0;j<6;)
{
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=temp;k<31;k=k+2)
{
SendByte(table[j+3][k+1]);
SendByte(table[j+3][k]);
SendByte(table[j+2][k+1]);
SendByte(table[j+2][k]);
SendByte(table[j+1][k+1]);
SendByte(table[j+1][k]);
SendByte(table[j][k+1]);
SendByte(table[j][k]);
ClockByte();
En=0;
P2=scan;
Delay(2);//很重要,否则不能显示,
En=1;
if(k%2==0)
scan++;
}
}
temp-=4;
if(temp==-2)
{
j+=4;
temp=30;
}
for(i=0;i<Speed/2;i++)
{
scan=0;
for(k=temp;k<31;k=k+2)
{
SendByte(table[j+3][1+k]);
SendByte(table[j+3][k]);
SendByte(table[j+2][1+k]);
SendByte(table[j+2][k]);
SendByte(table[j+1][1+k]);
SendByte(table[j+1][k]);
SendByte(table[j][1+k]);
SendByte(table[j][k]);
ClockByte();
P2=scan;
En=0;
Delay(2);
En=1;
if(k%2==0)
scan++;
}
}
}
}
void Inital()//初始化函数
{
LeftFlag=1;
RightFlag=0;
UpFlag=0;
DownFlag=0;
}
void main()
{
Inital();
while(1)
{
KeyScan();
if(LeftFlag==1)
{
LeftDisplay();
LeftFlag=0;
RightFlag=1;
}
if(RightFlag==1)
{
RightDisplay();
RightFlag=0;
UpFlag=1;
}
if(UpFlag==1)
{
UpDisplay();
UpFlag=0;
DownFlag=1;
}
if(DownFlag==1)
{
DownDisplay();
DownFlag=0;
LeftFlag=1;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -