平台:李想stm32开发板
利用开发板工程:STM32 理想智芯科技(库函数)
我的驱动函数文件:ILI93xx.c ILI93xx.h ILI9320.h
ucgui文件:需要添加代码的文件LCDConf.h GUICOnf.h LCDDummy.c
/************************************************************************************************************
/ ILI93xx.c该文件为 液晶驱动初始化函数,画点函数,读点函数
/ ILI93xx.h为ILI93xx.c的函数申明
/ lcd9320.h为为液晶的IO接口、液晶寄存器的宏定义
************************************************************************************************************/
//ILI93xx.c
#include "lcd9320.h"
#include "delay.h"
#include "stm32f10x.h"
#include "ILI93xx.h"
u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;
u16 DeviceCode;
/*
LCD_WR_DATA(data)该函数在LCD9320.h中用宏定义
*/
void LCD_WR_REG(u16 data)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_14);//写地址
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
GPIO_Write(GPIOE, data);
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
GPIO_SetBits(GPIOD,GPIO_Pin_13);
GPIO_SetBits(GPIOD,GPIO_Pin_12);
}
//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOE->CRL=0X88888888; //PB0-7 上拉输入
GPIOE->CRH=0X88888888; //PB8-15 上拉输入
GPIOE->ODR=0X0000; //全部输出0
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
if(DeviceCode==0X8989)delay_us(2);//FOR 8989,延时2us
LCD_RD_SET;
t=DATAIN;
LCD_CS_SET;
GPIOE->CRL=0X33333333; //PB0-7 上拉输出
GPIOE->CRH=0X33333333; //PB8-15 上拉输出
GPIOE->ODR=0XFFFF; //全部输出高
return t;
}
//写寄存器
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
LCD_WR_REG(LCD_Reg);
LCD_WR_DATA(LCD_RegValue);
}
//读寄存器
u16 LCD_ReadReg(u8 LCD_Reg)
{
u16 t;
GPIO_InitTypeDef GPIO_InitStructure;
LCD_WR_REG(LCD_Reg); //写入要读的寄存器号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_14);
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
//读取数据(读寄存器时,并不需要读2次)
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
delay_us(5);//FOR 8989,延时5us
GPIO_SetBits(GPIOD,GPIO_Pin_15);
t=GPIO_ReadInputData(GPIOE);
GPIO_SetBits(GPIOD,GPIO_Pin_12);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;
GPIO_Init(GPIOE, &GPIO_InitStructure);
return t;
}
//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{
if(DeviceCode==0X9341)LCD_WR_REG(0x2C);//ILI9341是以0X2C开始的
else LCD_WR_REG(R34);
}
//LCD写GRAM
void LCD_WriteRAM(u16 RGB_Code)
{
LCD_WR_DATA(RGB_Code);//写十六位GRAM
}
//从ILI93xx读出的数据为GBR格式,而我们写入的时候为RGB格式。
//通过该函数转换
//c:GBR格式的颜色值
//返回值:RGB格式的颜色值
u16 LCD_BGR2RGB(u16 c)
{
u16 r,g,b,rgb;
b=(c>>0)&0x1f;
g=(c>>5)&0x3f;
r=(c>>11)&0x1f;
rgb=(b<<11)+(g<<5)+(r<<0);
return(rgb);
}
//画点
//x:0~239
//y:0~319
//POINT_COLOR:此点的颜色
void LCD_DrawPoint(u16 x,u16 y)
{
LCD_WriteReg(0x004e,x); //设置x坐标位置
LCD_WriteReg(0x004f,y); //设置y坐标位置
LCD_WR_REG(0x22); //LCD_WriteCMD(GRAMWR);写入GRAM的命令,将此函数中上述
LCD_WR_DATA(POINT_COLOR);
}
//读取个某点的颜色值
//x:0~239
//y:0~319
//返回值:此点的颜色
u16 LCD_ReadPoint(u16 x,u16 y)
{
u16 r,g,b;
if(x>=LCD9320_W||y>=LCD9320_H)return 0;//超过了范围,直接返回
LCD_SetCursor(x,y);
if(DeviceCode==0X9341)LCD_WR_REG(0X2E);//ILI9341发送读GRAM指令
else LCD_WR_REG(R34); //其他IC发送读GRAM指令
GPIOE->CRL=0X88888888; //PB0-7 上拉输入
GPIOE->CRH=0X88888888; //PB8-15 上拉输入
GPIOE->ODR=0XFFFF; //全部输出高
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读GRAM时,第一次为假读)
LCD_RD_CLR;
delay_us(1);//延时1us
LCD_RD_SET;
//dummy READ
LCD_RD_CLR;
delay_us(1);//延时1us
LCD_RD_SET;
r=DATAIN;
if(DeviceCode==0X9341)
{
LCD_RD_CLR;
LCD_RD_SET;
b=DATAIN;//读取蓝色值
g=r&0XFF;//对于9341,第一次读取的是RG的值,R在前,G在后,各占8位
g<<=8;
}
LCD_CS_SET;
GPIOE->CRL=0X33333333; //PB0-7 上拉输出
GPIOE->CRH=0X33333333; //PB8-15 上拉输出
GPIOE->ODR=0XFFFF; //全部输出高
if(DeviceCode==0X9325||DeviceCode==0X4535||DeviceCode==0X4531||DeviceCode==0X8989||DeviceCode==0XB505)return r;//这几种IC直接返回颜色值
else if(DeviceCode==0X9341)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341需要公式转换一下
else return LCD_BGR2RGB(r);
}
void LCD_DisplayOn(void)
{
if(DeviceCode==0X9341)LCD_WR_REG(0X29);//开启显示
else LCD_WriteReg(R7,0x0173); //开启显示
}
//LCD关闭显示
void LCD_DisplayOff(void)
{
if(DeviceCode==0X9341)LCD_WR_REG(0X28);//关闭显示
else LCD_WriteReg(R7, 0x0);//关闭显示
}
__inline void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
#if USE_HORIZONTAL==1
if(DeviceCode==0X8989)
{
Xpos=319-Xpos;
LCD_WriteReg(0X4E, Ypos);
LCD_WriteReg(0X4F, Xpos);
}else if(DeviceCode==0X9341)//9341,设置坐标
{
LCD_WR_REG(0x2B);
LCD_WR_DATA(Ypos>>8);
LCD_WR_DATA(Ypos&0XFF);
LCD_WR_REG(0x2A);
LCD_WR_DATA(Xpos>>8);
LCD_WR_DATA(Xpos&0XFF);
}else
{
Xpos=319-Xpos;
LCD_WriteReg(R32,Ypos);
LCD_WriteReg(R33,Xpos);
}
#else
if(DeviceCode==0X8989)
{
LCD_WriteReg(0X4E, Xpos);
LCD_WriteReg(0X4F, Ypos);
}else if(DeviceCode==0X9341)
{
LCD_WR_REG(0x2A);
LCD_WR_DATA(Xpos>>8);
LCD_WR_DATA(Xpos&0XFF);
LCD_WR_REG(0x2B);
LCD_WR_DATA(Ypos>>8);
LCD_WR_DATA(Ypos&0XFF);
}else
{
LCD_WriteReg(R32, Xpos);
LCD_WriteReg(R33, Ypos);
}
#endif
}
//设置LCD的自动扫描方向
//注意:其他函数可能会受到此函数设置的影响(尤其是9341这个奇葩),所以,
//一般设置为L2R_U2D即可,如果设置为其他扫描方式,可能导致显示不正常.
//0~7:代表8个方向(具体定义见lcd.h)
//9320/9325/9328/4531/4535/1505/b505/8989/5408/9341等IC已经实际测试
void LCD_Scan_Dir(u8 dir)
{
u16 regval=0;
u8 dirreg=0;
#if USE_HORIZONTAL//使用横屏
switch(dir)//方向转换
{
case 0:dir=6;break;
case 1:dir=7;break;
case 2:dir=4;break;
case 3:dir=5;break;
case 4:dir=1;break;
case 5:dir=0;break;
case 6:dir=3;break;
case 7:dir=2;break;
}
#endif
if(DeviceCode==0x9341)//9341,很特殊
{
switch(dir)
{
case L2R_U2D://从左到右,从上到下
regval|=(0<<7)|(0<<6)|(0<<5);
break;
case L2R_D2U://从左到右,从下到上
regval|=(1<<7)|(0<<6)|(0<<5);
break;
case R2L_U2D://从右到左,从上到下
regval|=(0<<7)|(1<<6)|(0<<5);
break;
case R2L_D2U://从右到左,从下到上
regval|=(1<<7)|(1<<6)|(0<<5);
break;
case U2D_L2R://从上到下,从左到右
regval|=(0<<7)|(0<<6)|(1<<5);
break;
case U2D_R2L://从上到下,从右到左
regval|=(0<<7)|(1<<6)|(1<<5);
break;
case D2U_L2R://从下到上,从左到右
regval|=(1<<7)|(0<<6)|(1<<5);
break;
case D2U_R2L://从下到上,从右到左
regval|=(1<<7)|(1<<6)|(1<<5);
break;
}
dirreg=0X36;
regval|=0X08;//BGR
LCD_WriteReg(dirreg,regval);
if(regval&0X20)
{
LCD_WR_REG(0x2A);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA(319>>8);LCD_WR_DATA(319&0XFF);
LCD_WR_REG(0x2B);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA(239>>8);LCD_WR_DATA(239&0XFF);
}else
{
LCD_WR_REG(0x2A);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA(239>>8);LCD_WR_DATA(239&0XFF);
LCD_WR_REG(0x2B);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA(319>>8);LCD_WR_DATA(319&0XFF);
}
}else
{
switch(dir)
{
case L2R_U2D://从左到右,从上到下
regval|=(1<<5)|(1<<4)|(0<<3);
break;
case L2R_D2U://从左到右,从下到上
regval|=(0<<5)|(1<<4)|(0<<3);
break;
case R2L_U2D://从右到左,从上到下
regval|=(1<<5)|(0<<4)|(0<<3);
break;
case R2L_D2U://从右到左,从下到上
regval|=(0<<5)|(0<<4)|(0<<3);
break;
case U2D_L2R://从上到下,从左到右
regval|=(1<<5)|(1<<4)|(1<<3);
break;
case U2D_R2L://从上到下,从右到左
regval|=(1<<5)|(0<<4)|(1<<3);
break;
case D2U_L2R://从下到上,从左到右
regval|=(0<<5)|(1<<4)|(1<<3);
break;
case D2U_R2L://从下到上,从右到左
regval|=(0<<5)|(0<<4)|(1<<3);
break;
}
if(DeviceCode==0x8989)//8989 IC
{
dirreg=0X11;
regval|=0X6040;//65K
}else//其他驱动IC
{
dirreg=0X03;
regval|=1<<12;
}
LCD_WriteReg(dirreg,regval);
}
}
//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试!
void LCD9320_Init(void)
{
RCC->APB2ENR|=1<<5;//先使能外设PORTD时钟
RCC->APB2ENR|=1<<6;//先使能外设PORTE时钟
//RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOD->CRH&=0X0000FFFF;
GPIOD->CRH|=0X33330000;
GPIOD->ODR=0XF000;
GPIOE->CRH=0X33333333;
GPIOE->CRL=0X33333333;
GPIOE->ODR=0XFFFF;
delay_ms(50); // delay 50 ms
LCD_WriteReg(0x0000,0x0001);
delay_ms(50); // delay 50 ms
DeviceCode = LCD_ReadReg(0x0000);
delay_ms(50);//可以适当调整延时,保障稳定显示
LCD_WriteReg(0x0000,0x0001); // delayms(5); //打开晶振
LCD_WriteReg(0x0003,0xA8A4); // delayms(5); //0xA8A4
LCD_WriteReg(0x000C,0x0000); // delayms(5);
LCD_WriteReg(0x000D,0x080C); // delayms(5);
LCD_WriteReg(0x000E,0x2B00); // delayms(5);
LCD_WriteReg(0x001E,0x00B0); // delayms(5);
LCD_WriteReg(0x0001,0x3B3F); // delayms(5); //驱动输出控制320*240 0x6B3F
LCD_WriteReg(0x0002,0x0600); // delayms(5);
LCD_WriteReg(0x0010,0x0000); // delayms(5);
LCD_WriteReg(0x0011,0x6070); // delayms(5); //定义数据格式 16位色 横屏 0x6058
LCD_WriteReg(0x0005,0x0000); // delayms(5);
LCD_WriteReg(0x0006,0x0000); // delayms(5);
LCD_WriteReg(0x0016,0xEF1C); // delayms(5);
LCD_WriteReg(0x0017,0x0003); // delayms(5);
LCD_WriteReg(0x0007,0x0233); // delayms(5); //0x0233
LCD_WriteReg(0x000B,0x0000); // delayms(5);
LCD_WriteReg(0x000F,0x0000); // delayms(5); //扫描开始地址
LCD_WriteReg(0x0041,0x0000); // delayms(5);
LCD_WriteReg(0x0042,0x0000); // delayms(5);
LCD_WriteReg(0x0048,0x0000); // delayms(5);
LCD_WriteReg(0x0049,0x013F); // delayms(5);
LCD_WriteReg(0x004A,0x0000); // delayms(5);
LCD_WriteReg(0x004B,0x0000); // delayms(5);
LCD_WriteReg(0x0044,0xEF00); // delayms(5);
LCD_WriteReg(0x0045,0x0000); // delayms(5);
LCD_WriteReg(0x0046,0x013F); // delayms(5);
LCD_WriteReg(0x0030,0x0707); // delayms(5);
LCD_WriteReg(0x0031,0x0204); // delayms(5);
LCD_WriteReg(0x0032,0x0204); // delayms(5);
LCD_WriteReg(0x0033,0x0502); // delayms(5);
LCD_WriteReg(0x0034,0x0507); // delayms(5);
LCD_WriteReg(0x0035,0x0204); // delayms(5);
LCD_WriteReg(0x0036,0x0204); // delayms(5);
LCD_WriteReg(0x0037,0x0502); // delayms(5);
LCD_WriteReg(0x003A,0x0302); // delayms(5);
LCD_WriteReg(0x003B,0x0302); // delayms(5);
LCD_WriteReg(0x0023,0x0000); // delayms(5);
LCD_WriteReg(0x0024,0x0000); // delayms(5);
LCD_WriteReg(0x0025,0x8000); // delayms(5);
LCD_WriteReg(0x004f,0); // 行首址0,y=0
LCD_WriteReg(0x004e,0); // 列首址0,x=0
}
//ILI93xx.h
#ifndef ILI93xx_H
#define ILI93xx_H
//#include "stm32f10x_lib.h"
#include "stm32f10x.h"
//写8位数据函数
#define LCD_WR_DATA(data){\
GPIO_SetBits(GPIOD,GPIO_Pin_14);\
GPIO_ResetBits(GPIOD,GPIO_Pin_12);\
GPIO_Write(GPIOE, data);\
GPIO_ResetBits(GPIOD,GPIO_Pin_13);\
GPIO_SetBits(GPIOD,GPIO_Pin_13);\
GPIO_SetBits(GPIOD,GPIO_Pin_12);\
}
void LCD_WR_REG(u16 data);
u16 LCD_RD_DATA(void);
void LCD_WriteReg(u8 LCD_Reg,u16 LCD_RegValue);
u16 LCD_ReadReg(u8 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);
u16 LCD_BGR2RGB(u16 c);
u16 LCD_ReadPoint(u16 x,u16 y);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
__inline void LCD_SetCursor(u16 Xpos, u16 Ypos);
void LCD_Scan_Dir(u8 dir);
void LCD9320_Init(void);
#endif
//ILI9320.h
#ifndef __LCD9320_H
#define __LCD9320_H
#include "stdlib.h"
#include "stm32f10x.h"
//定义LCD的尺寸
#define LCD9320_W 240
#define LCD9320_H 320
#define RGB565(R,G,B) ((R<<11)|(G<<5)|(B))
#define LCD_CS_SET GPIOD->BSRR=1<<12 //片选端口
#define LCD_RS_SETGPIOD->BSRR=1<<14 //数据/命令
#define LCD_WR_SETGPIOD->BSRR=1<<13 //写数据
#define LCD_RD_SETGPIOD->BSRR=1<<15 //读数据
#define LCD_CS_CLR GPIOD->BRR=1<<12 //片选端口
#define LCD_RS_CLRGPIOD->BRR=1<<14 //数据/命令
#define LCD_WR_CLRGPIOD->BRR=1<<13 //写数据
#define LCD_RD_CLRGPIOD->BRR=1<<15 //读数据
#define DATAOUT(x) GPIOE->ODR=x; //数据输出
#define DATAIN GPIOE->IDR; //数据输入
//扫描方向定义
#define L2R_U2D 0 //从左到右,从上到下
#define L2R_D2U 1 //从左到右,从下到上
#define R2L_U2D 2 //从右到左,从上到下
#define R2L_D2U 3 //从右到左,从下到上
#define U2D_L2R 4 //从上到下,从左到右
#define U2D_R2L 5 //从上到下,从右到左
#define D2U_L2R 6 //从下到上,从左到右
#define D2U_R2L 7 //从下到上,从右到左
#define DFT_SCAN_DIR L2R_U2D //默认的扫描方向
//9320/9325 LCD寄存器
#define R0 0x00
#define R1 0x01
#define R2 0x02
#define R3 0x03
#define R4 0x04
#define R5 0x05
#define R6 0x06
#define R7 0x07
#define R8 0x08
#define R9 0x09
#define R10 0x0A
#define R12 0x0C
#define R13 0x0D
#define R14 0x0E
#define R15 0x0F
#define R16 0x10
#define R17 0x11
#define R18 0x12
#define R19 0x13
#define R20 0x14
#define R21 0x15
#define R22 0x16
#define R23 0x17
#define R24 0x18
#define R25 0x19
#define R26 0x1A
#define R27 0x1B
#define R28 0x1C
#define R29 0x1D
#define R30 0x1E
#define R31 0x1F
#define R32 0x20
#define R33 0x21
#define R34 0x22
#define R36 0x24
#define R37 0x25
#define R40 0x28
#define R41 0x29
#define R43 0x2B
#define R45 0x2D
#define R48 0x30
#define R49 0x31
#define R50 0x32
#define R51 0x33
#define R52 0x34
#define R53 0x35
#define R54 0x36
#define R55 0x37
#define R56 0x38
#define R57 0x39
#define R59 0x3B
#define R60 0x3C
#define R61 0x3D
#define R62 0x3E
#define R63 0x3F
#define R64 0x40
#define R65 0x41
#define R66 0x42
#define R67 0x43
#define R68 0x44
#define R69 0x45
#define R70 0x46
#define R71 0x47
#define R72 0x48
#define R73 0x49
#define R74 0x4A
#define R75 0x4B
#define R76 0x4C
#define R77 0x4D
#define R78 0x4E
#define R79 0x4F
#define R80 0x50
#define R81 0x51
#define R82 0x52
#define R83 0x53
#define R96 0x60
#define R97 0x61
#define R106 0x6A
#define R118 0x76
#define R128 0x80
#define R129 0x81
#define R130 0x82
#define R131 0x83
#define R132 0x84
#define R133 0x85
#define R134 0x86
#define R135 0x87
#define R136 0x88
#define R137 0x89
#define R139 0x8B
#define R140 0x8C
#define R141 0x8D
#define R143 0x8F
#define R144 0x90
#define R145 0x91
#define R146 0x92
#define R147 0x93
#define R148 0x94
#define R149 0x95
#define R150 0x96
#define R151 0x97
#define R152 0x98
#define R153 0x99
#define R154 0x9A
#define R157 0x9D
#define R192 0xC0
#define R193 0xC1
#define R229 0xE5
#endif
//另外ucgui中的文件代码添加
//LCDConf.h
#define LCD_XSIZE (240) /* X-resolution of LCD, Logical coor. */ //(y,x) 反了
#define LCD_YSIZE (320) /* Y-resolution of LCD, Logical coor. */
//#define LCD_BITSPERPIXEL (16)
#define LCD_BITSPERPIXEL (16) //16位色
#define LCD_CONTROLLER (-1) //缺省驱动(即采用自己的驱动函数)
#define LCD_FIXEDPALETTE (565) //调色板565格式
#define LCD_SWAP_RB (1) //红蓝反色交换
#define LCD_INIT_CONTROLLER() LCD9320_Init()
#endif /* LCDCONF_H */
//GUIConf.h
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (0) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_MOUSE (1) /* Support a mouse */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8 //默认字体
#define GUI_ALLOC_SIZE (1024*5) /* Size of dynamic memory ... For WM and memory devices*/
/*********************************************************************
*
* Configuration of available packages
*/
#define GUI_WINSUPPORT 1 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */
#define GUI_SUPPORT_AA 0 /* Anti aliasing available */
#endif /* Avoid multiple inclusion */
//LCDDnmmy.c文件
//添加头文件
#include "LCD_Private.h" /* private modul definitions & config */
#include "GUI_Private.h"
#include "GUIDebug.h"
#include "ILI93xx.h" //画点函数和读点函数
#include "LCDConf.h" //液晶初始化函数#define LCD_INIT_CONTROLLER() LCD9320_Init()
添加三个函数
/*********************************************************************
*
* LCD_L0_Init
*
* Purpose:
* Initialises the LCD-controller.
*/
int LCD_L0_Init(void) {
LCD_INIT_CONTROLLER();
return 0;
}
/*********************************************************************
*
* LCD_L0_SetPixelIndex
*
* Purpose:
* Sets the index of the given pixel. The upper layers
* calling this routine make sure that the coordinates are in range, so
* that no check on the parameters needs to be performed.
*/
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) {
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
// LCD_DrawPoint(x,y);
LCD_WriteReg(0x004e,x); //设置x坐标位置
LCD_WriteReg(0x004f,y); //设置y坐标位置
LCD_WR_REG(0x22);
LCD_WR_DATA(PixelIndex);
}
/*********************************************************************
*
* LCD_L0_GetPixelIndex
*
* Purpose:
* Returns the index of the given pixel. The upper layers
* calling this routine make sure that the coordinates are in range, so
* that no check on the parameters needs to be performed.
*/
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
return LCD_ReadPoint(x,y);
}