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

📄 点阵595.c

📁 相当不错的抢答器
💻 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 + -