现在我们的嵌入式课程设计要求做一个超声波测距的倒车雷达,总体不是很难,但是其中要求的NOKIA显示屏从来没有接触过,在CSDN上也很难找到免费的比较完整的资料,因此就想把这部分的学习过程记录下来,分享给大家。
一、NOKIA5110模块介绍
NOKIA5110模块貌似是以前旧的诺基亚手机的拆屏配件,NOKIA5110模块采用84x48 的点阵LCD,可以显示4 行汉字,30个字符。
引脚定义:
NOKIA5110模块一共有一排8个引脚,而且虽然都是NOKIA5110模块,但是他们的引脚顺序似乎也有区别,但是各引脚的定义却没什么区别
RST | 复位引脚 | GPIO(根据自己需求修改h的宏定义) |
CE(或者为SCE) | 片选 | GPIO |
D/C | 数据、指令选择 | GPIO |
DIN | 串行数据线 | GPIO |
CLK | 串行时钟线 | GPIO |
VCC | 电源输入 | 3.3V、5V |
BL(或者为LED) | 背光控制端 | 高电平背光打开 |
GND | 地线 | GND |
一共八个引脚,其中前五个引脚与单片机中的I/O口连接(软件模拟SPI通信),后三个连接对应的电路。
代码部分:
代码部分移植了CSDN大佬的成果,但是在显示的时候出现编译错误的问题,于是我将.c文件加了一个芯片的头文件解决了这个问题。
.c文件
#include "Nokia5110.h"
#include "english_6x8_pixel.h"
#include"delay.h"
#include "stm32f10x.h" // Device header
//中文字库自己添加,如果没有请注释起来#include "write_chinese_string_pixel.h"
//lcdgpio初始化函数
//GPIOC.0.9.10.11.12推挽输出,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_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
//初始化函数
void LCD_init(void)
{
//产生一个让lcd复位的低电平脉冲
LCD_RST = 0;
delay_us(1);
LCD_RST = 1;
//关闭lcd
LCD_CE = 0;
delay_us(1);
//使能lcd
LCD_CE = 1;
delay_us(1);
LCD_write_byte(0x21, 0);
LCD_write_byte(0xc8, 0);
LCD_write_byte(0x06, 0);
LCD_write_byte(0x13, 0);
LCD_write_byte(0x20, 0);
LCD_clear();
LCD_write_byte(0x0c, 0);
//关闭lcd
LCD_CE = 0;
}
//清屏函数
void LCD_clear(void)
{
unsigned int i;
LCD_write_byte(0x0c, 0);
LCD_write_byte(0x80, 0);
for (i=0; i<504; i++)
LCD_write_byte(0, 1);
}
//设置lcd坐标函数
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0); // colum