标题:
STM8L驱动诺基亚5110液晶屏
[打印本页]
作者:
51hei小林
时间:
2016-10-20 13:03
标题:
STM8L驱动诺基亚5110液晶屏
据说这种液晶屏是用在诺基亚5110型号的手机上的,现在这型号的手机已经是老古董了,于是大量的屏幕被拆下来,加上个PCB做成液晶屏模块,就在淘宝上开卖了.上图就是我手中的液晶屏,就是从他们家买的,果然拆机的质量没法保障.我的液晶屏接触不良,要用手按着才能看清显示的字符.
本来这块液晶屏,我都丢进垃圾桶了的,接触不良,老是显示异常.最后想想,都研究一天了,拿来拍个照,发个文章,也算光荣退休了吧,死的也有点价值.
上图是本模块的引脚功能说明.
诺基亚5110使用的液晶驱动芯片是PCB8544,这个驱动芯片已经集成到5110模块中,要想使用这块液晶屏,需要先看一下这个芯片的手册.自行百度搜索这个驱动芯片的手册,或者加群,我发给你.
5110液晶屏复位:上图是PCB8544液晶驱动芯片复位时序图,上电后经过至少twl(RES)时间后,RES复位引脚输出一个至少tRW时间的低电平.
上图中的这两个时间,查找手册只看到twl(RES)至少为100ns,找不到tRW.
所以为了复位,只能给一个ms级的延时,保证复位.因为如果不复位,液晶屏就不能显示,具体为啥我也不知道.
此款液晶屏使用SPI接口驱动,使用特殊的SPI驱动.之所以特殊是因为,没有用到SPI的MISO引脚,只使用了MOSI引脚.基本上液晶屏都是这样,我们不需要从液晶屏读取什么信息,只需写入数据显示就行了.
上图是SPI传送一个字节时序图,对5110来说,使用SPI写入数据是比较奇怪的,每次只需要写入一个数据或者命令即可,不像NRF24L01这类芯片,要先写入寄存器地址,再写入数据.
所以,以前写的SPI驱动程序,可以改成一次写入一个数据的,也可以不改,就像下面这个样子.
先写入一个字节数据,后面固定写入0x00,为啥这个样子就可以,我也不知道.原来用MSP430驱动程序时就是这么写的,我只是把它移植过来,以前是用软件模拟SPI时序的.DC_CMD和DC_DAT是控制DC引脚为高或低,来告诉驱动芯片,此次写入的是数据还是命令.
多5110进行初始化配置,需要看懂上面的这两个图,上面是对5110进行配置的一些解释,基本上和12854,1206这类液晶屏是一样的.STM8L自带的驱动芯片,也和这个有那么一点类似.
因为本质上这个液晶屏也是段式液晶,不过这个液晶屏的段非常多,每一个段都是非常小的点,就是我们常叫的像素.这块液晶屏共有6*84*8=4032个点,每个点都可以通过显存寄存器进行控制,控制其显示或者不显示.
上图中的配置,大家就自己琢磨吧,我也看了很久才看明白是怎么配置的.
举个例子,我们要配置显示模式为普通模式,我们需要使用基本指令中的显示控制.
要使用基本指令需要设置H=0,因为功能设置寄存器的第五位固定为1,所以是0x20+PD,V,H位.
同样,对于显示模式寄存器,因为DB4位固定为高所以我的程序中是0x08+***.
从上图可以看到x轴范围是0~83,Y轴是0~5.注意Y轴的0~5其实每一小格是八位.
V=0时是水平寻址,意思是对显示写完一个八位数据后,地址自动沿X轴方向递增到下一个显存寄存器的地址.
V=1时是垂直寻址,上面是横着显示的,这个是竖着显示的.
这两种模式对控制液晶屏显示很重要,需要大家自己去写程序理解,大体作法是,先把写入坐标设置成(0,0),然后在垂直寻址和水平寻址下,查看,写入一个字节的数据是如何刷屏的.
大概是上面这个样子,加入延时,全部写入0xFF,然后清屏写入0x00,如此反复.
程序写的有点乱,不是那么容易理解,大家可以去网上找其它教程.
/*硬件连接*/
// PB4 --> RST
// PD4 --> SEL
// PD5 --> DC
// PB5 --> SCK
// PB6 --> MOSI
// PB7 <-- MISO
/****************************************************************************************
*开发环境:IAR for stm8 v6.5.3
*硬件平台:STM8L-DISCOVERY
*功能说明:使用硬件SPI驱动液晶屏显示一行汉字
*作 者:茗风
****************************************************************************************/
#include"iostm8l152c6.h"
#include"stdbool.h"
#include"stdint.h"
#define SEL_L PD_ODR_ODR4=0
#define SEL_H PD_ODR_ODR4=1
#define DC_DAT PD_ODR_ODR5=1
#define DC_CMD PD_ODR_ODR5=0
#define RST_H PB_ODR_ODR4=1
#define RST_L PB_ODR_ODR4=0
#define NOKIA5110_Write_CMD(byte) DC_CMD;SPI1_Write_REG(byte,0x00)//NOKIA5110 写命令
#define NOKIA5110_Write_DAT(byte) DC_DAT;SPI1_Write_REG(byte,0x00)//NOKIA5110 写数据
const uint8_t font6x8[92][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
};
const char Hzk[][24]= //本数据有PCtoLCD取模软件产生,竖直取模,
{
{0x84,0x00,0x64,0x00,0xFF,0x0F,0x24,0x00,0xFA,0x0F,0x0A,0x01,0x5A,0x01,0xEF,0x07,0x5A,0x01,0x0A,0x09,0xFA,0x0F,0x00,0x00},/*"楠",0*/
{0x84,0x00,0x64,0x00,0xFF,0x0F,0x24,0x00,0xFA,0x0F,0x0A,0x01,0x5A,0x01,0xEF,0x07,0x5A,0x01,0x0A,0x09,0xFA,0x0F,0x00,0x00},/*"楠",1*/
{0x00,0x04,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",2*/
{0x10,0x02,0x12,0x02,0x12,0x09,0xFF,0x0F,0x91,0x00,0x10,0x04,0xFF,0x02,0x10,0x03,0x90,0x04,0x52,0x08,0x14,0x0E,0x00,0x00},/*"我",0*/
{0x32,0x08,0x56,0x04,0x5A,0x0A,0xD2,0x09,0x76,0x0B,0x5A,0x05,0x51,0x05,0x51,0x05,0x59,0x0B,0x55,0x08,0x31,0x08,0x00,0x00},/*"爱",1*/
{0x20,0x00,0x10,0x00,0xFC,0x0F,0x03,0x00,0x10,0x02,0xCF,0x01,0x04,0x08,0xF4,0x0F,0x04,0x00,0x54,0x00,0x8C,0x03,0x00,0x00},/*"你",2*/
{0x00,0x00,0x00,0x00,0x7C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}/*"!",7*/
};
/******************************************************************************************************
* 名 称:void delay_10ms(uint8_t x_ms)
* 功 能:延时10ms
* 入口参数:无
* 出口参数:无
* 说 明:
* 范 例:无
******************************************************************************************************/
void delay_100ms(void)
{
uint8_t i,j;
for(i=0;i<10;i++)//2*255个指令周期
for(j=0;j<255;j++);//2*255个指令周期
//delay_10ms共消耗 x_ms*2*255+2*x_ms个指令周期
//255*2*255+2*255=130610us=130ms
//此延时函数,延时时间为130ms
//16M/8/2=1M 一个指令周期为1us
}
///******************************************************************** **********************************
//* 功 能 :SPI基本写一个字节函数
//* 入口参数 :address为寄存器地址
// data为写入数据
//* 出口参数 :无
//* 说 明 :SPI文件提供基本的写函数,具体的器件写方式可能不同,建议使用基本函数进行封装
//* 范 例 :无
//******************************************************************************************************/
void SPI1_Write_REG(uint8_t address,uint8_t data)
{
uint8_t tmp;
SEL_L;
SPI1_DR=address;//写入需要操作的寄存器地址,
while(!(SPI1_SR_RXNE));
tmp=SPI1_DR; //读取数据,仅仅是为了清除标志位
while(!(SPI1_SR_TXE));//等待发送寄存器为空
SPI1_DR=data;
while(!(SPI1_SR_TXE));
SEL_H;
}
///******************************************************************** **********************************
//* 功 能 :SPI基本读一个字节函数
//* 入口参数 :address为寄存器地址
//* 出口参数 :无
//* 说 明 :SPI文件提供基本的读函数,具体的器件读方式可能不同,建议使用基本函数进行封装
//* 范 例 :无
//******************************************************************************************************/
uint8_t SPI1_Read_REG(uint8_t address)
{
volatile uint8_t value=0;
SEL_L;
value=SPI1_DR;//读一次,清除标志位
while(!(SPI1_SR_TXE));
SPI1_DR=address;//写入需要操作的寄存器地址,
while(!(SPI1_SR_RXNE));
value=SPI1_DR;
while(!(SPI1_SR_TXE));
SPI1_DR=0xFF;//写入一个无效值
while(!(SPI1_SR_RXNE));//准备读数据
value=SPI1_DR;
SEL_H;
return value;
}
/******************************************************************************************************
* 名 称: SPI_init()
* 功 能:初始化SPI
* 入口参数:无
* 出口参数:无
* 说 明: SP1传输速率设置为fmaster/2=8M,主模式,
* 范 例:无
******************************************************************************************************/
void SPI_Init(void)
{
CLK_PCKENR1_PCKEN14=1;//打开SPI1外设时钟
SPI1_CR1_SPE=0;//关闭SPI设备
//设置串行波特率
SPI1_CR1_BR=0;//fmaster/2=1M
//配置CPOL和CPHA,定义数据传输和串行时钟间的相位关系
SPI1_CR1_CPHA=0;//数据采样从第一个时钟边沿开始
SPI1_CR1_CPOL=0;//空闲状态时,SCK保持低电平
//定义帧格式
SPI1_CR1_LSBFIRST=0;//先发送MSB
//使能从设备管理//主模式需通过改变SSI位 来控制SPI_SEL
SPI1_CR2_SSM=1;//禁止软件从设备
SPI1_CR2_SSI=1;
//主从设备模式选择
SPI1_CR1_MSTR=1;//作为主设备
SPI1_CR2_RXONLY=0;//全双工
SPI1_CR2_BDM=0;//选择单向数据模式
SPI1_CR1_SPE=1;//开启SPI设备
}
///******************************************************************** **********************************
//* 功 能 :NOKIA5110端口初始化函数
//* 入口参数 :无
//* 出口参数 :无
//* 说 明 :对NOKIA5110用到的GPIO进行初始化
//* 范 例 :无
//******************************************************************************************************/
void NOKIA5110_GPIO_Init(void)
{
PD_DDR_DDR4 =1;//SEL设置为输出
PD_DDR_DDR5 =1;//DC设置为输出
PB_DDR_DDR4 =1;//RST设置为输出
PB_DDR_DDR5 =1;//SCK设置为输出
PB_DDR_DDR6 =1;//SIMO设置为输出
PD_CR1_C14 =1;//SEL设置为推挽输出
PD_CR1_C15 =1;//DC设置为推挽输出
PB_CR1_C14 =1;//RST设置为推挽输出
PB_CR1_C15 =1;//SCK设置为推挽输出
PB_CR1_C16 =1;//SIMO设置为推挽输出
PD_CR2_C24 =1;//SEL的IO输出速率为10MHz
PD_CR2_C25 =1;//DC的IO输出速率为10MHz
PB_CR2_C24 =1;//RST的IO输出速率为10MHz
PB_CR2_C25 =1;//SCK的IO输出速率为10MHz
PB_CR2_C26 =1;//SIMO的IO输出速率为10MHz
PD_ODR_ODR4=1;//SEL输出高电平
PB_ODR_ODR4=1;//RST输出高电平
PB_ODR_ODR5=0;//SCK输出低电平
}
///******************************************************************** **********************************
//* 功 能 :设置液晶屏显示坐标
//* 入口参数 :x:0<=x<=83 y:0<=y<=5
//* 出口参数 : 0:写字符成功 1:x坐标越界 2:y坐标越界
//* 说 明 :无
//* 范 例 :无
//******************************************************************************************************/
uint8_t NOKIA5110_Set_XY_Coordinate(uint8_t x,uint8_t y)
{
//检查输入的x和y坐标是否越界
if(x>83)return 1;
if(y>5) return 2;
NOKIA5110_Write_CMD(0x40+y);//sets Y-address of RAM 0<=Y<=5//BANK0~BANK5
NOKIA5110_Write_CMD(0x80+x);//sets X-address part of RAM 0<=X<=83 //
return 0;
}
///******************************************************************** **********************************
//* 功 能 :液晶屏刷屏
//* 入口参数 :无
//* 出口参数 :无
//* 说 明 :无
//* 范 例 :无
//******************************************************************************************************/
uint8_t NOKIA5110_Clean(void)
{
uint16_t i;
if(NOKIA5110_Set_XY_Coordinate(0,0))
{
return 1;//如果进入这个函数,说明设置坐标函数返回的是非0值,坐标值越界
}
for(i=0;i<504;i++)
{
NOKIA5110_Write_DAT(0xFF);
delay_100ms();
}
for(i=0;i<504;i++)
{
NOKIA5110_Write_DAT(0x00);
delay_100ms();
}
for(i=0;i<504;i++)
{
NOKIA5110_Write_DAT(0xFF);
delay_100ms();
}
for(i=0;i<504;i++)
{
NOKIA5110_Write_DAT(0x00);
delay_100ms();
}
// NOKIA5110_Write_CMD(0x40+0x05);
// for(i=0;i<83;i++)
// {
// NOKIA5110_Write_DAT(0xFF);
// }
return 0;
}
///******************************************************************** **********************************
//* 功 能 :显示字符串,ASCII码
//* 入口参数 :无
//* 出口参数 : 0:写字串成功 1:坐标越界 2:字符越界
//* 说 明 :注意,本函数是V=0,水平寻址方式,请更改5110配置
//* 范 例 :无
//******************************************************************************************************/
uint8_t NOKIA5110_Display_String(uint8_t x,uint8_t y,uint8_t *s)
{
uint8_t j=0,temp=0;
if(NOKIA5110_Set_XY_Coordinate(x,y))
{
return 1;//如果进入这个函数,说明设置坐标函数返回的是非0值,坐标值越界
}
while(*s != '\0')
{
temp=*s-32;
for(j=0;j<6;j++)
{
NOKIA5110_Write_DAT(font6x8[temp][j]);
}
s++;
}
return 0;
}
///******************************************************************** **********************************
//* 功 能 :显示一行汉字
//* 入口参数 :无
//* 出口参数 : 0:写字串成功 1:坐标越界 2:字符越界
//* 说 明 :注意,本函数是V=1,垂直寻址方式,暂时不需要更改
//* 范 例 :无
//******************************************************************************************************/
uint8_t NOKIA5110_Display_SimplifiedChinese(uint8_t x,uint8_t y)
{
static uint8_t i=0,j=0,cnts=0;
static uint32_t len=0;
len=sizeof(Hzk)/24;
for(i=0;i<len;i++)
{
for(;j<len*12;j++)
{
NOKIA5110_Set_XY_Coordinate(j,0);
NOKIA5110_Write_DAT(Hzk[i][cnts++]);
NOKIA5110_Write_DAT(Hzk[i][cnts++]);
}
asm("nop");
}
return 0;
}
///******************************************************************************************************
//*功 能 :NOKIA5110初始化配置函数
//*入口参数:无
//*出口参数:无
//*说 明 :无
//*范 例 :无
//******************************************************************************************************/
void NOKIA5110_Init(void)
{
NOKIA5110_GPIO_Init();//初始化NOKIA5110使用到的GPIO
RST_L;
delay_100ms();
RST_H;
NOKIA5110_Write_CMD(0x20+0x01);// 使用扩展指令
NOKIA5110_Write_CMD(0x10+0x03);//1/48 bis这个数据不可更改,由硬件段数决定
NOKIA5110_Write_CMD(0x80+0x64);//设置的电荷泵,电压越高,显示越清晰,也可能太清晰了看不清字符
NOKIA5110_Write_CMD(0x20+0x02);//使用基本指令
NOKIA5110_Write_CMD(0x08+0x04);//正常显示模式
NOKIA5110_Clean();
NOKIA5110_Display_SimplifiedChinese(0,0);
// NOKIA5110_Display_String(0,0,"***hello!***");
}
void main(void)
{
SPI_Init();
NOKIA5110_Init();
// asm("rim"); //enable interrupts
while(1)
{
asm("wfi");
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1