风声雨生
发表于 2025-3-20 22:01:35
焊接技术不错
蓝天白云51
发表于 2025-3-23 21:44:00
楼主提供的ST7735驱动的128×160彩色显示屏,这个屏驱动没有数字显示函数.
小白不知如何添加.
浦江一水
发表于 2025-3-24 09:13:53
蓝天白云51 发表于 2025-3-23 21:44
楼主提供的ST7735驱动的128×160彩色显示屏,这个屏驱动没有数字显示函数.
小白不知如何添加. ...
感谢你的浏览回复和提出问题。
ST7735彩屏显示数字是不需要再添加数字显示函数的。
任何需要显示的内容,进入显示屏,其实最终都是在控制点阵像素的显示。
把你要显示的数字,转换成字符串,调用字符串显示函数, 定位显示即可。
比如:
//有一个数字常量,
PI=3.1415926;
//定义一个字符串变量,
char S;
如果希望用16点阵的字体,在坐标x=10,y=10的位置上,显示 “3.14”,
那么,代码这样写:
sprintf (S,"%4.2f",PI); //将数字转换为字符串, 2位小数,总长度4个字符
LCD_H16(10,10,S,15,0); //调用LCD_H16()函数, 黑底白字显示"3.14"
很简单的.
如果你想显示数字时, 加上一些西文的变量说明(并且改变小数保留位数)...
比如, 显示: "PI=3.14159"
那么, 代码这样写:
sprintf (S,"PI=%7.5f",PI); //将数字转换为字符串, 保留5位小数,总长度7个字符
LCD_H16(10,10,S,15,0); //调用LCD_H16()函数, 黑底白字显示"PI=3.14159"
也是很简单的.
如果你想显示数字时, 加上一些中文的说明(并且已经准备好了汉字小字库)...
比如, 显示: "圆周率 PI=3.14159"
那么, 代码这样写:
sprintf (S,"圆周率 PI=%7.5f",PI); //将数字转换为字符串, 保留5位小数,总长度7个字符
LCD_H16(10,10,S,15,0); //调用LCD_H16()函数, 黑底白字显示"圆周率 PI=3.14159"
这依然是很简单的...
因为LCD_H16()函数是具有中西文混合显示功能的。
LCD_A16()函数是西文字符串函数, 也可以用它来显示数字。
总之,是不需要再添加数字显示函数的。
注意和充分利用标准函数sprintf()函数的用法。
不知能否理解?
欢迎提问,会再作解释。
蓝天白云51
发表于 2025-3-24 18:17:19
浦江一水 发表于 2025-3-24 09:13
感谢你的浏览回复和提出问题。
ST7735彩屏显示数字是不需要再添加数字显示函数的。
明白了,知道怎么做了.谢谢楼主详细讲解.
蓝天白云51
发表于 2025-3-24 22:42:05
今天将楼主的7735lcd演示程序不做任何修改直接下载进stc32g128开发板,硬件接线也一样.
结果运行完全正常.看来ai8051u与32g128完全兼容.
浦江一水
发表于 2025-3-25 09:10:23
蓝天白云51 发表于 2025-3-24 22:42
今天将楼主的7735lcd演示程序不做任何修改直接下载进stc32g128开发板,硬件接线也一样.
结果运行完全正常.看 ...
很棒!{:qiang:}
Ai8051U与32G12K128还是有许多不同的.
本实验所用的都是最基本通用的功能指令, 因此是兼容的.
从照片看, 稍有不同的是色彩号的定义了.
现在市面上7735屏,由于不同厂家的二次开发, 内核稍有不同,有少许差异.
可在尝试在LCD_Init()中的:
LCD_WR_CMD(0x36); LCD_WR_DAT(0x60);
改变为:
LCD_WR_CMD(0x36); LCD_WR_DAT(0x68);
这是改变色彩格式RGB还是BGR的选择项. 可以试一下...
另外还可注意一下这一语句:
//LCD_WR_CMD(0x21); //Display Inversion 根据需要:反色
取消前面的注释, 启用反色功能. 可以试一下...
最终的目的是要达到指定的颜色不失真.
这样就便于将来实战项目时, 正确地控制色彩显示.
蓝天白云51
发表于 2025-3-25 11:30:55
浦江一水 发表于 2025-3-25 09:10
很棒!
Ai8051U与32G12K128还是有许多不同的.
原来如此! 那个24点阵大字,原显示不是亮红,将色号由12改为11,就显示亮红了.
感觉色号不对.
谢谢楼主,受益了.
浦江一水
发表于 2025-3-25 12:53:54
蓝天白云51 发表于 2025-3-25 11:30
原来如此! 那个24点阵大字,原显示不是亮红,将色号由12改为11,就显示亮红了.
感觉色号不对.
谢谢楼主,受 ...
如果是 "将色号由12改为11,就显示亮红了",
那么,根据色号定义看:
0x07FF, //11亮青 0000 0111 1111 1111
0xF800, //12亮红 1111 1000 0000 0000
说明是反色了, 其它颜色也都是不符合原先定义的.
比较简单的办法是: 只要将LCD_Init()函数中的反色控制语句用上即可.
就是将:
//LCD_WR_CMD(0x21); //Display Inversion 根据需要:反色
改成:(取消前面的注视符"//")
LCD_WR_CMD(0x21); //Display Inversion 根据需要:反色
就可以了. 可试试看...
补充说明:
本实验程序中的颜色号从0号到15号的16色,是根据UCDOS汉字系统的定义而定义的.
0x0000, //0黑色00000 000000 00000
0x1048, //1蓝色00010 000010 01000
0x1442, //2绿色00010 100010 00010
0x1452, //3青色00010 100010 10010
0x9042, //4红色10010 000010 00010
0x9052, //5紫色10010 000010 10010
0xA484, //6橙色10100 100100 00100
0x8410, //7灰色10000 100000 10000
0xC618, //8亮灰11000 110000 11000
0x001F, //9亮蓝00000 000000 11111
0x07E0, //10亮绿 0000 0111 1110 0000
0x07FF, //11亮青 0000 0111 1111 1111
0xF800, //12亮红 1111 1000 0000 0000
0xF81F, //13亮紫 1111 1000 0001 1111
0xFFE0, //14黄色 1111 1111 1110 0000
0xFFFF, //15白色 1111 1111 1111 1111
原main.c 程序代码中的
LCD_H24(20,4,"**单片机**",12,1); //24点阵中西文混合显示字符串
控制色彩是: 亮红色字, 暗蓝色背景
根据照片所示看: 推测是改成了:
LCD_H24(20,4,"**单片机**",11,0); //24点阵中西文混合显示字符串
这样显示效果就是: 亮红色字, 白色背景.
蓝天白云51
发表于 2025-3-26 11:04:56
浦江一水 发表于 2025-3-25 12:53
如果是 "将色号由12改为11,就显示亮红了",
那么,根据色号定义看:
0x07FF, //11亮青 0000 0111 1111 1 ...
设定反色后,色号对应的颜色都正确了.
while(1)
{ for(i=0;i<16;i++)LCD_CLS(i); //16色清屏测试
LCD_CLS(1); //蓝色清屏
Delayms(2000);
LCD_H24(20,4,"**单片机**",12,1); //24点阵中西文混合显示字符串
LCD_A24(38,30,"Ai8051U",15,1,7); //显示12*24字符串
LCD_H16(28,60,"Ai8051U单片机",6,1);//16点阵中西文混合显示字符串
LCD_A08(47,80,"A08_Ai8051U",15,1,11); //显示6*8字符串
LCD_A12(36,99,"A12_Ai8051U",10,1,11); //显示8*12字符串
Delayms(2000);
设定反色,其他不变.
LCD_WR_CMD(0x21); //Display Inversion 根据需要:反色
浦江一水
发表于 2025-3-26 11:16:54
蓝天白云51 发表于 2025-3-26 11:04
设定反色后,色号对应的颜色都正确了.
while(1)
{ for(i=0;i
OK! 非常好, 完全准确。{:qiang:}{:qiang:}{:qiang:}