當前位置:首頁 » 編程軟體 » tft屏固件反編譯

tft屏固件反編譯

發布時間: 2022-12-23 21:11:26

1. 求解TFT顯示漢子程序錯誤

ch16[] 前面的 code 是個什麼東西?在哪裡定義的?

2. C51中TFT彩屏無法顯示出漢字,但程序編譯沒問題

建議先寫一個單字元顯示函數,這樣調用起來更方便,移植也方便;
然後顯示字元串

參考函數如下:
typedef struct typFNT_GB16 /*12*16 漢字字模顯示數據結構 */
{
char Index[2];
char Msk[32];
}HZ;

//HZ code HzLib[] = { /* 宋體 9小五 顯示為12*16 */
struct typFNT_GB16 code HzLib[] = { /* 字大小為16*16 */
"深",0x40,0x00,0x27,0xFE,0x24,0x04,0x01,0x20,0x81,0x18,0x56,0x08,0x50,0x40,0x10,0x40,0x27,0xFC,0x20,0x40,0xC0,0xE0,0x41,0x58,0x46,0x4E,0x58,0x44,0x40,0x40,0x40,0x40,//深0

"圳",0x00,0x00,0x12,0x04,0x12,0x44,0x12,0x44,0xFE,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x12,0x44,0x3A,0x44,0xC4,0x44,0x04,0x44,0x08,0x04,0x10,0x04,0x00,0x00,//圳1

"睿",0x00,0x00,0x01,0xF0,0x01,0x00,0x7F,0xFC,0x40,0x04,0x3F,0xF8,0x12,0x90,0x24,0x48,0x1F,0xF0,0x70,0x1C,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x00,0x00,

"宇",0x00,0x00,0x02,0x00,0x01,0x00,0x7F,0xFC,0x40,0x04,0x00,0x00,0x1F,0xF0,0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x07,0x00,0x00,0x00, //宇3

"科",0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,//科4

"技",0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00,//技5

"電",0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x02,0x01,0x02,0x00,0xFE,0x00,0x00,//電6

"子",0x00,0x00,0x3F,0xF0,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,//子7

"有",0x01,0x00,0x01,0x00,0x7F,0xFE,0x02,0x00,0x04,0x00,0x0F,0xF0,0x18,0x10,0x28,0x10,0x4F,0xF0,0x88,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x90,0x08,0x70,0x08,0x20,//有8

"限",0x00,0x00,0xFB,0xF8,0x92,0x08,0x93,0xF8,0xA2,0x08,0xA2,0x08,0x93,0xF8,0x8A,0x80,0x8A,0x48,0xAA,0x50,0x92,0x20,0x82,0x20,0x82,0x10,0x82,0x8E,0x83,0x04,0x82,0x00,//限9

"公",0x00,0x00,0x04,0x40,0x06,0x40,0x04,0x40,0x08,0x20,0x08,0x10,0x10,0x18,0x22,0x0E,0x43,0x04,0x02,0x00,0x04,0x20,0x08,0x10,0x11,0xF8,0x3F,0x18,0x10,0x10,0x00,0x00,//公10

"司",0x00,0x00,0x3F,0xFC,0x00,0x04,0x00,0x04,0x7F,0xE4,0x00,0x04,0x00,0x04,0x3F,0xC4,0x20,0x44,0x20,0x44,0x3F,0xC4,0x20,0x44,0x20,0x04,0x00,0x14,0x00,0x08,0x00,0x00,//司11
};

/**************************************************************************************
* 名 稱: DrawSingleHz
* 功 能: 在指定的位置顯示漢字
* 參 數: 坐標:x
* 坐標:y
* 字元的顏色:LineColor
* 字元背景顏色:FillColor
**************************************************************************************/
void DrawSingleHz(U16 x, U16 y, U8 *pHz, U16 LineColor,U16 FillColor, U8 Mod)
{
U16 i=0,j=0,k=0;
U16 str,len;
//---------------------------查找該字是否已在字型檔中
len=sizeof(HzLib)/sizeof(HzLib[0]);
for(i=0;i<sizeof(HzLib)/sizeof(HzLib[0]);i++)
if((U8)HzLib[i].Index[0]==pHz[0]&&(U8)HzLib[i].Index[1]==pHz[1])break;
//--------------------------
if(i<len) //j<len,說明該字已經在漢字中出現
{

LCD_SetWindows(x, y, x+15, y+15);

for (j=0;j<16;j++)
{
str = (U8)HzLib[i].Msk[j*2]<<8|(U8)HzLib[i].Msk[j*2+1];

for (k=0;k<16;k++)
{
if ( str & (0x8000>>k) ) //通過移位逐位發送數據
{
LCD_WrDat((U16)(LineColor&0xffff));
}
else
{
if (Mod == NORMAL)
{
LCD_WrDat((U16)(FillColor&0xffff));
}
else
{
LCD_SetGramPoit(x+k+1,y+j); //跳過這一點,即保留該點原有的信息
}
}
}
}
}
}

/**************************************************************************************
* 名 稱: DrawString
* 功 能: 在指定的位置顯示多個字元
* 參 數: 坐標:x
* 坐標:y
* 字元的顏色:LineColor
* 字元背景顏色:FillColor
*
* 返 回 值: 無
*
**************************************************************************************/
void DrawString(U16 x, U16 y, U8 *pStr, U16 LineColor,U16 FillColor, U8 Mod)
{ //把字元串的第一個字元的地址賦給字元指針變數pstr,
//不是*pStr=" "詳見濉跺《C程序設計》-譚浩強P252

while(1)
{
if (*pStr == 0)
{
return;
}

if (*pStr > 0x80) //大於0x80的為漢字
{
DrawSingleHz(x, y, pStr, LineColor, FillColor, Mod); //調用顯示單個漢字函數處理
x += 16;
pStr += 2;
} //移動指針
else //英文字元
{
DrawSingleAscii(x, y, pStr, LineColor, FillColor, Mod); //調用顯示單個字元函數處理
x += 8;
pStr += 1; //移動指針
}
}
}

void main()
{
LCD_Init();
while(1)
{
Display_full_screen_color(BLACK);
DispSmallPic(0, 0,32,20,Picture);
DelayMs(1000) ;
DispSmallPic(100, 190,82,45,Picture);
DrawString(83,0,"深圳睿宇電子",RED,BLACK);
DelayMs(1000) ;
}

3. 最近在學實用TFT彩屏,顯示大圖片時由於數據很大,導致在KEIL中編譯是提示數組超出64K,該如何解決

1.你可以選擇將全屏的圖片縮小化,降低圖片佔用單片機存儲空間。
2.選擇單片機外擴FLASH
3.選擇武漢 谷鑫科技的串口液晶模塊,圖片存儲不佔用單片機的空間。

4. 現在用51單片機驅動TFT屏做一個產品,然後64Kb的內部ROM不夠用,請問有什麼方法,而且速度要快點的

64K的51,是STC的吧。要多大的ROM啊?好像一般的非串列ROM也就是512K,是做程序擴展?還是做數據擴展,程序擴展好像沒有什麼好辦法,數據擴展,可以用和RAM一樣的辦法,但不接WR線,即無法寫入,指接RD,地址線不夠,採用移位寄存器或者IO直接代替,把他分個頁面,每頁32K。C51好像也可以直接定址外部的RAM的。

STC51有內部的擴展ram,佔用了低端的4K地址,外接,擴展ROM,地址選高端的32K,在編譯器裡面好像可以選擇外部RAM的起始地址的。不知道你內部的256RAM夠使不?

29040這個晶元必須用別的編程器來寫數據,單片機直接寫的話,可能要動動腦筋。

其實SD卡,雖然串口速度慢一點,但容量大,用的IO少,還是挺劃算的。

否則就換晶元吧。換那種IO多一些的晶元,可以擴展ROM的晶元,但,好像一般的單片機都沒有很大的ROM的,最大也就64K左右。

如果容量要更大,用來做U盤的那些晶元dataflash應該也可以,那種速度比SD卡快,IO線也不多,容量也非常大。我沒研究過。

熱點內容
交易貓買腳本靠譜嗎 發布:2025-07-17 11:32:27 瀏覽:519
伺服器系統盤一般做什麼陣列 發布:2025-07-17 11:16:05 瀏覽:362
如何用c語音實現放射密碼 發布:2025-07-17 11:13:03 瀏覽:734
lol腳本2017 發布:2025-07-17 10:52:18 瀏覽:826
編譯條件有哪些 發布:2025-07-17 10:42:51 瀏覽:333
apache設置靜態內容緩存時間 發布:2025-07-17 10:32:32 瀏覽:294
蘋果6不能緩存的視頻 發布:2025-07-17 10:31:44 瀏覽:404
如何把文件夾共享 發布:2025-07-17 10:23:49 瀏覽:298
linux查看命令大全 發布:2025-07-17 10:21:24 瀏覽:976
安卓應用程序和蘋果手機哪個好 發布:2025-07-17 10:20:43 瀏覽:411