迁移51 的 LCD12864 到 Stm32F407 (正点原子探索者) 清翔51单片机 LCD12864带中文字库

假期参加电赛崩了。。。  闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。

这次做的是Stm32F407ZGT6 驱动LCD12864 的代码 测试的时候使用的是正点原子的探索者 STM32F4开发板、 LCD 插在 清翔的51单片机开发板上  注意 我是用的是 带有中文字库的版本       代码的下载地址在这里

这里注意  驱动LCD  需要给模块一个参考电压  也就是上图的VO  否则LCD 显示会出异常(颜色过深或者过浅) 我也是因为这个

所以才使用了成品开发板的电路

程序是从51单片机的程序上迁移过来的,咱们不做深究,只是注重一些迁移的细节。

以上是三个控制引脚的设置,其实还有几个是 PSB  需要设置,这个是一直拉高  我就没用IO了 就直接接到VCC了

在51中 IO的输入输出是由 C语言的读取和写入决定的, P0 = 0xff  是输出  data = P0是 读取

但是在STM32F407 中确不是这样的,STM32 有自己的输入数出模式, 不同的时刻需要对输入输出的寄存器进行配置。

我的实现过程大概是这样的:

输出和输入分别使用一个函数来实现,函数中有切换 IO输入输出模式的操作 也有 读取和写入的操作

实现了这两个函数以后剩下的代码几乎就可以全部迁移过去了,只要注意一下 函数名称就可以了

以上就实现了对LCD12864 的驱动, 我测试用的 LCD是带有中文字库的,显示汉字很方便,至于绘图, 描点、反白、显示数字等等的暂时还没有实现,看心情吧。如果有更新的话后期大家应该可以看得到。

更新的代码来了,  我编写了一些常用的显示代码,

大概是这样的  显示int(带符号)  double 还有hex 和bin 

int 显示的函数 请使用这个   后面的那个是有问题的

void LCD_12864_show_int(u8 x,u8 y,int num,u8 len)
{
    u32 temp=1;
    u8 i=0;
    u8 flag=1;
    LCD_12864_pos(x,y);
    if(num <0)
    {
        LCD_12864_write_data('-'); //显示符号
        num *=-1;
    }
    for(i=0;i<len-1;i++) // 最高位 除以len -1
        temp *=10;
    for(i=0;i<len;i++)
    {    
        if(flag &&(num/temp == 0))
        { //flag == 1 并且 num/temp == 0
          //证明这是我们不想要的开头部分的0
            LCD_12864_write_data(' ');// 填充空格
        } else
        {
            flag = 0;//  第一次进入就会置0  之后就不会进到上面的逻辑
            LCD_12864_write_data((num/temp)+'0');
            
            
        }
        num%=temp;
        temp/=10;
    }    
}

这是显示int 的实现方法(自己写的可能会有bug   我这边测试暂时没有发现问题)

这是显示string的方法,  可以直接显示汉字!

double 的显示比较长。。。。 而且这个代码存在一定的精度的误差 比如你要显示123456.654321  可能实现的不是这个数字!!!

其实 显示 double和 hex  bin 都是先合成一个string  然后在现实string   主要的难点就是合成string了

以上就是显示的过程了

这是显示的效果图  对应于 main中

显示bin的话  LCD的长度不是很够 看着就是比较难受

这是显示 字符串和 int

看起来还凑合  ,  注意使用的时候长度要有一定的富余

代码大概是这样的,我会上传, 写的比较匆忙 错误支持在做难免,希望您的不吝赐教!

代码下载地址

发布了35 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41534481/article/details/99691445