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

📄 88点阵全方位移动.c

📁 8*8led屏全方位移动
💻 C
字号:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define index_speed  30
/************************函数声明**************************/
void delay(uint t);
void key(void);
void key_process(uchar jz);
/************************定义全局变量**************************/
uchar speed,yidong,jz;
/************************扫描代码**************************/
uchar code scan[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/************************显示代码**************************/
unsigned char code zm[]=
{
/*------------------------------------------------------------------------------
;  源文件 / 文字 : 上
;  宽×高(像素): 8×8
;  字模格式/大小 : 单色点阵液晶字模,横向取模,字节倒序/8字节
;  数据转换日期  : 2008-11-26 13:42:41
------------------------------------------------------------------------------*/
0x00,0x08,0x08,0x38,0x08,0x08,0x7E,0x00
};

void main()
{
	uchar i,j,k;
	TMOD=0x01;
	TH0=0xD8;
	TL0=0xF0;
	TR0=1;
	ET0=1;
	EA=1;
	P2=0xff;
	P3=0x00;
	yidong=2;	   //初始向上移动
	speed=index_speed;
	while(1)
	{
		 /*********************左上************************/
		 if(yidong==1) 
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=1) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_cror_(~zm[(i+k)%8],k);;
							delay(1);
						}
					}
				}	
		 /*********************上************************/
		 if(yidong==2) 
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=2) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~zm[(i+k)%8];
							delay(1);
						}
					}
				}
		/*********************右上************************/
		 if(yidong==3) 
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=3) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_crol_(~zm[(i+k)%8],k);
							delay(1);	
						}
					}
				}		
		/*********************左************************/						 		
		if(yidong==4)
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=4) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~_cror_(zm[i],k);
							delay(1);	
						}
					}
				}
		/*********************连续移动************************/
		if(yidong==5)
				/**********************上**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~zm[(i+k)%8];
							delay(1);	
						}
					}
				}
				/**********************下**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~zm[(i-k)%8];
							delay(1);	
						}
					}
				}
				/**********************左**********************/		
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~_cror_(zm[i],k);
							delay(1);	
						}
					}
				}
				/**********************右**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~_crol_(zm[i],k);
							delay(1);
						}
					}
				}
				/**********************左上**********************/			 
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_cror_(~zm[(i+k)%8],k);
							delay(1);
						}
					}
				}	
				/**********************右上**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_crol_(~zm[(i+k)%8],k);
							delay(1);
						}
					}
				}
				/**********************左下**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_cror_(~zm[(i-k)%8],k);
							delay(1);	
						}
					}
				}
				/**********************右下**********************/
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=5) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_crol_(~zm[(i-k)%8],k);
							delay(1);	
						}
					}
				}
		/*********************右************************/
		if(yidong==6)
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=0;i<8;i++)
						{
							if(yidong!=6) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~_crol_(zm[i],k);
							delay(1);	
						}
					}
				}
		/*********************左下************************/
		if(yidong==7)
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=7) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_cror_(~zm[(i-k)%8],k);
							delay(1);	
						}
					}
				}
		/*********************下************************/
		if(yidong==8)
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=8) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=~zm[(i-k)%8];
							delay(1);	
						}
					}
				}
		/*********************右下************************/
		if(yidong==9)
				for(k=0;k<8;k++)
				{
					for(j=0;j<speed;j++)
					{
						for(i=7;i>=0&&i<8;i--)
						{
							if(yidong!=9) break;//在最里面的循环中加入判别 可以增加按键的灵敏度 如果不加则只能是运行完所有循环才进入下一步
							P3=scan[i];
							P2=_crol_(~zm[(i-k)%8],k);
							delay(1);	
						}
					}
				}
			
	}
}
void delay(uint t)
{
	uchar i;
	while(t--)
	for(i=0;i<122;i++);
}
void init_t0() interrupt 1
{
	key();
	if(jz!=0) key_process(jz);
	TH0=0xf8;	   //2ms
	TL0=0x30;
}
void key(void)
{
	uchar temp;
	P1=0xf0;
	if((P1&0xf0)!=0xf0)
	{
		delay(10);
		if((P1&0xf0)!=0xf0)
		{
			temp=0xfe;
			while(temp!=0xef)
			{
				P1=temp;
				if((P1&temp)!=temp)
				{
					jz=~temp|(~P1&0xf0);
					if((P1&0xf0)==0xf0) break;
				}
				else temp=_crol_(temp,1);
			}
		}
	}
	else jz=0;
}
void key_process(uchar jz)
{
	switch(jz)
	{
		case 0x11:yidong=1;break;		 //左上
		case 0x21:yidong=2;break;		 //上
		case 0x41:yidong=3;break;		 //右上
		case 0x12:yidong=4;break;		 //左
		case 0x22:yidong=5;break;		 //连续移动
		case 0x42:yidong=6;break;		 //右
		case 0x14:yidong=7;break;		 //左下
		case 0x24:yidong=8;break;		 //下
		case 0x44:yidong=9;break;		 //右下
		case 0x81:speed=index_speed;break;		 //原速
		case 0x82:speed-=5;if(speed<=5) speed=5;break;
		case 0x84:speed+=5;if(speed>100) speed=100;break;
		default:break;
	}
}	

⌨️ 快捷键说明

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