久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2828|回復: 0
打印 上一主題 下一主題
收起左側

STM8L驅動諾基亞5110液晶屏

[復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發(fā)表于 2016-10-20 13:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
                                                                                                
據說這種液晶屏是用在諾基亞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,如此反復.

程序寫的有點亂,不是那么容易理解,大家可以去網上找其它教程.
  1. /*硬件連接*/

  2. //    PB4     -->      RST

  3. //    PD4     -->      SEL

  4. //    PD5     -->      DC

  5. //    PB5     -->      SCK

  6. //    PB6     -->      MOSI

  7. //    PB7     <--      MISO


  8. /****************************************************************************************

  9. *開發(fā)環(huán)境:IAR for stm8 v6.5.3

  10. *硬件平臺:STM8L-DISCOVERY

  11. *功能說明:使用硬件SPI驅動液晶屏顯示一行漢字

  12. *作    者:茗風

  13. ****************************************************************************************/


  14. #include"iostm8l152c6.h"

  15. #include"stdbool.h"

  16. #include"stdint.h"


  17. #define SEL_L           PD_ODR_ODR4=0

  18. #define SEL_H           PD_ODR_ODR4=1

  19. #define DC_DAT          PD_ODR_ODR5=1

  20. #define DC_CMD          PD_ODR_ODR5=0

  21. #define RST_H           PB_ODR_ODR4=1

  22. #define RST_L           PB_ODR_ODR4=0


  23. #define NOKIA5110_Write_CMD(byte)            DC_CMD;SPI1_Write_REG(byte,0x00)//NOKIA5110 寫命令

  24. #define NOKIA5110_Write_DAT(byte)            DC_DAT;SPI1_Write_REG(byte,0x00)//NOKIA5110 寫數據


  25. const uint8_t font6x8[92][6] =           //水平尋址

  26. {

  27.     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp

  28.     { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !

  29.     { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "

  30.     { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #

  31.     { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $

  32.     { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %

  33.     { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &

  34.     { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '

  35.     { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (

  36.     { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )

  37.     { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *

  38.     { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +

  39.     { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,

  40.     { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -

  41.     { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .

  42.     { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /

  43.     { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0

  44.     { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1

  45.     { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2

  46.     { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3

  47.     { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4

  48.     { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5

  49.     { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6

  50.     { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7

  51.     { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8

  52.     { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9

  53.     { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :

  54.     { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;

  55.     { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <

  56.     { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =

  57.     { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >

  58.     { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?

  59.     { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @

  60.     { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A

  61.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B

  62.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C

  63.     { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D

  64.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E

  65.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F

  66.     { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G

  67.     { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H

  68.     { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I

  69.     { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J

  70.     { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K

  71.     { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L

  72.     { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M

  73.     { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N

  74.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O

  75.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P

  76.     { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q

  77.     { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R

  78.     { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S

  79.     { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T

  80.     { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U

  81.     { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V

  82.     { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W

  83.     { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X

  84.     { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y

  85.     { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z

  86.     { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [

  87.     { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55

  88.     { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]

  89.     { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^

  90.     { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _

  91.     { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '

  92.     { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a

  93.     { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b

  94.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c

  95.     { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d

  96.     { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e

  97.     { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f

  98.     { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g

  99.     { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h

  100.     { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i

  101.     { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j

  102.     { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k

  103.     { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l

  104.     { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m

  105.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n

  106.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o

  107.     { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p

  108.     { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q

  109.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r

  110.     { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s

  111.     { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t

  112.     { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u

  113.     { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v

  114.     { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w

  115.     { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x

  116.     { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y

  117.     { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z

  118.     { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines

  119. };

  120. const char Hzk[][24]=   //本數據有PCtoLCD取模軟件產生,豎直取模,

  121. {

  122.   {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*/


  123.   {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*/



  124.   {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*/


  125.   

  126.   {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*/


  127.   {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*/


  128.   {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*/

  129.   

  130.   

  131.   {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*/

  132. };


  133. /******************************************************************************************************

  134. *  名    稱:void delay_10ms(uint8_t x_ms)

  135. *  功    能:延時10ms

  136. *  入口參數:無

  137. *  出口參數:無

  138. *  說    明:

  139. *  范    例:無

  140. ******************************************************************************************************/

  141. void delay_100ms(void)

  142. {

  143.   uint8_t i,j;

  144.   for(i=0;i<10;i++)//2*255個指令周期

  145.     for(j=0;j<255;j++);//2*255個指令周期

  146.   //delay_10ms共消耗 x_ms*2*255+2*x_ms個指令周期  

  147.   //255*2*255+2*255=130610us=130ms

  148.   //此延時函數,延時時間為130ms

  149.   //16M/8/2=1M 一個指令周期為1us

  150. }

  151. ///******************************************************************** **********************************

  152. //*  功  能   :SPI基本寫一個字節(jié)函數

  153. //*  入口參數 :address為寄存器地址

  154. //              data為寫入數據

  155. //*  出口參數 :無

  156. //*  說  明   :SPI文件提供基本的寫函數,具體的器件寫方式可能不同,建議使用基本函數進行封裝

  157. //*  范  例   :無

  158. //******************************************************************************************************/

  159. void SPI1_Write_REG(uint8_t address,uint8_t data)

  160. {

  161.     uint8_t tmp;

  162.     SEL_L;

  163.     SPI1_DR=address;//寫入需要操作的寄存器地址,

  164.     while(!(SPI1_SR_RXNE));

  165.     tmp=SPI1_DR;   //讀取數據,僅僅是為了清除標志位

  166.     while(!(SPI1_SR_TXE));//等待發(fā)送寄存器為空

  167.     SPI1_DR=data;

  168.     while(!(SPI1_SR_TXE));

  169.     SEL_H;

  170. }


  171. ///******************************************************************** **********************************

  172. //*  功  能        :SPI基本讀一個字節(jié)函數

  173. //*  入口參數        :address為寄存器地址

  174. //*  出口參數        :無

  175. //*  說  明        :SPI文件提供基本的讀函數,具體的器件讀方式可能不同,建議使用基本函數進行封裝

  176. //*  范  例        :無

  177. //******************************************************************************************************/

  178. uint8_t SPI1_Read_REG(uint8_t address)

  179. {

  180.   volatile uint8_t value=0;

  181.   SEL_L;

  182.   value=SPI1_DR;//讀一次,清除標志位

  183.   while(!(SPI1_SR_TXE));

  184.   SPI1_DR=address;//寫入需要操作的寄存器地址,

  185.   

  186.   while(!(SPI1_SR_RXNE));

  187.   value=SPI1_DR;

  188.   

  189.   while(!(SPI1_SR_TXE));

  190.   SPI1_DR=0xFF;//寫入一個無效值

  191.   

  192.   while(!(SPI1_SR_RXNE));//準備讀數據

  193.   value=SPI1_DR;

  194.   SEL_H;

  195.   return value;

  196. }

  197. /******************************************************************************************************

  198. * 名 稱: SPI_init()

  199. * 功 能:初始化SPI

  200. * 入口參數:無

  201. * 出口參數:無

  202. * 說 明: SP1傳輸速率設置為fmaster/2=8M,主模式,

  203. * 范 例:無

  204. ******************************************************************************************************/

  205. void SPI_Init(void)

  206. {



  207.   CLK_PCKENR1_PCKEN14=1;//打開SPI1外設時鐘

  208.   

  209.   SPI1_CR1_SPE=0;//關閉SPI設備

  210.   //設置串行波特率

  211.   SPI1_CR1_BR=0;//fmaster/2=1M

  212.   

  213.   //配置CPOL和CPHA,定義數據傳輸和串行時鐘間的相位關系

  214.   SPI1_CR1_CPHA=0;//數據采樣從第一個時鐘邊沿開始

  215.   SPI1_CR1_CPOL=0;//空閑狀態(tài)時,SCK保持低電平  

  216.   

  217.    //定義幀格式

  218.   SPI1_CR1_LSBFIRST=0;//先發(fā)送MSB

  219.   

  220.     //使能從設備管理//主模式需通過改變SSI位 來控制SPI_SEL

  221.   SPI1_CR2_SSM=1;//禁止軟件從設備

  222.   SPI1_CR2_SSI=1;

  223.   

  224.   //主從設備模式選擇

  225.   SPI1_CR1_MSTR=1;//作為主設備

  226.   

  227.   SPI1_CR2_RXONLY=0;//全雙工

  228.   SPI1_CR2_BDM=0;//選擇單向數據模式

  229.   

  230.   SPI1_CR1_SPE=1;//開啟SPI設備

  231.   

  232. }

  233. ///******************************************************************** **********************************

  234. //*  功  能   :NOKIA5110端口初始化函數

  235. //*  入口參數 :無

  236. //*  出口參數 :無

  237. //*  說  明   :對NOKIA5110用到的GPIO進行初始化

  238. //*  范  例   :無

  239. //******************************************************************************************************/

  240. void NOKIA5110_GPIO_Init(void)

  241. {

  242.    PD_DDR_DDR4 =1;//SEL設置為輸出

  243.    PD_DDR_DDR5 =1;//DC設置為輸出

  244.    PB_DDR_DDR4 =1;//RST設置為輸出

  245.    PB_DDR_DDR5 =1;//SCK設置為輸出

  246.    PB_DDR_DDR6 =1;//SIMO設置為輸出

  247.      

  248.    PD_CR1_C14 =1;//SEL設置為推挽輸出

  249.    PD_CR1_C15 =1;//DC設置為推挽輸出

  250.    PB_CR1_C14 =1;//RST設置為推挽輸出

  251.    PB_CR1_C15 =1;//SCK設置為推挽輸出

  252.    PB_CR1_C16 =1;//SIMO設置為推挽輸出


  253.    PD_CR2_C24 =1;//SEL的IO輸出速率為10MHz

  254.    PD_CR2_C25 =1;//DC的IO輸出速率為10MHz

  255.    PB_CR2_C24 =1;//RST的IO輸出速率為10MHz

  256.    PB_CR2_C25 =1;//SCK的IO輸出速率為10MHz

  257.    PB_CR2_C26 =1;//SIMO的IO輸出速率為10MHz

  258.    

  259.    PD_ODR_ODR4=1;//SEL輸出高電平

  260.    PB_ODR_ODR4=1;//RST輸出高電平

  261.    PB_ODR_ODR5=0;//SCK輸出低電平

  262. }

  263. ///******************************************************************** **********************************

  264. //*  功  能   :設置液晶屏顯示坐標

  265. //*  入口參數   :x:0<=x<=83     y:0<=y<=5

  266. //*  出口參數   : 0:寫字符成功     1:x坐標越界      2:y坐標越界

  267. //*  說  明   :無

  268. //*  范  例   :無

  269. //******************************************************************************************************/

  270. uint8_t NOKIA5110_Set_XY_Coordinate(uint8_t x,uint8_t y)

  271. {

  272.     //檢查輸入的x和y坐標是否越界

  273.     if(x>83)return 1;

  274.     if(y>5) return 2;

  275.     NOKIA5110_Write_CMD(0x40+y);//sets Y-address of RAM 0<=Y<=5//BANK0~BANK5

  276.     NOKIA5110_Write_CMD(0x80+x);//sets X-address part of RAM 0<=X<=83 //

  277.     return 0;

  278. }

  279. ///******************************************************************** **********************************

  280. //*  功  能   :液晶屏刷屏

  281. //*  入口參數   :無

  282. //*  出口參數   :無

  283. //*  說  明   :無

  284. //*  范  例   :無

  285. //******************************************************************************************************/

  286. uint8_t NOKIA5110_Clean(void)

  287. {

  288.     uint16_t i;

  289.     if(NOKIA5110_Set_XY_Coordinate(0,0))

  290.     {

  291.         return 1;//如果進入這個函數,說明設置坐標函數返回的是非0值,坐標值越界

  292.     }

  293.     for(i=0;i<504;i++)

  294.     {

  295.         NOKIA5110_Write_DAT(0xFF);

  296.         delay_100ms();

  297.     }

  298.     for(i=0;i<504;i++)

  299.     {

  300.         NOKIA5110_Write_DAT(0x00);

  301.         delay_100ms();

  302.     }

  303.     for(i=0;i<504;i++)

  304.     {

  305.         NOKIA5110_Write_DAT(0xFF);

  306.         delay_100ms();

  307.     }

  308.         for(i=0;i<504;i++)

  309.     {

  310.         NOKIA5110_Write_DAT(0x00);

  311.         delay_100ms();

  312.     }

  313. //    NOKIA5110_Write_CMD(0x40+0x05);

  314. //    for(i=0;i<83;i++)

  315. //    {

  316. //        NOKIA5110_Write_DAT(0xFF);

  317. //    }

  318.     return 0;

  319. }


  320. ///******************************************************************** **********************************

  321. //*  功  能        :顯示字符串,ASCII碼

  322. //*  入口參數        :無

  323. //*  出口參數        : 0:寫字串成功     1:坐標越界      2:字符越界

  324. //*  說  明        :注意,本函數是V=0,水平尋址方式,請更改5110配置

  325. //*  范  例        :無

  326. //******************************************************************************************************/

  327. uint8_t NOKIA5110_Display_String(uint8_t x,uint8_t y,uint8_t *s)

  328. {

  329.     uint8_t j=0,temp=0;

  330.     if(NOKIA5110_Set_XY_Coordinate(x,y))

  331.     {

  332.         return 1;//如果進入這個函數,說明設置坐標函數返回的是非0值,坐標值越界

  333.     }

  334.     while(*s != '\0')

  335.     {

  336.         temp=*s-32;

  337.         for(j=0;j<6;j++)

  338.         {

  339.             NOKIA5110_Write_DAT(font6x8[temp][j]);

  340.         }

  341.         s++;

  342.     }

  343.     return 0;

  344. }

  345. ///******************************************************************** **********************************

  346. //*  功  能   :顯示一行漢字

  347. //*  入口參數   :無

  348. //*  出口參數   : 0:寫字串成功     1:坐標越界      2:字符越界

  349. //*  說  明   :注意,本函數是V=1,垂直尋址方式,暫時不需要更改

  350. //*  范  例   :無

  351. //******************************************************************************************************/

  352. uint8_t NOKIA5110_Display_SimplifiedChinese(uint8_t x,uint8_t y)

  353. {

  354.     static uint8_t i=0,j=0,cnts=0;

  355.     static uint32_t len=0;

  356.     len=sizeof(Hzk)/24;

  357.     for(i=0;i<len;i++)

  358.     {

  359.                   for(;j<len*12;j++)

  360.       {

  361.                           NOKIA5110_Set_XY_Coordinate(j,0);

  362.         NOKIA5110_Write_DAT(Hzk[i][cnts++]);

  363.                           NOKIA5110_Write_DAT(Hzk[i][cnts++]);

  364.       }

  365.       asm("nop");

  366.     }

  367.     return 0;

  368. }

  369. ///******************************************************************************************************

  370. //*功  能  :NOKIA5110初始化配置函數

  371. //*入口參數:無

  372. //*出口參數:無

  373. //*說  明  :無

  374. //*范  例  :無

  375. //******************************************************************************************************/

  376. void NOKIA5110_Init(void)

  377. {

  378.     NOKIA5110_GPIO_Init();//初始化NOKIA5110使用到的GPIO

  379.     RST_L;

  380.     delay_100ms();

  381.     RST_H;

  382.     NOKIA5110_Write_CMD(0x20+0x01);// 使用擴展指令

  383.     NOKIA5110_Write_CMD(0x10+0x03);//1/48 bis這個數據不可更改,由硬件段數決定

  384.     NOKIA5110_Write_CMD(0x80+0x64);//設置的電荷泵,電壓越高,顯示越清晰,也可能太清晰了看不清字符


  385.     NOKIA5110_Write_CMD(0x20+0x02);//使用基本指令

  386.     NOKIA5110_Write_CMD(0x08+0x04);//正常顯示模式

  387.     NOKIA5110_Clean();

  388.     NOKIA5110_Display_SimplifiedChinese(0,0);

  389. //    NOKIA5110_Display_String(0,0,"***hello!***");

  390. }

  391. void main(void)

  392. {

  393.   SPI_Init();

  394.   NOKIA5110_Init();

  395. //  asm("rim");               //enable interrupts

  396.   while(1)

  397.   {

  398.     asm("wfi");

  399.   }

  400. }

復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲午夜精品视频 | 97精品国产手机 | 一道本在线 | 国产精品夜间视频香蕉 | 日本成人二区 | 中文字幕在线观 | 亚洲精品视频三区 | 91影院在线观看 | 成人一区二区视频 | 国产一区二区自拍 | 五月天婷婷久久 | 国产在线一区二区三区 | 爱爱免费视频 | a欧美 | 久久99深爱久久99精品 | 久久国产精品精品国产色婷婷 | www日| 国产精品免费在线 | 欧美精品一区二区三区在线 | 美女高潮网站 | 天堂av免费观看 | 颜色网站在线观看 | 日本一道本视频 | 国产日韩91 | 久草网址 | 在线免费国产 | 国产高清视频 | 日韩二 | 亚洲国产精品视频 | 999精品在线| 欧美无乱码久久久免费午夜一区 | 亚洲激情在线视频 | 特级毛片爽www免费版 | 欧美色图综合网 | 99精品亚洲国产精品久久不卡 | 一区二区久久 | 久久久91精品国产一区二区精品 | 久久精品亚洲国产 | 久久在线 | 日本三级电影在线免费观看 | 欧美日韩亚 |