原子哥,我自己尝试做了一个50K以下的简易频谱仪想在上面做一个可移动的十字标尺
我的思路是这样的:
1、先对十字标尺路径上的有色点做标记记录下来
2、若移动了十字标尺则先清空原来的十字标尺并且恢复原来的点
目前碰到了一个问题想请教您,首先简单看下代码吧(这个是基于触屏基础上做的)
if (Pen_Point.X0<260)
{
//恢复上次的颜色
LCD_Fill(lastx,20,lastx,220,WHITE);
LCD_Fill(20,lasty,275,lasty,WHITE);
while(t)//上次的有颜色存在
{
POINT_COLOR=cursor_s[t].addrcolor;
LCD_DrawPoint(cursor_s[t].addrx,cursor_s[t].addry);
t--;
}
POINT_COLOR=RED;
//读取当前的颜色
//读取横排颜色第一次
for(i=20;i<=275;i++)
{
color=LCD_ReadPoint(i,Pen_Point.Y0);
if (color!=0xFFFF)
{
cursor_s[t].addrx=i;
cursor_s[t].addry=Pen_Point.Y0;
cursor_s[t].addrcolor=color;
t++;
}
}
//读取横排颜色第二次
for(i=20;i<=275;i++)
{
color=LCD_ReadPoint(i,Pen_Point.Y0);
if (color!=0xFFFF)
{
cursor_s[t].addrx=i;
cursor_s[t].addry=Pen_Point.Y0;
cursor_s[t].addrcolor=color;
t++;
}
}
//读取竖排颜色第一次
for(i=20;i<=220;i++)
{
color=LCD_ReadPoint(Pen_Point.X0,i);
if (color!=0xFFFF)
{
cursor_s[t].addrx=Pen_Point.X0;
cursor_s[t].addry=i;
cursor_s[t].addrcolor=color;
t++;
}
}
//读取竖排颜色第二次
for(i=20;i<=220;i++)
{
color=LCD_ReadPoint(Pen_Point.X0,i);
if (color!=0xFFFF)
{
cursor_s[t].addrx=Pen_Point.X0;
cursor_s[t].addry=i;
cursor_s[t].addrcolor=color;
t++;
}
}
在这个代码中我对横排和竖排的颜色都存储和读取了两次,一切都比较正常
可是如果我对横排和竖排的颜色只读取一次的话就会出现某些点漏存的现象,恢复出来的东西就会缺漏
(即如果在屏幕上连续滑动建立十字标尺的话就会清空屏幕)
这是为什么呢?
|