ucosII+ucGUI+s3c2410+LCD+触摸屏整合Word格式.docx
- 文档编号:6432692
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:24
- 大小:23.71KB
ucosII+ucGUI+s3c2410+LCD+触摸屏整合Word格式.docx
《ucosII+ucGUI+s3c2410+LCD+触摸屏整合Word格式.docx》由会员分享,可在线阅读,更多相关《ucosII+ucGUI+s3c2410+LCD+触摸屏整合Word格式.docx(24页珍藏版)》请在冰点文库上搜索。
return0;
}
return1;
voidInitLcdPort(void)
//LCDportinitialize.
s2410IOP->
GPCUP=0xFFFFFFFF;
GPCCON=0xAAAAAAAA;
GPDUP=0xFFFFFFFF;
GPDCON=0xAAAAAAAA;
GPGCON&
=~(3<
<
8);
/*SetLCD_PWRENasoutput
*/
GPGCON|=(1<
GPGDAT|=(1<
4);
//*BacklightON
voidInitLcdRegs(void)
s2410LCD->
LCDCON1
=
(CLKVAL_TFT<
8)|
//*VCLK=HCLK/((CLKVAL+1)*2)->
About7Mhz
(EACH_FRAME<
7)|
//*0:
EachFrame
(3
5)|
//TFTLCDPannel
(12
<
1)|
//Y:
//16bppMode
(0
0);
//DisableLCDOutput
LCDCON2
(VBPD
24)|
//*VBPD
:
((32-1)&
0xff)=0x1f
(LINEVAL_TFT<
14)|
//*LINEVAL_TFT:
480-1
(VFPD
6)|
//*VFPD
((11-1)&
0xff)=0xa
(VSPW
//*VSPW
((2-1)&
0x3f)=0x1
LCDCON3
(HBPD
19)|
//*HBPD
((88-1)&
0x7f)
(HOZVAL_TFT<
//*HOZVAL_TFT
800-1
(HFPD
//*HFPD
((40-1)&
0xff)
LCDCON4
(MVAL
//*MVAL
13
(HSPW
//*HSPW
((128-1)&
LCDCON5
(0
12)|
//BPP24BL
LSBvalid
(1
11)|
//FRM565MODE
:
5:
5:
1Format
10)|
//INVVCLK
VCLKFallingEdge
9)|
//INVVLINE
InvertedPolarity
//INVVFRAME
//INVVD
Normal
//INVVDEN
//INVPWREN
4)|
//INVENDLINE
3)|
//PWREN
DisablePWREN
2)|
//ENLEND
DisableLENDsignal
//BSWP
SwapDisable
//HWSWP
SwapEnable
LCDSADDR1=((FRAMEBUF_DMA_BASE>
>
22)
21)|
((M5D(FRAMEBUF_DMA_BASE>
1))<
0);
LCDSADDR2=M5D((FRAMEBUF_DMA_BASE+(LCD_XSIZE_TFT*LCD_YSIZE_TFT*2))>
1);
LCDSADDR3=(((LCD_XSIZE_TFT-LCD_XSIZE_TFT)/1)<
11)|(LCD_XSIZE_TFT/1);
LCDINTMSK|=(3);
//MASKLCDSubInterrupt
LPCSEL&
=(~7);
//DisableLPC3600
TPAL=0;
//DisableTempPalette
s2410LCD->
LCDCON1|=1;
其中,部分变量、常量定义如下:
#defineLCD_XSIZE_TFT
(800)
#defineLCD_YSIZE_TFT
(480)
#defineHOZVAL_TFT
(LCD_XSIZE_TFT-1)
#defineLINEVAL_TFT
(LCD_YSIZE_TFT-1)
#defineMVAL
(13)
#defineMVAL_USED
(1)
#defineEACH_FRAME
(0)
//STN/CSTNtimingparameterforLCBHBT161M(NANYA)
#defineWLH
(3)
#defineWDLY
(3)
#defineLINEBLANK
(1&
0xff)
#defineVBPD
#defineVFPD
#defineVSPW
0x3f)
#defineHBPD
0x7f)
#defineHFPD
#defineHSPW
#defineCLKVAL_TFT
(0)
#defineM5D(n)
((n)&
0x1fffff)
#defineSCREEN_WIDTH800//800
#defineSCREEN_HEIGHT480//480
#defineFRAMEBUF_DMA_BASE
(0x35000000)
U16*pLCDBuffer565=(U16*)FRAMEBUF_DMA_BASE;
3)填写配置文件LCDConf.h
#defineLCD_XSIZE
(800)
/*X-resolutionofLCD,Logicalcoor.*/
#defineLCD_YSIZE
(480)
/*Y-resolutionofLCD,Logicalcoor.*/
#defineLCD_BITSPERPIXEL(16)
#defineLCD_CONTROLLER1
#defineLCD_SWAP_RB_0
1
2.2.触摸屏驱动
触摸屏驱动计算出触摸屏的坐标(x,y),对dm2410实验板上的触摸屏,左下为原点,但不一定是(0,0)。
两个函数:
1)设置中断向量,开中断:
voidSetTSInterrupt(void)
rADCDLY=(50000);
rADCCON=(1<
14)|(ADCPRS<
6)|(7<
3)|(0<
2)|(0<
1)|(0);
rADCTSC=(0<
8)|(1<
7)|(1<
6)|(0<
5)|(1<
4)|(0<
2)|(3);
pISR_ADC=(U32)TSIrqISR;
//
rINTMSK&
=~(BIT_ADC);
rINTSUBMSK&
=~(BIT_SUB_TC);
2)中断处理函数:
staticvoidTSIrqISR(void)
inti;
U32Pt[6];
rINTSUBMSK|=(BIT_SUB_ADC|BIT_SUB_TC);
if(rADCDAT0&
0x8000)
{//抬起
isDown=0;
rADCTSC&
=0xff;
//Setstylusdowninterrupt
TX=-1;
TY=-1;
//抬起触笔时,TX,TY要值成不大于0的数
else//按下
{
isDown=1;
rADCTSC=(0<
8)|(0<
7)|(0<
6)|(1<
4)|(1<
2)|
(1);
for(i=0;
i<
LOOP;
i++);
//delaytosetupthenextchannel
5;
i++)
//5times
rADCCON|=0x1;
//StartX-positionconversion
while(rADCCON&
0x1);
//CheckifEnable_startislow
while(!
(0x8000&
rADCCON));
//CheckECFLG
Pt=(0x3ff&
rADCDAT0);
Pt[5]=(Pt[0]+Pt[1]+Pt[2]+Pt[3]+Pt[4])/5;
//多次采样取平均值
TX=Pt[5];
5)|(0<
2)|
(2);
//StartY-positionconversion
rADCDAT1);
//多次采样取平均值
TY=Pt[5];
rADCTSC=(1<
//cprintf("
%d,%d\n"
TX,TY);
OSMboxPost(TouchMbox,0);
//向处理触摸进程发消息
rSUBSRCPND|=BIT_SUB_TC;
//Unmasksubinterrupt(TC)
ClearPending(BIT_ADC);
3)需要的量:
#defineLOOP1
#defineADCPRS0x27
intTX=0;
//触摸坐标x
intTY=0;
//触摸坐标y
externOS_EVENT*TouchMbox;
intisDown;
4)触摸屏校准:
Ucgui390中,带有一校准程序(于TOUCH_Calibrate.c中),可以改写为我所用(见下文)。
也可设置默认值,测出左下最小坐标minX,minY和右上最大坐标maxX,maxY,注意是触摸坐标,不是lcd坐标,如下填写配置文件GUITouchConf.h:
#defineGUI_TOUCH_AD_LEFT
minX
#defineGUI_TOUCH_AD_TOP
maxY
#defineGUI_TOUCH_AD_RIGHTmaxX
#defineGUI_TOUCH_AD_BOTTOMminY
#defineGUI_TOUCH_SWAP_XY
0
#defineGUI_TOUCH_MIRROR_X
#defineGUI_TOUCH_MIRROR_Y1
#defineTOUCH_NEED_CALIBRATE0
2.3.如下填写GUIConf.h
#defineGUI_OS
(1)/*Compilewithmultitaskingsupport*/
#defineGUI_SUPPORT_TOUCH
(1)/*Supportatouchscreen(req.win-manager)*/
#defineGUI_SUPPORT_UNICODE
(1)/*SupportmixedASCII/UNICODEstrings*/
#defineGUI_SUPPORT_CHINESE
(1)
#defineGUI_DEFAULT_FONT
&
GUI_Font6x8
#defineGUI_ALLOC_SIZE
12500/*Sizeofdynamicmemory...ForWMandmemorydevices*/
#defineGUI_WINSUPPORT
1/*Windowmanagerpackageavailable*/
#defineGUI_SUPPORT_MEMDEV
1/*Memorydevicesavailable*/
#defineGUI_SUPPORT_AA
1/*Antialiasingavailable*/
2.4.ucgui与lcd驱动函数的连接,即修改LCDWin.c文件
在LCDWin.c中,去掉无用的头文件包含。
#defineSETPIXEL(x,y,c)
LCD2410_SetPixel(x,y,c,LCD_DISPLAY_INDEX)
#defineGETPIXEL(x,y)
LCD2410_GetPixel(x,y,LCD_DISPLAY_INDEX)
即将“LCDSIM_XX”改成“LCD2410_XX”,这两个函数位于lcd驱动文件中。
……………………………
#defineSETPIXEL(x,y,c)\
if(!
_CheckBound(c)){\
LCD2410_SetPixel(x,y,c,LCD_DISPLAY_INDEX);
\
#else
#defineSETPIXEL(x,y,c)LCD2410_SetPixel(x,y,c,LCD_DISPLAY_INDEX)
#endif
LCD2410_GetPixel(x,y,LCD_DISPLAY_INDEX)
……………………………
staticvoid_XorPixel(intx,inty){
unsignedintIndex=LCD_L0_GetPixelIndex(x,y);
LCD2410_SetPixel(x,y,LCD_NUM_COLORS-1-Index,LCD_DISPLAY_INDEX);
intLCD_L0_Init(void){
returnLCD2410_Init();
//调用lcd初始化函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ucosII ucGUI s3c2410 LCD 触摸屏 整合