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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32 mcu控制LCD12864顯示不正確

[復制鏈接]
跳轉到指定樓層
樓主
ID:424820 發(fā)表于 2019-1-17 20:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這個代碼我用它顯示是顯示出來了,但是顯示的字和我打的字完全對不上,到底是代碼的問題還是我連線的問題,還是這個LCD12864有問題啊,搞不明白。


單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include"12864.h"
  3. #include"delay.h"        
  4. /************************************************************************************************
  5. //FILE:液晶12864驅動程序
  6. //VERS:1.0
  7. ************************************************************************************************/
  8. /************************************************************************************************
  9. @f_name: void LCD12864_InitPort(void)
  10. @brief:         初始化硬件端口配置
  11. @param:         None
  12. @return: None
  13. ************************************************************************************************/
  14. void LCD12864_InitPort(void)
  15. {
  16.         GPIO_InitTypeDef  GPIO_InitStructure;        //定義結構體               
  17.         
  18.         RCC_APB2PeriphClockCmd(GPIOCLK|RCC_APB2Periph_AFIO, ENABLE);  //使能功能復用IO時鐘,不開啟復用時鐘不能顯示
  19.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);    //把調(diào)試設置普通IO口

  20.         GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_DAT;                //數(shù)據(jù)口配置成開漏輸出模式,此模式下讀輸入寄存器的值得到IO口狀態(tài)
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   //開漏輸出
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  23.         GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);    //IO口初始化函數(shù)(使能上述配置)

  24.         GPIO_InitStructure.GPIO_Pin  = LCD_GPIO_CMD;
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽輸出   
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27.         GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);

  28.         GPIO_Init(LCD12864_GPIO , &GPIO_InitStructure);          //初始化IO口配置
  29.         GPIO_Write(LCD12864_GPIO ,0xffff);         
  30. }
  31. /************************************************************************************************
  32. @f_name: void NOP(void)
  33. @brief:         延時函數(shù)
  34. @param:         None
  35. @return: None
  36. ************************************************************************************************/
  37. void NOP(void)
  38. { u8 i;        for(i=0; i<100; i++); }
  39. /************************************************************************************************
  40. @f_name: u8 LCD12864_busy(void)
  41. @brief:         檢測忙狀態(tài)
  42. @param:         None
  43. @return: None
  44. ************************************************************************************************/
  45. u8 LCD12864_busy(void)
  46. {
  47.         u8 x;
  48.         LCD_RS(0);
  49.         LCD_RW(1);  
  50.         LCD_EN(1);
  51.         NOP();
  52.         NOP();
  53.         x=Text_Busy;
  54.         LCD_EN(0);
  55.         return x;
  56. }
  57. /************************************************************************************************
  58. @f_name: void LCD12684_Wcmd(u8 dat)
  59. @brief:         寫指令
  60. @param:         u8 dat  輸入指令
  61. @return: None
  62. ************************************************************************************************/
  63. void LCD12684_Wcmd(u8 dat)
  64. {
  65.         while(LCD12864_busy()); //忙檢測
  66.         LCD_RS(0);      
  67.         LCD_RW(0);
  68.         LCD_EN(0);
  69.         NOP();
  70.         NOP();
  71.         LCD_WriteData(dat);         
  72.         NOP();
  73.         NOP();
  74.         LCD_EN(1);
  75.         NOP();
  76.         NOP();
  77.         LCD_EN(0);
  78. }
  79. /************************************************************************************************
  80. @f_name: void LCD12684_Wcmd(u8 dat)
  81. @brief:         寫數(shù)據(jù)
  82. @param:         u8 dat 輸入數(shù)據(jù)
  83. @return: None
  84. ************************************************************************************************/
  85. void LCD12684_Wdat(u8 dat)
  86. {
  87.         while(LCD12864_busy()); //忙檢測
  88.         LCD_RS(1);      
  89.         LCD_RW(0);
  90.         LCD_EN(0);
  91.         NOP();
  92.         NOP();
  93.         LCD_WriteData(dat);         
  94.         NOP();
  95.         NOP();
  96.         LCD_EN(1);
  97.         NOP();
  98.         NOP();
  99.         LCD_EN(0);
  100. }
  101. /************************************************************************************************
  102. @f_name: void LCD12864_Init(void)
  103. @brief:         液晶初始化
  104. @param:         None
  105. @return: None
  106. ************************************************************************************************/
  107. void LCD12864_Init(void)
  108. {        
  109.         LCD_PSB(1);   //并口方式   
  110.         LCD_RST(0);   //液晶復位        低電平有效
  111.     delay_ms(3);                  
  112.     LCD_RST(1);          //置高電平等待復位
  113.     delay_ms(3);

  114.         LCD12684_Wcmd(0x34);    //擴充指令操作
  115.     delay_ms(5);
  116.     LCD12684_Wcmd(0x30);    //基本指令操作
  117.     delay_ms(5);
  118.     LCD12684_Wcmd(0x0c);   //顯示開,關光標
  119.     delay_ms(5);
  120.     LCD12684_Wcmd(0x01);   //清除LCD的顯示內(nèi)容
  121.     delay_ms(5);
  122. }
  123. /************************************************************************************************
  124. @f_name: void LCD12864_Clr(void)
  125. @brief:         清屏
  126. @param:         None
  127. @return: None
  128. ************************************************************************************************/
  129. void LCD12864_Clr(void)
  130. {
  131.         LCD12684_Wcmd(0x34);   //擴充指令操作        “繪圖”
  132.     delay_ms(5);
  133.     LCD12684_Wcmd(0x30);    //基本指令操作
  134.     delay_ms(5);
  135.         LCD12684_Wcmd(0x01);   //清屏
  136.     delay_ms(5);
  137. }
  138. /************************************************************************************************
  139. @f_name: void LCD12864_Pos(u8 x,u8 y)
  140. @brief:         設置顯示位置
  141. @param:         u8 x:X軸    u8 y:Y軸  
  142. @return: None
  143. ************************************************************************************************/
  144. void LCD12864_Pos(u8 x,u8 y)
  145. {
  146.         u8  pos;
  147.         if (x==1)                   {x=0x80;}         
  148.         else if (x==2)         {x=0x90;}        
  149.         else if (x==3)         {x=0x88;}         
  150.         else if (x==4)   {x=0x98;}         
  151.         else x=0x80;
  152.         pos = x+y ;         
  153.         LCD12684_Wcmd(pos);  //顯示地址  
  154. }
  155. /************************************************************************************************
  156. @f_name: void LCD12864_PhotoDis(u8 *bmp)
  157. @brief:         顯示圖形
  158. @param:         u8 *bmp 圖形數(shù)組
  159. @return: None
  160. ************************************************************************************************/
  161. void LCD12864_PhotoDis(u8 *bmp)
  162. {
  163.         u8 i,j;
  164.         LCD12684_Wcmd(0x34); //關閉圖形顯示
  165.         
  166.         for(i=0;i<32;i++)
  167.         {
  168.                 LCD12684_Wcmd(0x80+i);  //先寫入水平坐標值
  169.                 LCD12684_Wcmd(0x80);      //寫入垂直坐標值
  170.                 for(j=0;j<16;j++)                     //再寫入兩個8位元的數(shù)據(jù)   
  171.                 LCD12684_Wdat(*bmp++);     
  172.                 delay_ms(1);
  173.         }
  174.         
  175.         for(i=0;i<32;i++)
  176.         {
  177.                 LCD12684_Wcmd(0x80+i);
  178.                 LCD12684_Wcmd(0x88);
  179.                 for(j=0;j<16;j++)         
  180.                 LCD12684_Wdat(*bmp++);   
  181.                 delay_ms(1);
  182.         }
  183.         LCD12684_Wcmd(0x36);       //寫完數(shù)據(jù),開圖形顯示         
  184. }
  185. /************************************************************************************************
  186. @f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p)
  187. @brief:         顯示字符串
  188. @param:         u8 *bmp 圖形數(shù)組
  189. @return: None
  190. ************************************************************************************************/
  191. void LCD_ShowString(u8 x,u8 y,const u8 *p)
  192. {
  193.         u8 temp;
  194.         if(x>4) {x=1;}
  195.         if(y>4) {y=0;}
  196.         LCD12864_Pos(x,y);
  197.         temp=*p;
  198.         while(temp!='\0')
  199.         {
  200.                 LCD12684_Wdat(temp);
  201.                 temp=*(++p);
  202.         }
  203. }
復制代碼

所有資料51hei提供下載:
12864顯示成功.7z (188.48 KB, 下載次數(shù): 25)


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

使用道具 舉報

沙發(fā)
ID:270498 發(fā)表于 2019-2-1 15:43 | 只看該作者
我不知道對不對哈你那個讀忙函數(shù),不需要轉換gpio口模式嗎?
回復

使用道具 舉報

板凳
ID:270498 發(fā)表于 2019-2-1 15:48 | 只看該作者
本帖最后由 iammingge 于 2019-2-2 12:49 編輯

我覺得你的讀忙函數(shù)有點問題你試試去掉如何,因為我覺得檢測讀忙信號應該轉換gpio口模式的
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 最新日韩在线视频 | 国产激情在线 | 国产一区二区在线91 | 成人a视频在线观看 | 免费在线毛片 | 亚洲高清视频一区 | 国产丝袜一区二区三区免费视频 | 91精品国产欧美一区二区成人 | 日韩免费高清视频 | 欧美日韩在线综合 | 欧美a v在线 | 国产欧美一级二级三级在线视频 | 天天操天天射综合网 | 在线视频91 | 99在线资源 | 日韩视频在线观看中文字幕 | 免费国产精品久久久久久 | 久久国产视频一区 | 国产黄色电影 | 北条麻妃一区二区三区在线视频 | 亚洲婷婷六月天 | 欧美一区二区三区视频在线播放 | 国产一区二区在线免费观看 | 不卡在线视频 | 在线观看免费av片 | 免费黄色成人 | 亚洲三级av | 亚洲五码在线 | 艹逼网| 亚洲精品综合一区二区 | 亚洲国产成人精品久久久国产成人一区 | 亚洲大片在线观看 | 五月激情婷婷在线 | 欧美一级片在线看 | 久久爱一区 | 91免费看片| 成人日韩av | 久久一区二区免费视频 | 91精品国产综合久久福利软件 | 国产高清在线精品 | av毛片在线免费观看 |