完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
假期参加电赛崩了。。。 闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。 这次做的是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 看起来还凑合 , 注意使用的时候长度要有一定的富余 代码大概是这样的,我会上传, 写的比较匆忙 错误支持在做难免,希望您的不吝赐教! 代码下载地址 |
|
|
|
只有小组成员才能发言,加入小组>>
2549 浏览 0 评论
1148浏览 2评论
747浏览 1评论
500浏览 0评论
266浏览 0评论
429浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:12 , Processed in 1.706463 second(s), Total 99, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号