历史上的今天
今天是:2025年04月11日(星期五)
2020年04月11日 | 迁移51 的 LCD12864 到 Stm32F407
2020-04-11 来源:eefocus

假期参加电赛崩了。。。闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。
这次做的是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 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 看起来还凑合,注意使用的时候长度要有一定的富余











史海拾趣
|
基于National Instruments(美国国家仪器公司,简称NI)CVS-1454、Sony IEEE 1394 数码相机以及开发于NI LabVIEW Real-Time 和NI Vision Development Module 平台的灵活的模块化软件,构建一个坚固的、可靠的、低成本的车间作业检验解决方案。… 查看全部问答> |
|
我用的是Platform builder 5.0,新建一个CE 的OS,然后,新建一个驱动的DLL Project,但是编译的出现如下的错误: BUILD: [01:0000000045:ERRORE] CAN.CPP(1,2): error CS1024: Preprocessor directive expected BUILD: [01:0000000046:ERRORE] CA ...… 查看全部问答> |
|
大家好,我的FPGA是SP601,petalinux是0.4版本,我在petalinux上写了一个简易的web服务器,在移植了petalinux的FPGA的板子上可以运行,但是我通过IE浏览器不能访问web网页,我想问一下,petalinux-0.4是否支持web访问?到底问题出在哪里?… 查看全部问答> |
|
一、 PCB厂制作流程因素: 1、 铜箔蚀刻过度,市场上使用的电解铜箔一般为单面镀锌(俗称灰化箔)及单面镀铜(俗称红化箔),常见的甩铜一般为70um以上的镀锌铜箔,红化箔及18um以下灰化箔基本都未出现过批量性的甩铜。客户线路设计好过蚀刻线的 ...… 查看全部问答> |




