单片机交流
登录
直播中
张玉兰
7年用户
1383经验值
私信
关注
[问答]
请问如何迁移51的LCD12864到Stm32F407?
开启该帖子的消息推送
LCD12864
请问如何迁移51的LCD12864到
STM32
F407?
回帖
(1)
朱小玲
2021-10-26 11:24:37
假期参加电赛崩了。。。 闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。
这次做的是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
temp *=10;
for(i=0;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
看起来还凑合 , 注意使用的时候长度要有一定的富余
代码大概是这样的,我会上传, 写的比较匆忙 错误支持在做难免,希望您的不吝赐教!
代码下载地址
假期参加电赛崩了。。。 闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。
这次做的是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
temp *=10;
for(i=0;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
看起来还凑合 , 注意使用的时候长度要有一定的富余
代码大概是这样的,我会上传, 写的比较匆忙 错误支持在做难免,希望您的不吝赐教!
代码下载地址
举报
更多回帖
rotate(-90deg);
回复
相关问答
LCD12864
LCD12864
仿真
2016-05-04
5419
LCD12864
模块怎么编程?
2016-06-25
4184
STM32F407
与
LCD
接口
2014-07-03
5457
STM32
如何实现
LCD12864
显示?
2021-11-25
911
stm32
LCD12864
串口无显示
2018-04-03
6711
lcd12864
怎么用
2013-03-19
4640
STM32
如何实现
LCD12864
显示?
2022-02-16
2473
LCD12864
画点问题
2014-03-29
4266
stm32f407
网络应用
2016-09-10
4093
请问
stm32f407
外部中断如何实现按键中断?
2021-11-16
832
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分