一、前期准备
单片机:STM32F103ZET6
开发环境:MDK5.14
库函数:标准库V3.5
Nokia 5110模块:淘宝有售

二、实验效果

三、驱动原理
看5110的数据文档,根据文档要求写。需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。

四、驱动代码
5110.h

#ifndef __NOKIA_5110_H__
#define __NOKIA_5110_H__
#include "stm32f10x.h"
#include "gpio.h"
#include "delay.h"
#include "nokiafont.h"#define     Nokia_CLK       PEout(0)
#define     Nokia_DIN       PEout(1)
#define     Nokia_DC        PEout(2)
#define     Nokia_CE        PEout(3)
#define     Nokia_RST       PEout(4)extern void Nokia5110Configuration(void);
extern void Nokia_Clear(void);
extern void Nokia_Write_Chinese_String(uint8_t X, uint8_t Y, uint8_t ch_with, uint8_t num, uint8_t line, uint8_t row);
extern void Nokia_Write_English_String(uint8_t X, uint8_t Y, char *s);
#endif

5110.c

#include "nokia5110.h"void Nokia_Write_Byte(uint8_t dat, uint8_t cmd)
{uint8_t i;             Nokia_CE = 0;          // 使能LCDif (cmd == 0){Nokia_DC = 0;      // 传送命令}else{   Nokia_DC = 1;      // 传送数据}for(i = 0; i < 8; i ++){if(dat & 0x80){Nokia_DIN = 1;}else{Nokia_DIN = 0;}Nokia_CLK = 0;dat = dat << 1;Nokia_CLK = 1;}Nokia_CE = 1;
}void Nokia_Clear(void)
{uint16_t i;Nokia_Write_Byte(0x0c, 0);          Nokia_Write_Byte(0x80, 0);          for (i = 0; i < 504; i ++){Nokia_Write_Byte(0, 1);}
}void Nokia_Set_Position(uint8_t X, uint8_t Y)
{Nokia_Write_Byte(0x40 | Y, 0);     // columnNokia_Write_Byte(0x80 | X, 0);      // row
}void Nokia_Write_Char(uint8_t c)
{uint8_t line;c -= 32;for (line = 0; line < 6; line ++){Nokia_Write_Byte(font6x8[c][line], 1);}
}void Nokia_Write_English_String(uint8_t X, uint8_t Y, char *s)
{Nokia_Set_Position(X, Y);while (*s) {Nokia_Write_Char(*s);s ++;}
}
/*-----------------------------------------------------------------------
Nokia_Write_Chinese_String: 在LCD上显示汉字输入参数:X、Y    :显示汉字的起始X、Y坐标;ch_with :汉字点阵的宽度num     :显示汉字的个数;  line    :汉字点阵数组中的起始行数row     :汉字显示的行间距
-----------------------------------------------------------------------*/
void Nokia_Write_Chinese_String(uint8_t X, uint8_t Y, uint8_t ch_with, uint8_t num, uint8_t line, uint8_t row)
{uint8_t i, n;Nokia_Set_Position(X, Y);                             //设置初始位置for (i = 0; i < num;){for (n = 0; n < ch_with * 2; n ++)              //写一个汉字{ if (n == ch_with)                      //写汉字的下半部分{if (i == 0) {Nokia_Set_Position(X, Y + 1);}else{Nokia_Set_Position((X + (ch_with + row) * i), Y + 1);}}Nokia_Write_Byte(write_chinese[line + i][n], 1);}i ++;Nokia_Set_Position((X + (ch_with + row) * i), Y);}
}/*-----------------------------------------------------------------------
Nokia_Draw_Bmp_Pixel      : 位图绘制函数输入参数:X、Y    :位图绘制的起始X、Y坐标;*map    :位图点阵数据;Pix_x   :位图像素(长)Pix_y   :位图像素(宽)-----------------------------------------------------------------------*/
void Nokia_Draw_Bmp_Pixel(uint8_t X,uint8_t Y,uint8_t *map,uint8_t Pix_x, uint8_t Pix_y)
{uint16_t i, n;uint8_t row;if (Pix_y % 8 == 0) {row = Pix_y / 8;      //计算位图所占行数}else{row = Pix_y / 8 + 1;}for (n = 0; n < row; n ++){Nokia_Set_Position(X, Y);for(i = 0; i < Pix_x; i ++){Nokia_Write_Byte(map[i + n * Pix_x], 1);}Y ++;                         //换行}
}void Nokia5110Configuration(void)
{GPIO_InitTypeDef    GPIO;//Enable APB2 BusRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//Register IO GPIO.GPIO_Pin   = 0x1F;GPIO.GPIO_Speed = GPIO_Speed_50MHz;GPIO.GPIO_Mode  = GPIO_Mode_Out_PP;GPIO_Init(GPIOE, &GPIO);Nokia_RST = 0;DelayUs(1);Nokia_RST = 1;Nokia_CE = 0;                   // 关闭LCDDelayUs(1);Nokia_CE = 1;                   // 使能LCDDelayUs(1);Nokia_Write_Byte(0x21, 0);   // 使用扩展命令设置LCD模式Nokia_Write_Byte(0xc8, 0);  // 设置偏置电压Nokia_Write_Byte(0x06, 0); // 温度校正Nokia_Write_Byte(0x13, 0);   // 1:48Nokia_Write_Byte(0x20, 0);   // 使用基本命令Nokia_Clear();             // 清屏Nokia_Write_Byte(0x0c, 0); // 设定显示模式,正常显示Nokia_CE = 0;                 // 关闭LCD
}

由于作者能力有限,有不妥之处欢迎指正,邮箱alex_hua@foxmail.com

诺基亚(Nokia 5110)5110屏驱动(STM32)相关推荐

  1. stm32驱动rgb屏电路图_RGB屏驱动流程

    RGB屏驱动 这里讲下大致的流程,不作具体详细代码示例. TFT LCD的屏幕驱动方式有很多种,以12864来说,一般是直接由SPI来操作屏的驱动IC,再来IC来负责驱动屏幕,还有一个驱动接口如808 ...

  2. [转]诺基亚Nokia 型号系列全面分析

    诺基亚Nokia 型号系列全面分析 既然是对诺基亚的型号系列的分析,那么我们先从各大系列上来说,诺基亚根据型号字头的不同,分成九大系列: 1: 很难用一个具体的名称来说明,只能说是低端系列 2: 同上 ...

  3. 龙芯9341屏驱动开发过程(GUI、增加tty 裸奔版)

    http://www.openloongson.org/forum.php?mod=viewthread&tid=141&extra= 为了让大家更好的学习这个屏的驱动,这两天对屏幕以 ...

  4. AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  5. linux spi屏驱动程序,65 linux spi设备驱动之spi LCD屏驱动

    SPI的控制器驱动由平台设备与平台驱动来实现. 驱动后用spi_master对象来描述.在设备驱动中就可以通过函数spi_write, spi_read, spi_w8r16, spi_w8r8等函数 ...

  6. TFT_LCD液晶屏驱动设计与验证

    TFT_LCD液晶屏驱动设计与验证 注:在本实验工程中,输出信号中包含 HV 同步模式下需要的行.场同步信号(hsync. vsync)和 DE 同步模式下的 tft_de 信号,各信号正确输出.读者 ...

  7. olcd12864的u8g2库_U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植问题

    本帖最后由 XYX 于 2019-5-21 21:06 编辑 * 前提说明: U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植到stm32l4r5-st-nucleo板,使用的是 ...

  8. IMX6UL系列小屏驱动之像素时钟无法修改

    文章目录 IMX6UL系列小屏驱动之像素时钟无法修改 默认最小时钟为8437500HZ 1.打补丁 2.更换父时钟 参考文档 IMX6UL系列小屏驱动之像素时钟无法修改 默认最小时钟为8437500H ...

  9. NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机

    嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞 好习惯,要养成 一.前言 嵌入式开发中我们要时刻保持代码的高效与整洁.在第一节中"NB-IOT开发|nbiot开发教程<一&g ...

  10. 怎么点亮段码屏_段码LCD液晶屏驱动方法

    TFT 液晶屏: http://www.hzjingxian.com 段码 LCD 液晶屏驱动方法 段码 LCD 液晶屏驱动方法 首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交 ...

最新文章

  1. HMM(隐马尔科夫)用于中文分词
  2. 有了阿里云服务器如何运行Javaweb项目【安转JDK】【安装mysql】【安装Tomcat】【永久运行】
  3. XR应用场景骤变,一场波及5亿人的新探索开始了
  4. jdk安装教程_使用JDK 8流在包装对象的集合和包装对象的集合之间转换
  5. ubuntu版php开发工具,Ubuntu 中搭建 LAMP 及 php 开发工具
  6. number类型的数组
  7. python中使用for循环,while循环,一条命令打印99乘法表
  8. Ubuntu 14.04数据库服务器--mysql的安装和配置
  9. 通达信板块监控指标_通达信洞察强势板块指标公式
  10. 常熟理工C语言试卷带答案,常熟理工学院 C语言 考试样卷.doc
  11. python如何运行程序_01
  12. 为啥连接mysql失败_为什么连接数据库后插入老是失败?
  13. 放之四海皆适用的设计原则(二)
  14. 计算机硬盘 安装,电脑新硬盘如何安装系统
  15. B2B电商平台--ChinaPay银联电子支付功能
  16. QQ微信支付宝三合一收款码原理及代码实现
  17. 高斯消元(求解n元一次方程组)
  18. Worldpress常规利用思路
  19. 计算机设备预计净残值,电子设备折旧年限及残值率
  20. 在ubuntu 上测试mjpeg-streamer

热门文章

  1. 回顾2016年存储市场发展 解析产品涨价为何如此逆天
  2. git撤销操作(git后悔药)
  3. 你最该学的职场必修课[职场规划个人笔记]
  4. 杜克研究生计算机专业,杜克研究生CS专业排名,谨记好好去看
  5. 盗版导致印度成为网络犯罪重灾区
  6. oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等
  7. SAP中公司与公司代码关系
  8. 乐信2020校园招聘数据笔试题[试题整理]
  9. DataTable使用详解
  10. date_format的使用:将“秒”转换为yyyy-mm-dd