• 移植Nokia5110屏驱动 | 我是如何将51代码转为STM32驱动代码的


    大家好,我是程序员小哈。

    – 简介

    问题由来

    网友问答

    NOKIA 5110 屏

    Nokia5110屏是一个非常经典的液晶显示模块,在小哈哥玩单片机的时候,可选的液晶模块并不多,一般来说就是LCD1602、LCD12864,这个Nokia5110屏在我当时来看,是相当高级的一个液晶屏了。

    Nokia/诺基亚5110 屏是用在5110、6150,6100 等系列移动电话上的液晶显示模块,国内厂家也生产有类似的兼容产品。该产品除应用于移动电话外,也可广泛应用于各类便携式设备的显示系统。单片机控制显示,人机交互界面显示,数据采集显示等电子设计场合。

    Nokia5110手机

    规格参数

    工作电压:DC3.3-5.0V
    屏幕颜色:单色
    分辨率:84*48,字符:6*8字符的话,可以显示6行字符,每行14个字符
    通信方式:串行SPI接口
    液晶模块:LPH7366
    运用场合:单片机检测信息显示,人机交互界面开发等电子设计
    外形尺寸:45x43x1.6mm

    管脚定义

    名称含义
    CLK串行时钟线
    DIN串行数据线
    DC数据/指令选择
    CE片选
    RST复位
    VCC电源输入(3.3V和5V均可)
    BL背光控制端
    GND地线

    模块原理图

    网上找的一个模块原理图

    实际硬件连接

    Nokia 5110端STM32端
    CLKPC3
    DINPC2
    DCPC1
    CEPC0
    RSTPC5
    VCC3.3V
    BL3.3V
    GNDGND

    模块尺寸

    程序移植

    小哈哥之前用51单片机驱动过这个液晶屏,实际使用只需要五个IO引脚即可驱动。

    我们今天就看看,如果网上找不到你所用芯片的例程,只有别的芯片的例程你怎么参考呢?下面咱们就来移植一下。

    拷贝驱动文件

    将液晶屏的驱动文件拷贝到STM32工程下的HARDWARE目录下,并在STM32的工程中添加文件。

    添加GPIO初始化函数

    void lcd_gpio_init(void)
    {
    	GPIO_InitTypeDef  GPIO_InitStructure;
     	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOC, &GPIO_InitStructure);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    修改GPIO操作的宏定义

    //51单片机
    //sbit LCD_RST=P0^0;
    //sbit LCD_CE=P0^1;
    //sbit LCD_DC=P0^2;
    //sbit LCD_DIN=P0^3;
    //sbit LCD_CLK=P0^4;
    
    //STM32单片机
    #define LCD_RST PCout(5)
    #define LCD_CE PCout(0)
    #define LCD_DC PCout(1)
    #define LCD_DIN PCout(2)
    #define LCD_CLK PCout(3)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    修改1us的延时

    #define Wait1us delay_us(1)
    
    • 1

    函数调用

    //Nokia5110初始化
    lcd_gpio_init();
    lcd_init();
    lcd_clear(); //清屏幕
    
    lcd_string(0,0,"Time:");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编译程序,没有错误,下载程序,发现屏幕中可以正常显示预设内容,证明驱动已经移植成功了。

    源码获取/素材获取

    公众号后台回复关键字:Nokia5110,获取测试Demo源码。

    结果展示

    视频展示

    总结

    这次测试用的杜邦线,杜邦线虽然方便,但是一碰,屏幕显示输出就没有了,只能重新插拔,复位单片机,很是无语。

    另外还要注意,有的时候,杜邦线接触不是很好,在测试程序的时候,首先要保证杜邦线的接触良好,大家不确认的话,可以使用万用表蜂鸣器档,测测每个引脚的两端是否导通。

    怎么样?还是挺简单的吧?本文有没有收获?可以文末留言交流一下哈,或者加小哈哥微信,我们群里聊。

    好了,今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见!~

    如果想了解小哈哥的知识星球,可以点击下面链接查看球友的福利,我们可以一起交流、一起玩耍。

    知识星球简介链接:
    https://mp.weixin.qq.com/s/hjhOedO9prE2tmLH4zO9vA?scene=25#wechat_redirect

  • 相关阅读:
    Springboot----项目整合微信支付(引入延迟队列实现订单过期取消以及商户主动查单)
    反射与枚举
    求二叉树中最大的二叉搜索子树的头节点
    zabbix中文乱码解决方法
    ES6、ES7、ES8、ES9、ES10、ES11
    详细讲解什么是观察者模式
    【LeetCode】【剑指offer】【二叉树的镜像】
    [Open JDK-11 源码解析系列]-3-JDK9到JDK11的新增的语法变化
    微信小程序实战,基于vue2实现瀑布流
    新概念英语(第二册)复习——Lesson 16 - Lesson20
  • 原文地址:https://blog.csdn.net/rsd102/article/details/121899535