matlab如何将横轴上的汉字旋转90度,第72节:在液晶屏中把字体顺时针旋转90度显示的算法程序...

本文介绍如何在液晶屏上实现16x16汉字和8x16字符顺时针旋转90度显示。通过字模转换算法,解决了因液晶屏物理位置逆时针旋转90度导致的显示问题。详细步骤和源代码提供了清晰的解释。
摘要由CSDN通过智能技术生成

从业近十年!手把手教你单片机程序框架 第72讲

开场白:

我曾经遇到过这样的项目,客户由于外壳结果的原因,故意把液晶屏物理位置逆时针旋转了90度,在这种情况下,如果按之前的显示驱动就会发现字体也跟着倒了过来,影响了阅读。当时我的解决办法就是把字体的字库数组通过算法顺时针旋转90度就达到了目的。这一节把这个算法教给大家。

这个算法的本质是:请看以下附图1,附图2,附图3.

第一步:旋转90度的本质,就是把原来横向取模改成纵向去模。先把代表每一行16个点阵数的2个char型数据合并成1个int型数据。

第二步:再把每一列的16个点阵按2个字节分别取到一个数组里,就是纵向取模的过程了。

具体内容,请看源代码讲解。

46926f031ebcaaee11e8a5fcd8690231.png

c7193e0d66dda8210eb0dc983f7f8f20.png

142b9c1d1bf491ae8a248358f259a686.png

(1)硬件平台:

基于朱兆祺51单片机学习板。

(2)实现功能:把液晶屏物理位置逆时针旋转了90度,开机上电后,可以看到液晶屏像对联的显示顺序一样,从上往下分别显示“馒头V5”四个字。

(3)源代码讲解如下:

#include "REG52.H"

sbit LCDCS_dr = P1^6; //片选线

sbit LCDSID_dr = P1^7; //串行数据线

sbit LCDCLK_dr = P3^2; //串行时钟线

sbit LCDRST_dr = P3^4; //复位线

void SendByteToLcd(unsigned char ucData); //发送一个字节数据到液晶模块

void SPIWrite(unsigned char ucWData, unsigned char ucWRS); //模拟SPI发送一个字节的命令或者数据给液晶模块的底层驱动

void WriteCommand(unsigned char ucCommand); //发送一个字节的命令给液晶模块

void LCDWriteData(unsigned char ucData); //发送一个字节的数据给液晶模块

void LCDInit(void); //初始化 函数内部包括液晶模块的复位

void display_lattice(unsigned int x,unsigned int y,const unsigned char *ucArray,unsigned char ucFbFlag,unsigned int x_amount,unsigned int y_amount); //显示任意点阵函数

void display_clear(void); // 清屏

void hz1616_s90(const unsigned char *p_ucHz,unsigned char *p_ucResult); //把16x16汉字字模顺时针旋转90度的转换函数

void hz816_s90(const unsigned char *p_ucHz,unsigned char *p_ucResult); //把8x16字符字模顺时针旋转90度的转换函数

void delay_short(unsigned int uiDelayshort); //延时

code unsigned char Hz1616_man[]= /*馒 横向取模 16X16点阵 */

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值