標題: 求助萬能的網(wǎng)友,單片機+12864不能顯示 [打印本頁]

作者: 藍琪    時間: 2018-12-22 18:08
標題: 求助萬能的網(wǎng)友,單片機+12864不能顯示
按照開發(fā)板做個帶12864的最小系統(tǒng)板,接口和開發(fā)板一樣,可是燒錄一樣的程序就是顯示不了,求點解決方案

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <stdlib.h>        
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. /* 端口定義*/
  7. #define LCD_data  P0            //數(shù)據(jù)口
  8. sbit LCD_RS  =  P2^6;            //寄存器選擇輸入
  9. sbit LCD_RW  =  P2^5;            //液晶讀/寫控制
  10. sbit LCD_EN  =  P2^7;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            //液晶使能控制
  11. sbit LCD_PSB =  P3^4;            //串/并方式控制
  12. sbit LCD_RST =  P3^2;

  13. uchar code dis1[] = {"  123456  "};
  14. uchar code dis2[] = {"    0123456789 "};

  15. void delay_1ms(uint x)
  16. {
  17. uint i,j;
  18. for(j=0;j<x;j++)  
  19.         for(i=0;i<110;i++);
  20. }

  21. /*******************************************************************/
  22. /*                                                                 */
  23. /*寫指令數(shù)據(jù)到LCD                                                  */
  24. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  25. /*                                                                 */
  26. /*******************************************************************/
  27. void write_cmd(uchar cmd)
  28. {                          
  29.     LCD_RS = 0;
  30.     LCD_RW = 0;
  31.     LCD_EN = 0;

  32.         P0 =cmd;
  33.         delay_1ms(5);
  34.     LCD_EN = 1;
  35.         delay_1ms(5);
  36.     LCD_EN = 0;  
  37. }

  38. /*******************************************************************/
  39. /*                                                                 */
  40. /*寫顯示數(shù)據(jù)到LCD                                                  */
  41. /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。                               */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void write_dat(uchar dat)
  45. {                          
  46.     LCD_RS = 1;
  47.     LCD_RW = 0;
  48.     LCD_EN = 0;

  49.         P0=dat;
  50.         delay_1ms(5);
  51.     LCD_EN = 1;
  52.         delay_1ms(5);
  53.     LCD_EN = 0;  
  54. }

  55. /*********************************************************/
  56. /*                                                       */
  57. /* 設定顯示位置                                          */
  58. /*                                                       */
  59. /*********************************************************/
  60. void lcd_pos(uchar X,uchar Y)
  61. {                          
  62.    uchar  pos;
  63.    if (X==0)
  64.      {X=0x80;}
  65.    else if (X==1)
  66.      {X=0x90;}
  67.    else if (X==2)
  68.      {X=0x88;}
  69.    else if (X==3)
  70.      {X=0x98;}
  71.    pos = X+Y ;  
  72.    write_cmd(pos);     //顯示地址
  73. }

  74. /*******************************************************************/
  75. /*                                                                 */
  76. /*  LCD初始化設定                                                  */
  77. /*                                                                 */
  78. /*******************************************************************/
  79. void lcd_init()
  80. {
  81.     LCD_PSB = 1;         //并口方式  
  82.     write_cmd(0x30);      //基本指令操作
  83.     delay_1ms(5);
  84.     write_cmd(0x0C);      //顯示開,關(guān)光標
  85.     delay_1ms(5);
  86.     write_cmd(0x01);      //清除LCD的顯示內(nèi)容
  87.     delay_1ms(5);
  88. }

  89. /*********************************************************/
  90. /*                                                                                                                 */
  91. /* 主程序                                                                                    */
  92. /*                                                       */
  93. /*********************************************************/
  94. main()
  95. {
  96.     uchar i,j;

  97.     delay_1ms(10);                 //延時
  98.     lcd_init();                 //初始化LCD
  99.         
  100.          
  101.     lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
  102.     i = 0;
  103.          while(dis1[i]!= '\0')
  104.     {
  105.        write_dat(dis1[i]);      //顯示字符
  106.          i++;
  107.     }

  108.     lcd_pos(1,0);  
  109.         j=0;
  110.         
  111.                    while(dis2[j]!= '\0')
  112.     {
  113.        write_dat(dis2[j]);      //顯示字符
  114.          j++;
  115.     }
  116.         while(1);



  117. }
復制代碼



作者: 海盜船    時間: 2018-12-22 20:22
對比度沒有調(diào)節(jié)好
作者: 這一生只為你    時間: 2018-12-23 07:51
硬件問題居多
作者: 藍琪    時間: 2018-12-23 08:25
海盜船 發(fā)表于 2018-12-22 20:22
對比度沒有調(diào)節(jié)好

調(diào)了,也顯示不了
作者: 藍琪    時間: 2018-12-23 09:54
這一生只為你 發(fā)表于 2018-12-23 07:51
硬件問題居多

換了個串行程序可以顯示了,可是并行的為啥不行呢
作者: yaoji123    時間: 2018-12-23 10:08
對比度調(diào)節(jié)不正確,調(diào)節(jié)R7,另連接也檢查一下。
作者: yaoji123    時間: 2018-12-23 10:14
寫命令、數(shù)據(jù)前檢查LCD忙,寫命令、數(shù)據(jù)中設好RS等加一點延時NOP();
作者: SINANDXKY    時間: 2018-12-23 11:50
兩個芯片的型號是否完全一樣,晶振是否一樣,如果不一樣那就該延時,如果一樣那上網(wǎng)找12864硬件的接線資料

作者: 藍琪    時間: 2018-12-23 12:45
yaoji123 發(fā)表于 2018-12-23 10:08
對比度調(diào)節(jié)不正確,調(diào)節(jié)R7,另連接也檢查一下。

可以調(diào),線也沒錯,但是換個串行程序又可以顯示
作者: yangcong1314    時間: 2018-12-23 14:22
兩個芯片的型號是不是一樣的?晶振是不是一樣的?

作者: 藍琪    時間: 2018-12-23 15:12
yangcong1314 發(fā)表于 2018-12-23 14:22
兩個芯片的型號是不是一樣的?晶振是不是一樣的?

都一樣
作者: 小貓貓愛吃魚    時間: 2018-12-24 14:28
你的 PSB 做控制了嗎
作者: robinsonlin    時間: 2018-12-24 19:55
我也和你一樣碰到了同樣的情況, 但是,我的現(xiàn)象是恰恰相反,自己做的板子上有顯示,但有時會花屏,開發(fā)板上就完全沒有顯示,就是兩條橫崗。持續(xù)關(guān)注你,一起學習哈。
作者: 周超然    時間: 2018-12-24 22:26
你單獨做的話,自己焊接線,初始化部分需要延時,查下線別接錯了,應該沒有其它問題了
作者: xzyyglyt    時間: 2018-12-24 23:49
C語言還沒學會。如果要匯編的可以轉(zhuǎn)發(fā)一個給你試試。我測試過是可以的




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