])
{
struct zuobiao
{
uchar x,y;
}start,end,go,pref;
uchar temp,i,j,chang,kuan;
uchar xdata save[32][4];
uchar xdata tempscr[32][4];
while(CLICK);//等待按下
saomiao();
start.x=X;start.y=Y;//起点
while(!CLICK);//等待弹起
saomiao();
end.x=X;end.y=Y;//终点
if(start.x>=end.x){temp=start.x;start.x=end.x;end.x=temp;} //将start定位到矩形左上角,
if(start.y>=end.y){temp=start.y;start.y=end.y;end.y=temp;} //end至右下角
for(i=start.x;i<end.x;i++){enkey(led_data,i,start.y);enkey(led_data,i,end.y);}//反显方框
for(j=start.y;j<end.y;j++){enkey(led_data,start.x,j);enkey(led_data,end.x,j);}
dis_play(led_data);
chang=end.x-start.x+1;kuan=end.y-start.y+1;//记录方框长宽
while(CLICK);
saomiao();
if(
!(
(X>=start.x&&X<=end.x)
&&
(Y>=start.y&&Y<=end.y)
)
)
return ;//
//开始拖动
for(i=start.x;i<end.x;i++){enkey(led_data,i,start.y);enkey(led_data,i,end.y);} //恢复方框的反显
for(j=start.y;j<end.y;j++){enkey(led_data,start.x,j);enkey(led_data,end.x,j);}
dis_play(led_data);
go.x=X;go.y=Y; //记录基准点
for(i=start.x;i<end.x;i++) //将选定区域“挖出”
for(j=start.y;j<end.y;j++)
{
mov(led_data[i][j/8],j%8,save[i-start.x][(j-start.y)/8],(j-start.y)%8);
mov(led_data[i][j/8],j%8,0xff,0);
}
for(i=0;i<32;i++) //将挖出选定区域后的屏幕交给tempscr处理
for(j=0;j<4;j++)
{
tempscr[i][j]=led_data[i][j];
}
pref.x=99;pref.y=99;
while(!CLICK)//未松开
{
saomiao(); //取鼠标位置
if(X!=pref.x||Y!=pref.y)
{
for(i=0;i<32;i++) //将挖出选定区域后的屏幕交给tempscr处理
for(j=0;j<4;j++)
{
tempscr[i][j]=led_data[i][j];
}
for(i=X-go.x;i<X-go.x+chang;i++) //以鼠标位置为基准点,放置选定
for(j=Y-go.y;j<Y-go.y+kuan;j++)
{
mov(save[i-X+go.x][(j-Y+go.y)/8],(j-Y+go.y)%8,tempscr[i][j/8],j%8);
}
pref.x=X;pref.y=Y;
}
dis_play(tempscr);
}
for(i=0;i<32;i++) //将临时屏幕“转正”
for(j=0;j<4;j++)
{
led_data[i][j]=tempscr[i][j];
}
}
void enkey(uchar led_data[32][4],uchar x,uchar y) //将第x行第y列反显
{
uchar a,b;
uchar temp;
a=y/8;b=y%8;
temp=0x80;
temp=_cror_(temp,b);
led_data[x][a]=temp^led_data[x][a];
}
void mov(uchar a,uchar b,uchar c,uchar d)//a^b->c^d
{
uchar ta,tb;
ta=0x80;tb=0x7f;
ta=_cror_(ta,b);tb=_cror_(tb,d);
ta=a&ta;tb=b&tb;
if(b>d)ta=_crol_(ta,b-d);
else ta=_cror_(ta,d-b);
c=ta|tb;
}
///////////////////////////////////文件 operating.c////////////////////////////////////////////////////////
#include"myself.h"
#include<reg52.h>
#include<intrins.h>
void fanxian(uchar LEDDATA[32][4])
{
uchar row;
for(row=0;row<32;row++)
{
LE
DDATA[row][0]=~LEDDATA[row][0];
LEDDATA[row][1]=~LEDDATA[row][1];
LEDDATA[row][2]=~LEDDATA[row][2];
LEDDATA[row][3]=~LEDDATA[row][3];
}
}