初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2014-7-29
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-9-1 16:31:56
|
显示全部楼层
void shouxie(void);
u8 a;
u8 m=0;
u8 n=0;
u8 p=0;
void lcd_draw_bline(u16 x1, u16 y1, u16 x2, u16 y2,u8 size,u16 color)
{
u16 t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
if(x1<size|| x2><size||y1><size|| y2><size)return;
delta_x=x2-x1; //????×?±ê????
delta_y=y2-y1;
uRow=x1;
uCol=y1;
if(delta_x>0)incx=1; //?è??????·??ò
else if(delta_x==0)incx=0;//???±??
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
else if(delta_y==0)incy=0;//??????
else{incy=-1;delta_y=-delta_y;}
if( delta_x>delta_y)distance=delta_x; //?????ù±?????×?±ê?á
else distance=delta_y;
for(t=0;t<=distance+1;t++ )//????????
{
gui_fill_circle(uRow,uCol,size,color);//????
xerr+=delta_x ;
yerr+=delta_y ;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}
////////////////////////////////////////////////////////////////////////////////
void Load_Drow_Dialog(void)
{
LCD_Clear(GREEN);//????
POINT_COLOR=BLACK;//?è??×?????????
LCD_ShowString(lcddev.width-24,0,lcddev.width,16,16,"RST");//???????????ò
  OINT_COLOR=RED;//?è????±??ì??
}
//const u16  OINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};
const u16  OINT_COLOR_TBL[5]={RED,GREEN,BLACK,BROWN,GRED};
void TFTLCD_TOUCH(void)
{
u8 s=0;
while(1)
{
ctp_dev.scan();
if(ctp_dev.tpsta&0X1F) //是否有按键按下
{
if(ctp_dev.x[0]<lcddev.width&&ctp_dev.y[0]><lcddev.height)
{
if(ctp_dev.x[0]>(lcddev.width-24)&&ctp_dev.y[0]<16)Load_Drow_Dialog();//清屏
else shouxie(); //触摸划线
}
}else delay_ms(10); //????°??ü°??????±?ò
s++;
if(s%10==0)LED0=!LED0;
}
}
//触摸
void shouxie(void)
{
u8 t=0;
// u8 i=0;
u16 lastpos[5][2];
while(1)
{
ctp_dev.scan();
for(t=0;t<5;t++)
{
if((ctp_dev.tpsta)&(1<<t))
{
if(ctp_dev.x[t]><lcddev.width&&ctp_dev.y[t]><lcddev.height)
{
if(lastpos[t][0]==0XFFFF)
{
lastpos[t][0] = ctp_dev.x[t];
lastpos[t][1] = ctp_dev.y[t];
}
lcd_draw_bline(lastpos[t][0],lastpos[t][1],ctp_dev.x[t],ctp_dev.y[t],2,POINT_COLOR_TBL[t]) lastpos[t][0]=ctp_dev.x[t];
lastpos[t][1]=ctp_dev.y[t];
if(ctp_dev.x[t]>(lcddev.width-24)&&ctp_dev.y[t]<16)
{
Load_Drow_Dialog();//清屏
}
}
}else lastpos[t][0]=0XFFFF;
}
}
}
int main(void)
{
delay_init(72);
NVIC_Configuration();
uart_init(72,9600);
LED_Init();
LCD_Init();
KEY_Init();
ctp_dev.init();
POINT_COLOR=RED;
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,110,200,16,16,"2014/9/1");
delay_ms(600);
Load_Drow_Dialog();
// delay_ms(100);
while(1)
{
a=KEY_Scan(0);
if(a)
{
switch(a)
{
case KEY_UP: //开关屏
p++;
switch(p)
{
case 1 CD_DisplayOff();break;
default CD_DisplayOn();p=0;break;
}
break;
case KEY_LEFT: //key2 背光亮度调节
n++;
switch(n)
{
case 1 CD_BackLightSet(10);break;
case 2 CD_BackLightSet(30);break;
case 3 CD_BackLightSet(50);break;
default CD_BackLightSet(63);n=0;break;
}
break;
case KEY_DOWN: //背景切换
m++;
switch(m)
{
case 1 CD_Clear(GRAY);break;
case 2 CD_Clear(RED);break;
case 3 CD_Clear(BLUE);break;
case 4 CD_Clear(BLACK);break;
case 5:LCD_Clear(WHITE);break;
case 6:LCD_Clear(GREEN);break;
case 7:LCD_Clear(YELLOW);break;
case 8:LCD_Clear(BRED);break;
case 9:LCD_Clear(GRED);break;
case 10:LCD_Clear(GBLUE);break;
case 11:LCD_Clear(MAGENTA);break;
default:LCD_Clear(CYAN);m=0;break;
}
break;
case KEY_RIGHT:
LED1=!LED1;
delay_ms(200);
TFTLCD_TOUCH();
break;
}
}else delay_ms(10);
}
}
有些函数占地方我就没网上贴 程序比较简单就是学习用 但是程序不稳定 按理说应该是好的 但是我下到开发板上有事触摸屏能用有事不能用 不知道是不是程序写的自己都没弄懂还是我插上jtag后 jtag的问题 可是我拔了jtag 程序依旧不稳定 求解释 谢谢 |
|