找回密码
 立即注册
楼主: 浦江一水

初学51单片机的爱好者之入门佳配+擎天柱 (多项实验源码)

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-05-01 08:09:28

0

主题

31

回帖

101

积分

注册会员

积分
101
发表于 2025-3-23 21:44:00 | 显示全部楼层
楼主提供的ST7735驱动的128×160彩色显示屏,这个屏驱动没有数字显示函数.
小白不知如何添加.

点评

感谢你的浏览回复和提出问题。 ST7735彩屏显示数字是不需要再添加数字显示函数的。 任何需要显示的内容,进入显示屏,其实最终都是在控制点阵像素的显示。 把你要显示的数字,转换成字符串,调用字符串显示函数,  详情 回复 发表于 2025-3-24 09:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2025-3-24 09:13:53 | 显示全部楼层
蓝天*** 发表于 2025-3-23 21:44
楼主提供的ST7735驱动的128×160彩色显示屏,这个屏驱动没有数字显示函数.
小白不知如何添加. ...

感谢你的浏览回复和提出问题。

ST7735彩屏显示数字是不需要再添加数字显示函数的。
任何需要显示的内容,进入显示屏,其实最终都是在控制点阵像素的显示。
把你要显示的数字,转换成字符串,调用字符串显示函数, 定位显示即可。

比如:
//有一个数字常量,
PI=3.1415926;
//定义一个字符串变量,
char S[80];

如果希望用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()函数的用法。



不知能否理解?
欢迎提问,会再作解释。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-05-01 08:09:28

0

主题

31

回帖

101

积分

注册会员

积分
101
发表于 2025-3-24 18:17:19 | 显示全部楼层
浦江*** 发表于 2025-3-24 09:13
感谢你的浏览回复和提出问题。

ST7735彩屏显示数字是不需要再添加数字显示函数的。

明白了,知道怎么做了.谢谢楼主详细讲解.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-05-01 08:09:28

0

主题

31

回帖

101

积分

注册会员

积分
101
发表于 2025-3-24 22:42:05 | 显示全部楼层
IMG_20250324_222814.jpg IMG_20250324_222922(1).jpg 今天将楼主的7735lcd演示程序不做任何修改直接下载进stc32g128开发板,硬件接线也一样.
结果运行完全正常.看来ai8051u与32g128完全兼容.

点评

很棒! Ai8051U与32G12K128还是有许多不同的. 本实验所用的都是最基本通用的功能指令, 因此是兼容的. 从照片看, 稍有不同的是色彩号的定义了. 现在市面上7735屏,由于不同厂家的二次开发, 内核稍有不同,有少许差异  详情 回复 发表于 2025-3-25 09:10
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2025-3-25 09:10:23 | 显示全部楼层
蓝天*** 发表于 2025-3-24 22:42
今天将楼主的7735lcd演示程序不做任何修改直接下载进stc32g128开发板,硬件接线也一样.
结果运行完全正常.看 ...

很棒!  

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 根据需要:反色
取消前面的注释, 启用反色功能. 可以试一下...

最终的目的是要达到指定的颜色不失真.
这样就便于将来实战项目时, 正确地控制色彩显示.

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-05-01 08:09:28

0

主题

31

回帖

101

积分

注册会员

积分
101
发表于 2025-3-25 11:30:55 | 显示全部楼层
浦江*** 发表于 2025-3-25 09:10
很棒!  

Ai8051U与32G12K128还是有许多不同的.

原来如此! 那个24点阵大字,原显示不是亮红,将色号由12改为11,就显示亮红了.
感觉色号不对.
谢谢楼主,受益了.

点评

如果是 "将色号由12改为11,就显示亮红了", 那么,根据色号定义看: 0x07FF, //11亮青 0000 0111 1111 1111 0xF800, //12亮红 1111 1000 0000 0000 说明是反色了, 其它颜色也都是不符合原先定义的. 比较简单的  详情 回复 发表于 2025-3-25 12:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2025-3-25 12:53:54 | 显示全部楼层
蓝天*** 发表于 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点阵中西文混合显示字符串
这样显示效果就是: 亮红色字, 白色背景.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:84
  • 最近打卡:2025-05-01 08:09:28

0

主题

31

回帖

101

积分

注册会员

积分
101
发表于 2025-3-26 11:04:56 | 显示全部楼层
浦江*** 发表于 2025-3-25 12:53
如果是 "将色号由12改为11,就显示亮红了",
那么,根据色号定义看:
  0x07FF,   //11亮青 0000 0111 1111 1 ...

设定反色后,色号对应的颜色都正确了. IMG_20250326_102346.jpg
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 根据需要:反色




IMG_20250326_102303.jpg

点评

OK! 非常好, 完全准确。  详情 回复 发表于 2025-3-26 11:16
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2025-3-26 11:16:54 | 显示全部楼层
蓝天*** 发表于 2025-3-26 11:04
设定反色后,色号对应的颜色都正确了.
while(1)
  { for(i=0;i

OK! 非常好, 完全准确。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:350
  • 最近打卡:2025-05-01 00:32:14
已绑定手机

130

主题

1520

回帖

1855

积分

金牌会员

积分
1855
发表于 2025-3-27 00:31:57 | 显示全部楼层
擎天柱那个电位器是做 掉电检测的嘛?

点评

是的.  详情 回复 发表于 2025-3-27 08:51
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:41 , Processed in 0.296048 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表