手机版

led点阵书写屏程序(10)

发布时间:2021-06-07   来源:未知    
字号:

])
{
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];
}

}

led点阵书写屏程序(10).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)