#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
评论1
最新资源