当前位置:首页 » 编程软件 » 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线也不多,容量也非常大。我没研究过。

热点内容
android对应ndk 发布:2025-07-18 00:53:46 浏览:215
sm4算法使用 发布:2025-07-18 00:53:42 浏览:815
oracle同步mysql数据库 发布:2025-07-18 00:42:27 浏览:191
go语言编译其他平台 发布:2025-07-18 00:42:23 浏览:280
二叉树非递归先序遍历算法 发布:2025-07-18 00:39:45 浏览:356
压缩热泵循环 发布:2025-07-18 00:38:04 浏览:888
安卓自动升级在哪里关掉 发布:2025-07-18 00:36:37 浏览:360
键盘按f9键不可以编译怎么调 发布:2025-07-18 00:11:34 浏览:312
安卓手机的广告如何删除 发布:2025-07-18 00:10:50 浏览:105
linux安装composer 发布:2025-07-18 00:04:52 浏览:241