STM32开发 --- 1.8寸显示屏ST7735_输出英文、汉字、图片

之前根据厂商代码,重写了一次输出函数,使输出更方便,但毕竟是摸拟SPI的,总感觉有点慢。

这次再次重写,重点:SPI通信 + 图像输出函数。


 

开发平台搭建

  • 开发板:   STM32F103RC   ( 魔女开发板、板载 FLASH已自带宋体4种字号大小的字库数据)
  • 屏幕:       1.8寸8针屏,ST7735驱动
  • 软件版本:KEIL_V5.27
  • 调试器:    开发板已内置

ST7735驱动重点理解

  • 初始化:    跟着厂商代码走,COPY+C,别折磨自己;
  • 代码重点:SPI通信函数、文字显示函数、图像显示函数;
  • 思维重点:先指令值,后数据;
  • 引脚重点:DC引脚,即RS,低电平:准备接收指令值(寄存器地址);高电平:准备接收数据值;

编程思路

其实字体、图像的输出,都是先使用SPI发送命令+数据,改变某个坐点的颜色值:

  1. 发送X坐标命0x2A,发送X坐标值 0x??;
  2. 发送Y坐标命令0x2B,发送Y坐标值 0x??;
  3. 发送填充颜色命令0x2C, 发送颜色值 0x????;

想明白上面的操作,整个代码都容易理解了。

/*****************************************************************
 * 函  数:setCursor
 * 功  能:设置显示区域,在此区域写点数据自动换行
 * 参  数:xStart横坐标起点, yStart纵坐标起点
 *         xEnd横坐标线束点,yEnd纵坐标线束点
 * 返回值:无
 *
 * 备  注: 魔女开发板团队编写   淘宝 https://demoboard.taobao.com
 * 分  享: 不断更新于Q群文件夹:262901124  最后修改_2020年09月01日
******************************************************************/
void setCursor(u16 xStart, u16 yStart, u16 xEnd, u16 yEnd)
{		
	sendOrder(0x2A);
	sendByte (0x00);   // 起始位置x高位,因为1.8寸屏是128*160, 不大于255, 直接写0省事
	sendByte (xStart); // 起始位置x低位,值传递时自动舍弃了高8位,也省得运算了
	sendByte (0x00);   // 起始位置y高位
	sendByte (xEnd);   // 起始位置x位位

	sendOrder(0x2B);
	sendByte (0x00);
	sendByte (yStart);
	sendByte (0x00);
	sendByte (yEnd);
	
	sendOrder(0x2c);  // 发送写数据命令
}

/*****************************************************************
 * 函  数:drawPoint
 * 功  能:画一个点
 * 参  数:x坐标,y坐标, 16位颜色值
 * 返回值:无
 * 
 * 备  注: 魔女开发板团队编写   淘宝 https://demoboard.taobao.com
 * 分  享: 不断更新于Q群文件夹:262901124  最后修改_2020年09月01日
******************************************************************/
void drawPoint(u16 x, u16 y, u16 color)
{
    setCursor(x, y, x, y);      //设置光标位置 
    sendShort(color);    
}

字体函数、图像输出函数就不多说了,直接参考工程代码吧。

代码最后更新:ST7735驱动_汉字、图像输出

没有积分的兄弟,可以在Q群文件夹下载:262901124


汉字输出重点

汉字的字模数据,有两种方式保存:

  1. 保存在font.h文件中,读取快,但占用资源,适合少量文字输出;
  2. 保存在外部FLASH中,读取慢,但容量大,适合随意文字的输出;

工程代码里,参考了野火、正点原子示例,完善了上述两种方式代码的实现。

而汉字的取模,必须通过取模软件,才能把字体转化成字库数据,具体的参数如下:


图像输出

图像的输出,比汉字输出简单很多。

编写输出函数时,先指定坐标,然后一个一个点地输出颜色值就可以了。

当然,这些输出的颜色值,都是已预先保存在文件或FLASH中的颜色值数据,按顺序排列的。

这些被预先保存的点位颜色值 ,可通过软件提取数据:打开图片后,设置比较通用的转换参数,而后转换输出成按像素点排列的颜色值。


  • 17
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值