
據說這種液晶屏是用在諾基亞5110型號的手機上的,現(xiàn)在這型號的手機已經是老古董了,于是大量的屏幕被拆下來,加上個PCB做成液晶屏模塊,就在淘寶上開賣了.上圖就是我手中的液晶屏,就是從他們家買的,果然拆機的質量沒法保障.我的液晶屏接觸不良,要用手按著才能看清顯示的字符.

本來這塊液晶屏,我都丟進垃圾桶了的,接觸不良,老是顯示異常.最后想想,都研究一天了,拿來拍個照,發(fā)個文章,也算光榮退休了吧,死的也有點價值.

上圖是本模塊的引腳功能說明.
諾基亞5110使用的液晶驅動芯片是PCB8544,這個驅動芯片已經集成到5110模塊中,要想使用這塊液晶屏,需要先看一下這個芯片的手冊.自行百度搜索這個驅動芯片的手冊,或者加群,我發(fā)給你.

5110液晶屏復位:上圖是PCB8544液晶驅動芯片復位時序圖,上電后經過至少twl(RES)時間后,RES復位引腳輸出一個至少tRW時間的低電平.
上圖中的這兩個時間,查找手冊只看到twl(RES)至少為100ns,找不到tRW.
所以為了復位,只能給一個ms級的延時,保證復位.因為如果不復位,液晶屏就不能顯示,具體為啥我也不知道.

此款液晶屏使用SPI接口驅動,使用特殊的SPI驅動.之所以特殊是因為,沒有用到SPI的MISO引腳,只使用了MOSI引腳.基本上液晶屏都是這樣,我們不需要從液晶屏讀取什么信息,只需寫入數據顯示就行了.
上圖是SPI傳送一個字節(jié)時序圖,對5110來說,使用SPI寫入數據是比較奇怪的,每次只需要寫入一個數據或者命令即可,不像NRF24L01這類芯片,要先寫入寄存器地址,再寫入數據.
所以,以前寫的SPI驅動程序,可以改成一次寫入一個數據的,也可以不改,就像下面這個樣子.

先寫入一個字節(jié)數據,后面固定寫入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),然后在垂直尋址和水平尋址下,查看,寫入一個字節(jié)的數據是如何刷屏的.

大概是上面這個樣子,加入延時,全部寫入0xFF,然后清屏寫入0x00,如此反復.
程序寫的有點亂,不是那么容易理解,大家可以去網上找其它教程.- /*硬件連接*/
- // PB4 --> RST
- // PD4 --> SEL
- // PD5 --> DC
- // PB5 --> SCK
- // PB6 --> MOSI
- // PB7 <-- MISO
- /****************************************************************************************
- *開發(fā)環(huán)境: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基本寫一個字節(jié)函數
- //* 入口參數 :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));//等待發(fā)送寄存器為空
- SPI1_DR=data;
- while(!(SPI1_SR_TXE));
- SEL_H;
- }
- ///******************************************************************** **********************************
- //* 功 能 :SPI基本讀一個字節(jié)函數
- //* 入口參數 :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;//空閑狀態(tài)時,SCK保持低電平
-
- //定義幀格式
- SPI1_CR1_LSBFIRST=0;//先發(fā)送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");
- }
- }
復制代碼
|