?? text.c
字號:
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//寫1行中的中8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+8, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//寫1行中的右8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+16, y, CharColor);
}
}
pbuf++;
y++;
}
}
Rect RectText={0, 0, 240, 320};//文字顯示區域
//設置文字顯示區域
void SetRectText(u16 x, u16 y, u16 w, u16 h)
{
RectText.x=x;
RectText.y=y;
RectText.w=w;
RectText.h=h;
}
#define RECT_XMAX (RectText.x+RectText.w)
#define RECT_YMAX (RectText.y+RectText.h)
#define START_X RectText.x
#define START_Y RectText.y
/************************************************************
函數名:LCD寫字符串函數8*16ASCII,16*16漢字
功能:向指定位置寫入一個或多個字符,本函數帶自動換行功能
入口參數:x,橫向坐標,由左到右分別是0~240-1
y,縱向坐標,由上到下分別為0~320-1
CharColaor,字符的顏色
*p 指向要寫的字符串
返回值:無
增加顯示區域判斷,所以使用是應該先設置顯示區域
*************************************************************/
void LCD_WriteString16(uint16 x, uint16 y, uint16 CharColor, char* p)
{
u8 dat;
for(;*p!=0;p++)
{
if(( (u8)*p&0x80)==0)//英文
{
if(*p=='\r')//回車
{
x=START_X;
continue;
}
if(*p=='\n')//換行
{
y+=16;
if(y > RECT_YMAX-16)//超過行顯示
y=START_Y;
continue;
}
dat=*p-0x20;
if(x > RECT_XMAX-8)//不夠寫1個字符就移到下一行
{
x=START_X;
y+=16;
if(y > RECT_YMAX-16)
y=START_Y;
}
LCDWriteEN(x, y, CharColor, dat);
x+=8;
}
else//中文
{
if(x > RECT_XMAX-16)//不夠寫1個字符就移到下一行
{
x=START_X;
y+=16;
if(y > RECT_YMAX-16)
y=START_Y;
}
LCDWriteCN(x, y, CharColor, (u8*)p);
x+=16;
p++;
}
}
}
//下面的是沒有顯示區域判斷
//{
// u8 dat;
//
// for(;*p!=0;p++)
// {
// if((*p&0x80)==0)//英文
// {
// if(*p=='\r')//回車
// {
// x=0;
// continue;
// }
// if(*p=='\n')//換行
// {
// y+=16;
// if(y > YMAX-16)
// y=0;
// continue;
// }
//
// dat=*p-0x20;
//
// if(x > XMAX-8)//不夠寫1個字符就移到下一行
// {
// x=0;
//
// y+=16;
// if(y > YMAX-16)
// y=0;
// }
// LCDWriteEN(x, y, CharColor, dat);
// x+=8;
// }
// else//中文
// {
// if(x > XMAX-16)//不夠寫1個字符就移到下一行
// {
// x=0;
//
// y+=16;
// if(y > YMAX-16)
// y=0;
// }
// LCDWriteCN(x, y, CharColor, (u8*)p);
// x+=16;
// p++;
// }
//
// }
//}
void LCD_WriteString(uint16 x, uint16 y, uint16 CharColor, char* p, uint8 font)
{
if(font==16)
LCD_WriteString16(x, y, CharColor, p);
else //if(font==24)
LCD_WriteString24(x, y, CharColor, p);
}
/************************************************************
函數名:LCD寫字符串函數16*24ASCII,24*24漢字
功能:向指定位置寫入一個或多個字符,本函數帶自動換行功能
入口參數:x,橫向坐標,由左到右分別是0~240-1
y,縱向坐標,由上到下分別為0~320-1
CharColaor,字符的顏色
*p 指向要寫的字符串
返回值:無
*************************************************************/
void LCD_WriteString24(uint16 x, uint16 y, uint16 CharColor, char* p)
{
u8 dat;
for(; *p!=0; p++)
{
if(( (u8)*p&0x80)==0)//英文
{
if(*p=='\r')//回車
{
x=START_X;
continue;
}
else if(*p=='\n')//換行
{
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
continue;
}
else if(*p=='\1') //自定義圖標.上
dat='~'-' '+1;
else if(*p=='\2') //自定義圖標.下
dat='~'-' '+2;
else if(*p=='\3') //自定義圖標.左
dat='~'-' '+3;
else if(*p=='\4') //自定義圖標.右
dat='~'-' '+4;
// else if(*p=='\\') //自定義圖標
// {
// p++;
// if(*p=='U') //自定義圖標.上
// dat='~'-' '+1;
// else if(*p=='D') //自定義圖標.下
// dat='~'-' '+2;
// else if(*p=='L') //自定義圖標.左
// dat='~'-' '+3;
// else// if(*p=='R') //自定義圖標.右
// dat='~'-' '+4;
// }
else //其它正常字符
dat=*p-0x20;
if(x > RECT_XMAX-16)//不夠寫1個字符就移到下一行
{
x=START_X;
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
}
LCDWriteEN24(x, y, CharColor, dat);
x+=16;
}
else//中文
{
if(x > RECT_XMAX-24)//不夠寫1個字符就移到下一行
{
x=START_X;
y+=24;
if(y > RECT_YMAX-24)
y=START_Y;
}
LCDWriteCN24(x, y, CharColor, (u8*)p);
x+=24;
p++;
}
}
}
//下面的是沒有顯示區域判斷
//{
// u8 dat;
//
// for(;*p!=0;p++)
// {
// if((*p&0x80)==0)//英文
// {
// if(*p=='\r')//回車
// {
// x=0;
// continue;
// }
// if(*p=='\n')//換行
// {
// y+=24;
// if(y > YMAX-24)
// y=0;
// continue;
// }
//
// dat=*p-0x20;
//
// if(x > XMAX-16)//不夠寫1個字符就移到下一行
// {
// x=0;
//
// y+=24;
// if(y > YMAX-24)
// y=0;
// }
// LCDWriteEN24(x, y, CharColor, dat);
// x+=16;
// }
// else//中文
// {
// if(x > XMAX-24)//不夠寫1個字符就移到下一行
// {
// x=0;
//
// y+=24;
// if(y > YMAX-24)
// y=0;
// }
// LCDWriteCN24(x, y, CharColor, (u8*)p);
// x+=24;
// p++;
// }
// }
//}
/*********************************************************
函數名:SPI取ASCII碼子程序
輸入參數:u8 ASCII 輸入的ASCII碼,如'A'
BaseAddr 基址 即ASCII顯示代碼在FLASH中的啟示位置
返回值:無
說明:輸入一個ASCII碼,取得它在SPI FLASH中的16Byte顯示代碼
并將其存放到一個16byte的ASCII顯示緩沖CharBuffer[]中
**********************************************************/
//void GetASCIICode(u8* buf, u8 ASCII)
void GetASCIICode(u8* buf, u8 ASCII, u8 dot)
{uint32 address;
u8 len;
//address=0x3fe40+16UL*ASCII;
if(dot==16)
address=0x40000+16UL*ASCII, len=16;
else if(dot==24)
address=0xBB000+48UL*ASCII, len=48;
else
address=0, len=0;
Read_Flash_Page ( address, len, buf );
}
/*********************************************************
函數名:SPI中文顯示碼子程序
輸入參數:u16 ASCII 輸入的中文,如"我"
BaseAddr 基地 即顯示代碼在FLASH中的起始位置
返回值:無
說明:輸入一個中文,取得它在SPI FLASH中的32Byte顯示代碼
并將其存放到一個32byte的顯示緩沖ChineseBuffer[]
**********************************************************/
void GetChineseCode(u8* dot, u8 *p)
{//uchar m;
//uint8 dot[32];
uint32 address;
//address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
address=32UL*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) );
//address+=HZK_FlashAddress;
Read_Flash_Page ( address, 32, dot );
}
/*********************************************************
函數名:SPI中文顯示碼子程序
輸入參數:u16 ASCII 輸入的中文,如"我"
BaseAddr 基地 即顯示代碼在FLASH中的起始位置
返回值:無
說明:輸入一個中文,取得它在SPI FLASH中的32Byte顯示代碼
并將其存放到一個32byte的顯示緩沖ChineseBuffer[]
**********************************************************/
void GetChineseCode24(u8* dot, u8 *p)
{//uchar m;
//uint8 dot[32];
uint32 address;
//address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
address=72UL*( ((*p)-15-0xa1)*94 + ((*(p+1))-0xa1) );
address+=0x41000;
Read_Flash_Page ( address, 72, dot );
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -