诺基亚(Nokia 5110)5110屏驱动(STM32)
一、前期准备
单片机: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)相关推荐
- stm32驱动rgb屏电路图_RGB屏驱动流程
RGB屏驱动 这里讲下大致的流程,不作具体详细代码示例. TFT LCD的屏幕驱动方式有很多种,以12864来说,一般是直接由SPI来操作屏的驱动IC,再来IC来负责驱动屏幕,还有一个驱动接口如808 ...
- [转]诺基亚Nokia 型号系列全面分析
诺基亚Nokia 型号系列全面分析 既然是对诺基亚的型号系列的分析,那么我们先从各大系列上来说,诺基亚根据型号字头的不同,分成九大系列: 1: 很难用一个具体的名称来说明,只能说是低端系列 2: 同上 ...
- 龙芯9341屏驱动开发过程(GUI、增加tty 裸奔版)
http://www.openloongson.org/forum.php?mod=viewthread&tid=141&extra= 为了让大家更好的学习这个屏的驱动,这两天对屏幕以 ...
- AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- linux spi屏驱动程序,65 linux spi设备驱动之spi LCD屏驱动
SPI的控制器驱动由平台设备与平台驱动来实现. 驱动后用spi_master对象来描述.在设备驱动中就可以通过函数spi_write, spi_read, spi_w8r16, spi_w8r8等函数 ...
- TFT_LCD液晶屏驱动设计与验证
TFT_LCD液晶屏驱动设计与验证 注:在本实验工程中,输出信号中包含 HV 同步模式下需要的行.场同步信号(hsync. vsync)和 DE 同步模式下的 tft_de 信号,各信号正确输出.读者 ...
- olcd12864的u8g2库_U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植问题
本帖最后由 XYX 于 2019-5-21 21:06 编辑 * 前提说明: U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植到stm32l4r5-st-nucleo板,使用的是 ...
- IMX6UL系列小屏驱动之像素时钟无法修改
文章目录 IMX6UL系列小屏驱动之像素时钟无法修改 默认最小时钟为8437500HZ 1.打补丁 2.更换父时钟 参考文档 IMX6UL系列小屏驱动之像素时钟无法修改 默认最小时钟为8437500H ...
- NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机
嵌入式开发中我们要时刻保持代码的高效与整洁看之前,先点赞 好习惯,要养成 一.前言 嵌入式开发中我们要时刻保持代码的高效与整洁.在第一节中"NB-IOT开发|nbiot开发教程<一&g ...
- 怎么点亮段码屏_段码LCD液晶屏驱动方法
TFT 液晶屏: http://www.hzjingxian.com 段码 LCD 液晶屏驱动方法 段码 LCD 液晶屏驱动方法 首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交 ...
最新文章
- HMM(隐马尔科夫)用于中文分词
- 有了阿里云服务器如何运行Javaweb项目【安转JDK】【安装mysql】【安装Tomcat】【永久运行】
- XR应用场景骤变,一场波及5亿人的新探索开始了
- jdk安装教程_使用JDK 8流在包装对象的集合和包装对象的集合之间转换
- ubuntu版php开发工具,Ubuntu 中搭建 LAMP 及 php 开发工具
- number类型的数组
- python中使用for循环,while循环,一条命令打印99乘法表
- Ubuntu 14.04数据库服务器--mysql的安装和配置
- 通达信板块监控指标_通达信洞察强势板块指标公式
- 常熟理工C语言试卷带答案,常熟理工学院 C语言 考试样卷.doc
- python如何运行程序_01
- 为啥连接mysql失败_为什么连接数据库后插入老是失败?
- 放之四海皆适用的设计原则(二)
- 计算机硬盘 安装,电脑新硬盘如何安装系统
- B2B电商平台--ChinaPay银联电子支付功能
- QQ微信支付宝三合一收款码原理及代码实现
- 高斯消元(求解n元一次方程组)
- Worldpress常规利用思路
- 计算机设备预计净残值,电子设备折旧年限及残值率
- 在ubuntu 上测试mjpeg-streamer
热门文章
- 回顾2016年存储市场发展 解析产品涨价为何如此逆天
- git撤销操作(git后悔药)
- 你最该学的职场必修课[职场规划个人笔记]
- 杜克研究生计算机专业,杜克研究生CS专业排名,谨记好好去看
- 盗版导致印度成为网络犯罪重灾区
- oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等
- SAP中公司与公司代码关系
- 乐信2020校园招聘数据笔试题[试题整理]
- DataTable使用详解
- date_format的使用:将“秒”转换为yyyy-mm-dd