標(biāo)題: stm32串行控制lcd12864液晶顯示器 程序 [打印本頁]

作者: 51hei大小    時(shí)間: 2016-6-17 12:53
標(biāo)題: stm32串行控制lcd12864液晶顯示器 程序
   手里有一塊12864的液晶顯示器,今天拿起來用stm32F103做了一個(gè)工程,方便大家參考,希望對(duì)大家能夠有用。PDF文檔僅共參考,我使用的LCD的核心與pdf上的有所不同。






  1. #include "12864.h"

  2. GPIO_InitTypeDef GPIO_InitStructure;
  3. void Delay(__IO uint32_t nCount)
  4. {
  5.    for(; nCount != 0; nCount--);
  6. }


  7. void send_dat(unsigned char dat)
  8. {
  9.     unsigned char i;
  10.         //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  11.     for(i=0;i<8;i++)
  12.     {
  13.                 if((dat&0x80)==0x80) SID_1;
  14.                 if((dat&0x80)==0x00) SID_0;
  15.         CLK_0;
  16.                 Delay(35);
  17.         CLK_1;
  18.                 dat<<=1;
  19.     }
  20. }


  21. unsigned char get_byte()
  22. {
  23.      unsigned char i,temp1=0,temp2=0;
  24.          //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     
  25.      for(i=0;i<8;i++)   
  26.      {   
  27.            temp1=temp1<<1;   
  28.            CLK_0;  
  29.                    Delay(25);
  30.            CLK_1;  
  31.                    Delay(20);              
  32.            CLK_0;   
  33.            if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3)) temp1++;   
  34.      }   
  35.      for(i=0;i<8;i++)   
  36.      {   
  37.            temp2=temp2<<1;   
  38.            CLK_0;  
  39.                    Delay(25);  
  40.            CLK_1;
  41.                    Delay(25);   
  42.            CLK_0;   
  43.            if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3))  temp2++;   
  44.      }   
  45.          //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  46.      return ((0xf0&temp1)+(0x0f&temp2));   
  47. }

  48. void check_busy()
  49. {
  50.     do
  51.     {
  52.         send_dat(0xfc);
  53.     }
  54.     while((get_byte()&0x8000)==0x8000);
  55. }

  56. void send_cmd(unsigned char cmd)
  57. {
  58.     check_busy();
  59.     send_dat(0xf8);    //
  60.     send_dat(cmd&0xf0); //
  61.     send_dat((cmd&0x0f)<<4); //
  62. }

  63. void write_char(unsigned char dat)
  64. {
  65.     check_busy();
  66.     send_dat(0xfa);//rw=0;rs=1
  67.     send_dat(dat&0xf0);
  68.     send_dat((dat&0x0f)<<4);
  69. }

  70. void lcd_clear()        //清除顯示
  71. {
  72.     send_cmd(0x01);
  73. }


  74. void lcd_pos(unsigned char y_add , unsigned char x_add)
  75. {
  76.     switch(y_add)
  77.     {
  78.         case 1:
  79.         send_cmd(0X80|x_add);break;
  80.         case 2:
  81.         send_cmd(0X90|x_add);break;
  82.         case 3:
  83.         send_cmd(0X88|x_add);break;
  84.         case 4:
  85.         send_cmd(0X98|x_add);break;
  86.         default:break;
  87.     }   
  88. }


  89. void lcd_wstr(unsigned char y_add , unsigned char x_add , unsigned char *str)    //
  90. {
  91.     unsigned char i;
  92.     lcd_pos(y_add , x_add);
  93.     for(i=0;str[i]!='\0';i++)
  94.     {
  95.         write_char(str[i]);  
  96.     }

  97. }

  98. void write_figer(unsigned char y_add , unsigned char x_add , unsigned int figer)//在任何位置寫數(shù)字
  99. {
  100.     unsigned char d[5],i,j;
  101.     lcd_pos(y_add , x_add);
  102.     d[4]=figer%10;
  103.     d[3]=figer%100/10;
  104.     d[2]=figer%1000/100;
  105.     d[1]=figer%10000/1000;
  106.     d[0]=figer/10000;
  107.     for(i=0;i<5;i++)
  108.     {
  109.         if(d[i]!=0)break;
  110.     }

  111.     if(i==5)i--;

  112.     if(i==4)send_dat(0x30);//數(shù)據(jù)裝完,準(zhǔn)備發(fā)送

  113.     for(j=i;j<5;j++)
  114.     {
  115.        send_dat(d[j]|0x30);//取得的數(shù)字加上0x30也即得到該數(shù)字的ASCII碼,再將該數(shù)字發(fā)送去顯示
  116.     }

  117. }

  118. void lcd_init()     //
  119. {  

  120.     Delay(0xfff);
  121.     send_cmd(0x30);
  122.     send_cmd(0x0C);//0000,1100 整體顯示,游標(biāo)off,游標(biāo)位置off
  123.     send_cmd(0x01);//0000,0001 清DDRAM
  124.     send_cmd(0x02);//0000,0010 DDRAM地址歸位
  125.     send_cmd(0x80);//1000,0000 設(shè)定DDRAM 7位地址000,0000到地址計(jì)數(shù)器A
  126. }


  127. /******************* (C) COPYRIGHT 2011 奮斗STM32 *****END OF FILE****/
復(fù)制代碼



12864.zip

1.16 MB, 下載次數(shù): 828, 下載積分: 黑幣 -5


作者: 1234567zz    時(shí)間: 2016-12-6 13:36
感謝分享
作者: jubaolun    時(shí)間: 2016-12-15 04:39
謝謝樓主分享,學(xué)習(xí)了。
作者: 還是看不穿    時(shí)間: 2016-12-15 08:10
謝謝分享
作者: wy123    時(shí)間: 2017-1-4 13:06
louzh1iahdahoiewjfiaelbf
作者: ahljj    時(shí)間: 2017-1-28 00:07
學(xué)習(xí)了
作者: fujiwarahotaru    時(shí)間: 2017-3-11 19:54
下來研究研究
作者: Jackieyuan    時(shí)間: 2017-4-16 14:15
我按照這個(gè)做不顯示

作者: x595506775    時(shí)間: 2017-4-18 13:27
感謝樓主分享
作者: Silird    時(shí)間: 2017-4-18 16:34
謝謝分享,學(xué)習(xí)了
作者: Silird    時(shí)間: 2017-4-18 16:35
謝謝分享,學(xué)習(xí)了
作者: cm7626    時(shí)間: 2017-4-24 08:09
是有些區(qū)別 感謝作者的奉獻(xiàn) 可以幫助很多初學(xué)者
作者: dainma    時(shí)間: 2017-5-9 19:03
值得擁有!
作者: dainma    時(shí)間: 2017-5-9 19:03
從串行時(shí)序圖中可以看出,發(fā)送一個(gè)指令需要三個(gè)字節(jié),第一個(gè)是0xf8或者0xfa這個(gè)根據(jù)你要發(fā)送的是命令還是數(shù)據(jù)而定,然后發(fā)送下一個(gè)數(shù)據(jù)的高四位和第四位,但是數(shù)據(jù)都是在高四位上面,用51的話我們要分三次發(fā)送,但是32的話一個(gè)字節(jié)可以是32位的/所以我們一次就能完成,這也是為什么下面的i<24的原因因?yàn)樽詈蟮?位沒有用,
作者: 我要上自習(xí)    時(shí)間: 2017-5-10 23:37
謝謝分享,學(xué)習(xí)了
作者: 程序猿    時(shí)間: 2017-5-11 21:27
謝謝樓主分享,學(xué)習(xí)了。
作者: 離譜    時(shí)間: 2017-7-17 17:36
樓主,有硬件原理圖嗎
作者: JackieLLX    時(shí)間: 2017-7-18 16:09
還ok,謝謝分享
作者: CNT    時(shí)間: 2017-7-28 14:26
LCD12864 DB0-DB7是接的哪個(gè)Io口
作者: tjstm    時(shí)間: 2017-8-31 11:23
謝謝分享
作者: 北海咸魚    時(shí)間: 2017-9-3 15:33
謝謝分享,一生平安
作者: 00XIAOXU00    時(shí)間: 2017-9-12 16:27
好東西啊,可惜下載幣不夠
作者: 19931124    時(shí)間: 2017-9-12 17:02
不錯(cuò),看看
作者: ly2331    時(shí)間: 2017-10-19 16:53
謝謝樓主的分享
作者: mjkami    時(shí)間: 2017-12-17 09:33
贊一個(gè),順便那個(gè)資料
作者: tongaoao    時(shí)間: 2018-1-11 15:05
請(qǐng)問該模式是串口版硬件配置的程序嗎?   PSB端口沒用到的那個(gè)
作者: sdycytt    時(shí)間: 2018-3-7 15:11
看看怎么樣?
作者: 殘夢重生    時(shí)間: 2018-3-22 10:24
很給力
作者: 1242003136    時(shí)間: 2018-4-3 00:39
加油,沒有錢下載啊
作者: 1242003136    時(shí)間: 2018-4-3 00:40
深夜頂帖,望開源
作者: 紋身獵人    時(shí)間: 2018-6-14 08:45
好東西,幫頂,看看參考
作者: 木亦天凡    時(shí)間: 2018-7-15 14:15
謝謝樓主分享資源

作者: XIUAOJEI    時(shí)間: 2018-7-18 23:26
tm32串行控制lcd12864液晶顯示器
作者: myn353637    時(shí)間: 2018-7-20 11:44
之前用51做過應(yīng)用12864點(diǎn)陣液晶屏的東西,現(xiàn)在試試用STM32來
作者: hahaqinyou    時(shí)間: 2018-7-22 00:26
學(xué)習(xí)了 謝樓主
作者: wql2010    時(shí)間: 2018-7-28 11:23
黑幣扣了,彈出來,服務(wù)器故障,重新點(diǎn),沒黑幣了,這是咋回事?
作者: Yoda    時(shí)間: 2018-7-30 09:02
謝謝lz分享,我一直就沒有搞明白液晶屏咋驅(qū)動(dòng)
作者: scholar_C    時(shí)間: 2018-8-6 15:12
想下載來學(xué)習(xí)一下,,黑幣不夠
作者: prettytank    時(shí)間: 2018-8-20 18:38
這個(gè)似乎是目前為止能找到的最好的12864串行驅(qū)動(dòng)程序了
作者: 星空boy    時(shí)間: 2018-8-27 20:44
謝謝分享
作者: jiangkeqin_sy    時(shí)間: 2018-9-1 13:38
這個(gè)似乎是目前為止能找到的最好的12864串行驅(qū)動(dòng)程序了
作者: chenbinghf    時(shí)間: 2018-9-3 21:05
不錯(cuò)的資源,贊一個(gè)
作者: jxomzz    時(shí)間: 2018-9-14 10:10
贊一個(gè)
作者: jxomzz    時(shí)間: 2018-9-14 10:11

謝謝樓主分享資源
作者: 惺惺相惜    時(shí)間: 2018-12-3 14:36

謝謝樓主分享,學(xué)習(xí)了。
作者: lygxnb    時(shí)間: 2018-12-5 19:15
謝謝分享謝謝分享
作者: gnoh    時(shí)間: 2019-4-20 09:05
贊贊贊
作者: 打打    時(shí)間: 2019-4-21 11:14
贊一個(gè)
作者: 51hei2004303    時(shí)間: 2019-5-11 15:53
完全可以用,用的是串行通信
作者: wzhf27    時(shí)間: 2019-5-12 17:33
謝謝,真需要
作者: wzhf27    時(shí)間: 2019-5-12 17:33
        很給力!
作者: wzhf27    時(shí)間: 2019-5-12 18:07
stm32串行控制lcd12864液晶顯示好東西正需要
作者: 巔峰小寶    時(shí)間: 2019-5-20 22:18
真的太棒了!
作者: 巔峰小寶    時(shí)間: 2019-5-23 19:27
CNT 發(fā)表于 2017-7-28 14:26
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

怎么接線啊
作者: miaoxiansheng    時(shí)間: 2019-6-25 18:57
tongaoao 發(fā)表于 2018-1-11 15:05
請(qǐng)問該模式是串口版硬件配置的程序嗎?   PSB端口沒用到的那個(gè)

如果使用的是串行顯示程序,PSB端口可以硬件置零,也就是說把PSB端口接地
作者: boyangjun    時(shí)間: 2019-7-31 10:47
很棒,謝謝
作者: boyangjun    時(shí)間: 2019-7-31 10:47
謝謝分享
作者: hfsdage    時(shí)間: 2019-8-7 16:30
下載來學(xué)習(xí)一下
作者: 1159574441    時(shí)間: 2019-8-9 18:28
可以顯示數(shù)字嘛,不是字符型的那種
作者: robin97172    時(shí)間: 2019-9-10 14:50
謝謝樓主
作者: liding12356    時(shí)間: 2019-9-11 17:15
好棒啊,又可以好好學(xué)習(xí)了

作者: prettytank    時(shí)間: 2019-9-11 23:59
感謝分享,收藏以備不時(shí)之需
作者: qinxz1414    時(shí)間: 2019-10-19 15:57
準(zhǔn)備下載試試
作者: lglg1233    時(shí)間: 2019-10-29 21:12
黑幣是扣了,但是不能用
作者: q89181894    時(shí)間: 2019-11-29 18:04
if(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_3)) temp1++;  為什么要讀這個(gè)口的值啊,要讀那么E3接哪里
作者: 沐夕    時(shí)間: 2020-7-1 09:49
用不了的需要查看自己的屏幕 是什么控制器的,我的ST7565R控制器的也用不了這個(gè),不同控制器的命令字節(jié)是不同的
作者: QiuAn    時(shí)間: 2021-6-29 20:39
我的延遲太大了
作者: 小飛俠的    時(shí)間: 2023-6-27 17:30
write_figer(unsigned char y_add , unsigned char x_add , unsigned int figer);為什么這個(gè)函數(shù)在主程序中調(diào)用不顯示數(shù)字,想用這個(gè)函數(shù)顯示變化的溫度數(shù)值,溫度數(shù)值已經(jīng)測得,在OLED上可顯示,想用LCD12864顯示,不能顯示,有知道原因的嗎?謝謝!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1