STM32F407学习之GPIO驱动NOKIA LCD5110

1、nokia5110显示器介绍

这款液晶显示屏是通过PCD8554驱动控制器来驱动的,主要的特征如下:
单芯片 LCD 控制/驱动
48 行,84 列输出
显示数据 RAM 48*84 位
芯片集成:
——LCD电压发生器(也可以使用外部电压供应)
——LCD偏置电压发生器
——振荡器不需要外接元件(也可以使用外部时钟)
外部 RES(复位)输入引脚
串行界面最高4.0Mbits/S
CMOS兼容输入
混合速率:48
逻辑电压范围VDD到 VSS:2.7V~3.3V
显示电压范围VLCD到 VSS:
——6.0~8.5V LCD内部电压发生器(充许电压发生器)
——6.0~9.0V LCD外部电压供应(电压发生器关闭)
低功耗,适用于电池供电系统
关于VLCD的温度补偿
使用温度范围:-25~70℃

 PCD8544 是一块低功耗的CMOS LCD控制驱动器,设计为驱动48 行84 列的图形显示。所有必须的显示功能集成在一块芯片上,包括LCD 电压及偏置电压发生器,只须很少外部元件且功耗小。 PCD8544 与微控制器的接口使用串行总线。PCD8544 采用 CMOS工艺。

方框图:

STM32F407学习之GPIO驱动NOKIA LCD5110_第1张图片

引脚图:

STM32F407学习之GPIO驱动NOKIA LCD5110_第2张图片

2、STM32控制LCD_5110连接图

GPIOB5<======================>SCE

GPIOB6<======================>RES

GPIOB7<======================>DC

GPIOB8<======================>SDIN

GPIOB9<======================>SCLK

3、程序

main.c
/*芯片:STM32F407*/
#include "stm32f4xx.h"
#include "lcd5110.h"
#include "delay.h"

int main(void)
{
		GPIO_Configuration();
		LCD_init();           
		LCD_clear();
		LCD_write_chinese(10,0,0);
		LCD_write_chinese(22,0,1);
		LCD_write_chinese(34,0,2);
		LCD_write_chinese(46,0,3);
		LCD_write_chinese(58,0,4);
		LCD_write_chinese(70,0,5);
//		LCD_write_Picture(tu);//display full screen picture.
return 0;  
}



lcd5110.c
/*
file:lcd 5110 driver
author:Allen
和大家分享,共同学习,一起进步。
Share more,learn better.
some code is referenced from network.
*/
#include "lcd5110.h"
#include "delay.h"
unsigned char tu[]=
{
0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0x60,0x60,0x60,0x20,0x30,0x20,0x20,0x20,0x62,
0x62,0x72,0xCC,0xF7,0xF2,0x23,0x02,0xC4,0x78,0x0C,0xE6,0xF2,0xE3,0x02,0x02,0x02,
0x07,0x0C,0x3C,0xC2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF0,0xFC,0x0E,0x03,0x01,0x00,0x80,0x60,0x10,0x40,0x14,0x00,
0x00,0x00,0x00,0x00,0x20,0x38,0x18,0x58,0x19,0x59,0x23,0x03,0x07,0x0C,0x08,0x10,
0x30,0x30,0x30,0x90,0x38,0x5C,0x3F,0xF1,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0x3C,0x70,0xE0,0xC0,0xC2,0x8D,
0xA2,0x08,0x21,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0xC0,0xE0,0x20,0x00,0x00,0x00,0x02,0x51,0x04,0xAB,0xFF,0xFE,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0A,0x3F,0xF3,0xD7,0xAF,0x5B,0x33,0xE3,0x42,0xDF,0xE6,0x86,0x82,0x82,0x82,
0xC3,0x7E,0x43,0x63,0x21,0x31,0x18,0x06,0x81,0x00,0x00,0xA0,0x80,0xC8,0xE1,0xF4,
0x7A,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0E,0x0D,0x1C,0x1D,
0x3A,0x39,0xFA,0xF8,0x7A,0xB8,0x1A,0xB8,0x1C,0xAD,0x1C,0xBE,0x1E,0xBE,0x3F,0xF3,
0xE3,0xC1,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  
};   
unsigned char tu1[]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xF8,0xF0,0xE0,0xC0,
0x80,0x80,0x80,0x80,0xC0,0xE0,0xFE,0xFF,0xFE,0xF0,0xC0,0x80,0x80,0x80,0x80,0xC0,
0xE0,0xF0,0xF8,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x30,0x70,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xFF,0x7F,0x3F,0x1F,
0x0F,0x07,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x0F,
0x1F,0x1F,0x7F,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x78,0x38,0x18,0x08,0x00,0x00,
0x00,0x00,0x80,0x80,0xC0,0xC0,0xE3,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,0x00,
0x1E,0x3F,0x3F,0x3F,0x3F,0x1E,0x00,0x00,0x00,0x00,0x1E,0x3F,0x3F,0x3F,0x3F,0x1E,
0x00,0x00,0x00,0x00,0x03,0x0F,0xFF,0xFF,0xFF,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,
0x03,0x03,0x03,0x03,0x07,0x07,0x0F,0xDF,0xFF,0xFF,0xF8,0xC0,0x00,0x00,0x00,0x1E,
0x7C,0xF0,0xE0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,0xF0,0x7C,
0x3E,0x07,0x00,0x00,0x80,0xF0,0xFF,0xFF,0xFF,0x87,0x03,0x03,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x38,0x18,0x1C,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFE,0xF8,0xF8,
0xF0,0xE0,0xE1,0xE1,0xC3,0xC7,0xC7,0xC7,0xC7,0xC7,0xC7,0xC3,0xC3,0xE1,0xE0,0xF0,
0xF8,0xF8,0xFC,0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x0F,0x0E,0x0C,0x0C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1F,0x0F,0x07,
0x03,0x03,0x01,0x01,0x01,0x03,0x0F,0x7F,0xFF,0x7F,0x0F,0x03,0x01,0x01,0x01,0x01,
0x03,0x07,0x07,0x1F,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

unsigned char tu2[]={
0x00,0x00,0x80,0xC0,0xE0,0xF0,0x78,0xB8,0xBC,0xDC,0xDE,0xFF,0xEF,0xEF,0xEE,0xFE,
0xDE,0xDC,0xBC,0xB8,0x78,0xF0,0xE0,0xE0,0xE0,0xE0,0xF0,0x78,0xB8,0xBC,0xDC,0xDE,
0xEE,0xFF,0xEF,0xEF,0xFE,0xDE,0xDC,0xFC,0xB8,0x78,0xF0,0xE0,0xC0,0x80,0x00,0x00,
0xF0,0xFE,0xFF,0x0F,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFB,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFB,0x9F,0xFF,0xFE,0xF0,
0x1F,0xFF,0xFF,0xC5,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xE2,0xFF,0xFF,0x1F,
0x00,0x00,0x07,0x0F,0x3F,0x7C,0xF3,0xEF,0xDF,0xBF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF3,0x7C,0x3F,0x0F,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3E,0x7D,0xFB,0xF7,0xEF,
0xDF,0xBF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,
0xEF,0xF7,0xFB,0x7D,0x3E,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
0x03,0x07,0x0F,0x0E,0x1D,0x3B,0x77,0xEF,0xEF,0x77,0x3B,0x1D,0x0E,0x0F,0x07,0x03,
0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//中文字模
const unsigned char chinese_character[][24]=
{
//hua
{0x88,0x84,0xBE,0x91,0x90,0xC8,0xBF,0xA8,0xA4,0xA2,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
//dong
{0x02,0x22,0x32,0xAA,0x26,0xFB,0x22,0x62,0xA2,0x22,0x02,0x00,0x02,0x02,0x01,0x00,0x04,0x07,0x00,0x00,0x00,0x01,0x02,0x00},
//li
{0x12,0x12,0xFE,0x12,0x3F,0xA5,0xA5,0xFF,0xA5,0xA5,0x3F,0x00,0x02,0x02,0x01,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x00},
//gong
{0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00},
//da
{0x08,0x08,0x08,0x08,0xC8,0x3F,0xC8,0x08,0x08,0x0C,0x08,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00},
//xue
{0x9C,0x84,0x95,0x96,0x95,0xD6,0xB4,0x94,0x87,0x94,0x8C,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
//long
{0x04,0x04,0x04,0xC4,0x3F,0x04,0xFC,0x45,0x26,0x14,0x04,0x00,0x04,0x02,0x01,0x02,0x02,0x01,0x07,0x04,0x04,0x04,0x07,0x00},
//fei
{0x01,0x01,0x01,0x01,0x01,0x7F,0x90,0x18,0x24,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x07,0x00},

};


//6X8字库
unsigned char font6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },// sp
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },// !
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },// "
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },// #
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },// $
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },// %
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },// &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },// '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },// (
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },// )
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },// *
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },// +
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },// ,
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },// -
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },// .
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },// /
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },// 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },// 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },// 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },// 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },// 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },// 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },// 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },// 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },// 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },// 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },// :
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },// ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },// <
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },// =
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },// >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },// ?
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },// @
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },// A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },// B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },// C
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },// D
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },// E
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },// F
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },// G
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },// H
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },// I
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },// J
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },// K
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },// L
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },// M
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },// N
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },// O
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },// P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },// Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },// R
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },// S
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },// T
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },// U
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },// V
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },// W
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },// X
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },// Y
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },// Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },// [
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },// 55
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },// ]
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },// ^
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },// _
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },// '
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },// a
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },// b
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },// c
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },// d
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },// e
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },// f
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },// g
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },// h
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },// i
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },// j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },// k
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },// l
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },// m
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },// n
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },// o
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },// p
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },// q
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },// r
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },// s
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },// t
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },// u
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },// v
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },// w
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },// x
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },// y
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },// z
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }// horiz lines
};

/*
@brief:set and clear the control bits of 5110 lcd.
@usage:you can use funtion set_XXX() to set a bit and use funtion clear_XXX() to clear a bit.
*/
void set_SCE(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
}
void clear_SCE(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
}
void set_RES(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_SET);
}
void clear_RES(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);
}
void set_DC(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_7, Bit_SET);
}
void clear_DC(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_7, Bit_RESET);
}
void set_SDIN(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_SET);
}
void clear_SDIN(void)
{
	 GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_RESET);
}
void set_SCLK(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_SET);
}
void clear_SCLK(void)
{
 GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_RESET);
}

/************************************************
*函数名: GPIO_Configuration      
*参  数:无
*功  能: 配置GPIO   
*返回值:无                                    
*备  注:无          
*日  期:2013/07/23        
*************************************************/ 
GPIO_InitTypeDef GPIO_InitStructure;
void GPIO_Configuration(void)
{
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);	 
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/************************************************
*函数名: LCD_write_byte       *
*参  数:data:写入的数据          *
*        cmd: 1-数据/0-命令     *
*功  能: 向5110LCD写入数据      *
*返回值:无                                     *
*日  期:2013/07/23        *
*************************************************/ 
void LCD_write_byte(unsigned char data,unsigned char cmd)
{
  	unsigned char i;   
    clear_SCE();  
  	if(cmd)
  		set_DC();
  	else
  		clear_DC();         
  	for(i=0;i<8;i++)
 	{ 
   		if(data&0x80) //如果一个字节的最高位是1
  			set_SDIN(); //则设置SDIN=1
   		else
   			clear_SDIN();//否则设置SDIN=0;SDIN是即将写入数据DDRAM的值
  			data = data<<1; //将传送的一个字节数据的每一位进行左移一位,等待下一次传输
  			clear_SCLK();   //SDIN在SCLK的上升沿写入DDRAM
  			set_SCLK();     //
  			clear_SCLK();  //
 	}   
}
/************************************************
*函数名: LCD_init           *
*参  数:无                       *
*功  能: 初始化LCD              *
*返回值:无                                     *         *
*日  期:2013/07/23        *
*************************************************/
void LCD_init(void)
{
	set_SCE();
	set_RES();
	delay_us(200);
	clear_RES();   
	delay_ms(20);
	set_RES();  
 	delay_us(200);
 	LCD_write_byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
 	LCD_write_byte(0xd0,0);//设置VOP值,室温下的编程范围为3.00-10.68
 //Vlcd=3.06+(VOP)*0.06,本例VOP为0B01010000为十进制的80,Vlcd=7.86V
 	LCD_write_byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
 	LCD_write_byte(0x0c,0);//设定显示配置:普通模式
 	set_SCE();//SCE为高电平时串行口被初始化,SCLK时钟不起作用,串行接口不消耗电力,所以最后都将SCE置高电平
}
/************************************************
*函数名: LCD_set_XY           *
*参  数:X:列                     *
*        Y:行                            *
*功  能: 选择写入液晶位置      *
*返回值:无                                     *
*日  期:2013/07/23        *
*************************************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
 	LCD_write_byte(0x40 | Y, 0);// 行
 	LCD_write_byte(0x80 | X, 0);// 列
 	set_SCE();
} 
/************************************************
*函数名: LCD_clear           *
*参  数:无                            *
*功  能: 清屏                    *
*返回值:无                                     *
*备  注:无          *
*日  期:2013/07/23        *
*************************************************/
void LCD_clear(void)
{
  	unsigned char t;
  	unsigned char k;
 	LCD_set_XY(0,0);
 	 for(t=0;t<6;t++)
 	{ 
   		for(k=0;k<84;k++)
  		{ 
   			LCD_write_byte(0x00,1);        
  		} 
	}
 	set_SCE();
}
/************************************************
*函数名: LCD_write_char       *
*参  数:c:需写入的字符                *
*功  能: 写入字符命令                  *
*返回值:无                                     *
*日  期:2013/07/23        *
*************************************************/
void LCD_write_char(unsigned char c)
{
  	unsigned char c_line;
		c-=32;
		for (c_line=0; c_line<6; c_line++)
		LCD_write_byte(font6x8[c][c_line], 1); 
}
/************************************************
*函数名: LCD_write_String      *
*参  数:X:设置写入字符串列位置           *
*   Y:设置写入字符串行位置     *
*   *s:写入字符串首地址                    *
*功  能: LCD显示字符串                 *
*返回值:无                                     *
*日  期:2013/07/23       *
*************************************************/
void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
 	LCD_set_XY(X,Y);
  	while (*s) 
	{
  		LCD_write_char(*s);
  		s++;
 	}
} 
/************************************************
*函数名: LCD_write_chinese   *
*参  数:X:设置写入汉字列位置               *
*   Y:设置写入汉字行位置     *
*功  能: LCD显示汉字                 *
*返回值:无                                     *
*日  期:2013/07/23        *
*************************************************/


void LCD_write_chinese(unsigned char X, unsigned char Y,char n)
{
  	int i;
		LCD_set_XY(X,Y);
  	for(i = 0;i < 12; i++)
		{
			LCD_write_byte(chinese_character[n][i],1);
		}
			LCD_set_XY(X,Y+1);
  	for(i = 12; i < 24; i++)
		{
			LCD_write_byte(chinese_character[n][i],1);
		}
}

/************************************************
*函数名: LCD_write_Picture   *
*功  能: 写整屏的图片                 *
*返回值:无                                     *
*日  期:2013/07/23        *
*************************************************/
void LCD_write_Picture(unsigned char *c)
{
	unsigned i,j;
	for(i=0;i<6;i++)
	{
		LCD_set_XY(0,i);
		for(j=0;j<84;j++)
		{
				LCD_write_byte(c[i*84+j],1);
		}
	}
}

delay.c
#include "delay.h"

__IO u16 ntime;								    

void delay_ms(u16 nms)
{	 		  	  
	ntime=nms;
	SysTick_Config(168000);//1ms产生一次中断
	while(ntime);
	SysTick->CTRL=0x00;			  	    
}   
		    								   
void delay_us(u32 nus)
{		
	ntime=nus;
	SysTick_Config(168);//1us产生一次中断
	while(ntime);
	SysTick->CTRL=0x00;
}

void Delay(u32 count)
{
	while(count--);
}

/**
  ************************************************************************************
  * @file    LCD5110.h
  * @author  Allen
  * @version V1.0.0
  * @date    22-July-2012,21:30 IN ECUST 
  * @brief   This file contains all the functions prototypes for the 5110 LCD driver
  ************************************************************************************
  @NOTE:
*THIS FILE IS JUST FOR STUDY,CREATED BY LONGFEI WHICH HAS SOME REFERENCE FROM NETWORK
*/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __LCD5110_H
#define __LCD5110_H
extern unsigned char tu[];
extern unsigned char tu1[];
extern unsigned char tu2[];
/* Exported functions --------------------------------------------------------*/ 
/* Funtion used to Configuration GPIO ----------------------------------------*/
 void GPIO_Configuration(void);
/* Funtion used to SET SCE----------------------------------------------------*/
 void set_SCE(void);
/* Funtion used to CLEAR SCE--------------------------------------------------*/
 void clear_SCE(void);
/* Funtion used to SET RES----------------------------------------------------*/
 void set_RES(void);
/* Funtion used toCLEAR SCE--------------------------------------------------*/
 void clear_RES(void);
/* Funtion used toSET DC-----------------------------------------------------*/
 void set_DC(void);
/* Funtion used toCLEAR DC---------------------------------------------------*/
 void clear_DC(void);
/* LCD_write_byte funtion---------------------------------------------------*/
 void LCD_write_byte(unsigned char data,unsigned char cmd);
/* LCD_Init function--------------------------------------------------------*/
 void LCD_init(void);
/* LCD_set_XY---------------------------------------------------------------*/
 void LCD_set_XY(unsigned char X,unsigned char Y);
/* LCD_clear function-------------------------------------------------------*/
 void LCD_clear(void);
/* LCD_write_char function--------------------------------------------------*/
 void LCD_write_char(unsigned char c);
/* LCD_write_string function-----------------------------------------------*/
 void LCD_write_String(unsigned char X,unsigned char Y,char *s);
/* LCD_write_chinese function------------------------------------------ ---*/
 void LCD_write_chinese(unsigned char X,unsigned char Y,char n);
/* LCD_write_Picture function------------------------------------------ ---*/
 void LCD_write_Picture(unsigned char *c);
#endif

#ifndef __DELAY_H
#define __DELAY_H

#include "stm32f4xx_conf.h"

void delay_ms(u16 nms);
void delay_us(u32 nus);
void Delay(u32 count);

#endif


你可能感兴趣的:(STM32F407学习之GPIO驱动NOKIA LCD5110)