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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4752|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

STC8H單片機驅(qū)動ST7565R 12864 LCD的測試代碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:912806 發(fā)表于 2022-1-4 23:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 michaelchain 于 2022-1-4 23:51 編輯

在這里放一份, 方便測試屏幕的時候用, 這樣不需要臨時找
pin腳定義



代碼看附件, 項目只有一個main.c, 需要修改的是這部分, 因為使用GPIO模擬的SPI, 所以基本上可以換成任意IO口
  1. sbit     CS=P3^5;
  2. sbit     RESET=P3^7;
  3. sbit     CD=P3^6;
  4. sbit     SCL=P3^2;
  5. sbit     SDA=P3^4;
復(fù)制代碼

部分代碼
  1. #include <reg51.h>

  2. sfr P3M0    = 0xB2;
  3. sfr P3M1    = 0xB1;
  4. sfr P_SW1   = 0xA2;

  5. sbit     CS=P3^5;
  6. sbit     RESET=P3^7;
  7. sbit     CD=P3^6;
  8. sbit     SCL=P3^2;
  9. sbit     SDA=P3^4;

  10. sbit     KEY_PRESS=P1^3;
  11. sbit     DEC_KEY=P1^2;
  12. sbit     EXIT_KEY=P1^1;

  13. /**********************************/
  14. /*      Parameter Define          */
  15. /**********************************/
  16. #define  CONTRAST=0x0C
  17. #define  DATA0=0x40
  18. #define  DATA1=0x41
  19. unsigned char  page_width;
  20. unsigned char  seg_width;

  21. unsigned char Buf_1,Buf_2,Buf_3,conversion;
  22. unsigned char *char_point;
  23. int  contrast;
  24. /**********************************/
  25. /*      Picture data              */
  26. /**********************************/
  27. unsigned char code row_table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

  28. unsigned char code char_0[]={62,65,65,62,0 };
  29. unsigned char code char_1[]={0,66,127,64,0 };
  30. unsigned char code char_2[]={98,81,73,70,0};
  31. unsigned char code char_3[]={34,73,73,54,0 };
  32. unsigned char code char_4[]={28,18,127,16,0 };
  33. unsigned char code char_5[]={39,69,69,57,0};
  34. unsigned char code char_6[]={62,73,73,50,0};
  35. unsigned char code char_7[]={1,121,7,1,0};
  36. unsigned char code char_8[]={54,73,73,54,0 };
  37. unsigned char code char_9[]={6,73,73,62,0};

  38. /**********************************/
  39. /*      Time Delay                */
  40. /**********************************/
  41. void Delay(long i)
  42. {
  43.      while(i!=0)
  44.         {
  45.               i--;
  46.          }
  47. }


  48. /**********************************/
  49. /*      Transfer Commmand         */
  50. /**********************************/
  51. void Write_Command(unsigned char command)
  52. {
  53.      int i,j;
  54.      j=0x80;
  55.      CS=0;
  56.      CD=0;
  57.      for(i=0;i<8;i++)
  58.      {
  59.         SCL=0;
  60.         if(command&j)SDA=1;
  61.         else SDA=0;
  62.         SCL=1;
  63.         j=j>>1;
  64.      }
  65.      CS=1;
  66. }

  67. /**********************************/
  68. /*      Transfer Data             */
  69. /**********************************/
  70. void Write_Data(unsigned char data1)
  71. {
  72.      int i,j;
  73.      j=0x80;
  74.      CS=0;
  75.      CD=1;
  76.      for(i=0;i<8;i++)
  77.      {
  78.         SCL=0;
  79.         if(data1&j)SDA=1;
  80.         else SDA=0;
  81.         SCL=1;
  82.         j=j>>1;
  83.      }
  84.      CS=1;
  85. }
  86. //-------------------------------------------------------------------
  87. void Set_column_addr(unsigned char add)
  88. {
  89.      unsigned char temp;
  90.      temp=add;
  91.      add=add>>4;
  92.      add=add&0x0f;
  93.      add=add|0x10;
  94.      Write_Command(add);        //Set upper addr;
  95.      add=temp;
  96.      add=add&0x0F;
  97.      Write_Command(add);        //Set lower addr;
  98. }
  99. //-----------------------------------------------------------------
  100. void Set_row_addr(unsigned char row)
  101. {
  102.      row=row&0x0F;
  103.      row=row|0x0B0;
  104.      Write_Command(row);                //page addr set        
  105. }        
  106. /**********************************/
  107. /*      LCD Initial Code          */
  108. /**********************************/
  109. void Lcd_Set()
  110. {
  111.      RESET=0;
  112.      Delay(1000);
  113.      RESET=1;
  114.      Delay(1000);

  115.      Write_Command(0xE2);          //Software Reset
  116.      Write_Command(0xA2);          //Set Bias        0xA2
  117.      Write_Command(0xA0);          //Segment Direction Select ,bit0=1,reverse;=0,normal;
  118.      Write_Command(0xC8);          //Common Direction Select,bit3=1,reverse direction;=0,normal;     
  119.      Write_Command(0x2C);          //Power Control Set
  120.      Delay(10);
  121.      Write_Command(0x2E);          //Power Control Set
  122.      Delay(10);
  123.      Write_Command(0x2F);          //Power Control Set
  124.      Delay(10);
  125.      Write_Command(0x24);          //set ra/rb 0x25
  126.      Write_Command(0x81);          //Set Contrast     
  127.      Write_Command(0x2C);          //29
  128.      Write_Command(0xAF);          //Display ON
  129. }

  130. /**********************************/
  131. /*      Clear Display             */
  132. /**********************************/
  133. void Display_Clear(data1,data2)
  134. {
  135.     int i,j,m;
  136.     m=0xb0;
  137.     for(i=0;i<9;i++)
  138.     {
  139.         Write_Command(m);
  140.         Write_Command(0x10);
  141.         Write_Command(0x00);
  142.         for(j=0;j<66;j++)
  143.         {
  144.             Write_Data(data1);
  145.             Write_Data(data2);
  146.         }
  147.         m++;
  148.      }
  149. }

  150. void show_three_h_bar(int row)
  151. {
  152.     int i,page,row_data;
  153.     page=row/8;
  154.     i=row%8;
  155.     row_data=row_table[i];

  156.     Set_row_addr(page-1); //清除前一條橫線
  157.     Set_column_addr(00);
  158.     for(i=0;i<132;i++)
  159.     {
  160.         Write_Data(0x00);
  161.     }
  162.     Set_row_addr(page); //清除前一條橫線
  163.     Set_column_addr(00);
  164.     for(i=0;i<132;i++)
  165.     {
  166.         Write_Data(0x00);
  167.     }

  168.     Set_row_addr(page);
  169.     Set_column_addr(00);
  170.     for(i=0;i<132;i++)
  171.     {
  172.         Write_Data(row_data);
  173.     }
  174. }

  175. /**********************************/
  176. /*      three vertical bar         */
  177. /**********************************/
  178. void show_three_v_bar(int bar)
  179. {
  180.      int i;
  181.      Set_column_addr(bar-1);
  182.      for(i=0;i<9;i++)
  183.         {
  184.             Set_row_addr(i);
  185.             Set_column_addr(bar-1);
  186.             Write_Data(0x00);
  187.          }
  188.      Set_column_addr(bar);
  189.      for(i=0;i<9;i++)
  190.         {
  191.             Set_row_addr(i);
  192.             Set_column_addr(bar);
  193.             Write_Data(0x0ff);
  194.          }
  195.      for(i=0;i<9;i++)
  196.         {
  197.             Set_row_addr(i);
  198.             Set_column_addr(bar+1);
  199.             Write_Data(0x0ff);
  200.          }
  201.      for(i=0;i<9;i++)
  202.         {
  203.             Set_row_addr(i);
  204.             Set_column_addr(bar+2);
  205.             Write_Data(0x0ff);
  206.          }
  207. }

  208. /**********************************/
  209. /*      one vertical bar         */
  210. /**********************************/
  211. void show_one_v_bar(int bar)
  212. {
  213.      int i;
  214.      Set_column_addr(bar-1);
  215.      for(i=0;i<9;i++)
  216.         {
  217.             Set_row_addr(i);
  218.             Set_column_addr(bar-1);
  219.             Write_Data(0x00);
  220.          }
  221.      Set_column_addr(bar);
  222.      for(i=0;i<9;i++)
  223.         {
  224.             Set_row_addr(i);
  225.             Set_column_addr(bar);
  226.             Write_Data(0x0ff);
  227.          }
  228. }

  229. /**********************************/
  230. /*      one horizontal bar         */
  231. /**********************************/
  232. void show_one_h_bar(int row)
  233. {
  234.      int i,page,row_data;
  235.      page=row/8;
  236.      i=row%8;
  237.      row_data=row_table[i];
  238.      
  239.      Set_row_addr(page-1);                //清除前一條橫線
  240.      Set_column_addr(00);
  241.      for(i=0;i<132;i++)
  242.         {
  243.             Write_Data(0x00);
  244.          }
  245.      Set_row_addr(page);                //清除前一條橫線
  246.      Set_column_addr(00);
  247.      for(i=0;i<132;i++)
  248.         {
  249.             Write_Data(0x00);
  250.          }

  251.      Set_row_addr(page);
  252.      Set_column_addr(00);
  253.      for(i=0;i<132;i++)
  254.         {
  255.             Write_Data(row_data);
  256.          }
  257. }
  258. /**********************************/
  259. /*      Display Font              */
  260. /**********************************/
  261. void Display_Font(unsigned char page0,seg0,unsigned char *p)
  262. {
  263.      int i,m,n;
  264.      m=((seg0&0xf0)>>4)|0x10;
  265.      n=seg0&0x0f;
  266.      Write_Command(page0);
  267.      Write_Command(m);
  268.      Write_Command(n);
  269.      for(i=0;i<5;i++)
  270.         {
  271.             Write_Data(*p++);
  272.          }
  273. }

  274. /**********************************/
  275. /*      Display Hanzi             */
  276. /**********************************/
  277. void Display_Hanzi(unsigned char page0,seg0,unsigned char *p)
  278. {
  279.      int i,m,n;
  280.      m=((seg0&0xf0)>>4)|0x10;
  281.      n=seg0&0x0f;
  282.      Write_Command(page0);
  283.      Write_Command(m);
  284.      Write_Command(n);
  285.      for(i=0;i<16;i++)
  286.         {
  287.             Write_Data(*p++);
  288.          }
  289.      m=((seg0&0xf0)>>4)|0x10;
  290.      n=seg0&0x0f;
  291.      Write_Command(page0+1);
  292.      Write_Command(m);
  293.      Write_Command(n);
  294.      for(i=0;i<16;i++)
  295.         {
  296.             Write_Data(*p++);
  297.          }
  298. }

  299. /**********************************/
  300. /*      Display Character         */
  301. /**********************************/
  302. void Display_Character(unsigned char page0,seg0,unsigned char *p0)
  303. {
  304.     int step0=10;
  305.     int step1=5;
  306.     Display_Font(page0,seg0,p0);
  307.     seg0=seg0+step0;
  308.     p0=p0+step1;
  309.     Display_Font(page0,seg0,p0);
  310.     seg0=seg0+step0;  
  311.     p0=p0+step1;
  312.     Display_Font(page0,seg0,p0);
  313.     seg0=seg0+step0;
  314.     p0=p0+step1;  
  315.     Display_Font(page0,seg0,p0);
  316.     seg0=seg0+step0;
  317.     p0=p0+step1;   
  318.     Display_Font(page0,seg0,p0);
  319.     seg0=seg0+step0;
  320.     p0=p0+step1;   
  321.     Display_Font(page0,seg0,p0);
  322.     seg0=seg0+step0;
  323.     p0=p0+step1;  
  324.     Display_Font(page0,seg0,p0);
  325.     seg0=seg0+step0;
  326.     p0=p0+step1;
  327.     Display_Font(page0,seg0,p0);
  328.     seg0=seg0+step0;
  329.     p0=p0+step1;  
  330.     Display_Font(page0,seg0,p0);
  331.     seg0=seg0+step0;
  332.     p0=p0+step1;  
  333.     Display_Font(page0,seg0,p0);
  334.     seg0=seg0+step0;
  335.     p0=p0+step1;
  336.     Display_Font(page0,seg0,p0);
  337.     seg0=seg0+step0;
  338.     p0=p0+step1;
  339.     Display_Font(page0,seg0,p0);
  340.     seg0=seg0+step0;
  341.     p0=p0+step1;
  342.     Display_Font(page0,seg0,p0);
  343. }


  344. void Show_one_char(unsigned char xs,unsigned char page,unsigned char *p)
  345. {
  346.     int i;
  347.     Set_column_addr(xs);                //column addr set   
  348.     Set_row_addr(page);
  349.     for(i=0;i<5;i++)                //5X8 font
  350.     {
  351.         Write_Data(*(p++));
  352.         //Write_Data(*(p++));
  353.     }
  354. }

  355. void Conversion_T0_char(int number)
  356. {
  357.     Buf_1=number/100;
  358.     conversion=number%100;
  359.     Buf_2=conversion/10;
  360.     Buf_3=conversion%10;           
  361. }

  362. char *Get_addr(int num)
  363. {
  364.     unsigned char *pt;
  365.     switch(num)
  366.     {
  367.         case 0: pt=char_0;break;
  368.         case 1: pt=char_1;break;
  369.         case 2: pt=char_2;break;
  370.         case 3: pt=char_3;break;
  371.         case 4: pt=char_4;break;
  372.         case 5: pt=char_5;break;
  373.         case 6: pt=char_6;break;        
  374.         case 7: pt=char_7;break;        
  375.         case 8: pt=char_8;break;
  376.         case 9: pt=char_9;break;
  377.     }
  378.     return pt;
  379. }        

  380. void show_three_number(unsigned char x,y,int n)
  381. {
  382.          Conversion_T0_char(n);
  383.          char_point=Get_addr(Buf_1);
  384.          Show_one_char(x,y,char_point);
  385.          char_point=Get_addr(Buf_2);
  386.          x=x+5;
  387.          Show_one_char(x,y,char_point);
  388.          char_point=Get_addr(Buf_3);
  389.          x=x+5;
  390.          Show_one_char(x,y,char_point);
  391. }

  392. void Wait_Press()
  393. {
  394.         while(KEY_PRESS);
  395.         Delay(0x5000);         
  396. }

  397. /**********************************/
  398. /*      Draw a image              */
  399. /**********************************/
  400. void Display_Image(unsigned char page0,seg0,pagew,segw,unsigned char *p)
  401. {
  402. int i,j,m,n;
  403. m=((seg0&0xf0)>>4)|0x10;
  404. n=seg0&0x0f;
  405. for(i=0;i<pagew;i++)
  406. {
  407.     Write_Command(page0);
  408.     Write_Command(m);
  409.     Write_Command(n);
  410.     for(j=0;j<segw;j++)
  411.     {   
  412.         Write_Data(*(p++));
  413.     }
  414.     page0++;
  415. }
  416. }

  417. //REGULATE CONTRAST
  418. void Regulate_contrast()
  419. {
  420.         
  421.         while(EXIT_KEY&&01)
  422.         {
  423.             if(KEY_PRESS==0)
  424.             {
  425.                     contrast=contrast+1;
  426.                      Write_Command(0x81);          //Set Contrast     
  427.                      Write_Command(contrast);                             
  428.                      Delay(0x5000);
  429.             }
  430.             if(DEC_KEY==0)
  431.             {
  432.                     contrast=contrast-1;
  433.                      Write_Command(0x81);          //Set Contrast     
  434.                      Write_Command(contrast);                             
  435.                 Delay(0x5000);
  436.             }               
  437.         }        
  438. }

  439. void main()
  440. {
  441.     int i;
  442.     int j=0x40;
  443.     contrast=0x0C;
  444.     //P_SW1 |= 0x0C;
  445.     P3M0 = 0x00;
  446.     P3M1 = 0x00;

  447.     Lcd_Set();     
  448.     while(1)
  449.     {
  450.         Display_Image(0xb0,0x01,8,128,description1);
  451.         Wait_Press();        //Delay(0x5000);
  452.         Display_Image(0xb0,0x01,8,128,description2);
  453.         Wait_Press();        //Delay(0x5000);
  454.         Display_Image(0xb0,0x01,8,128,description3);
  455.         Wait_Press();        //Delay(0x5000);
  456.         Display_Image(0xb0,0x01,8,128,description4);
  457.         Wait_Press();        //Delay(0x5000);

  458.         Display_Image(0xb0,0x01,8,128,description5);
  459.         Wait_Press();        //Delay(0x5000);

  460.                 Display_Clear(0x00,0x00);
  461.                 Display_Clear(0x55,0xaa);                        //SNOW
  462.                 Wait_Press();
  463.                 Display_Clear(0x00,0x00);
  464.                 Display_Clear(0xFF,0xFF);                        //BLACK
  465.                 Wait_Press();
  466.                
  467.                 Display_Clear(0x00,0x00);
  468.                 Display_Clear(0xff,0x00);                        //V_BAR
  469.                 Wait_Press();
  470.                
  471.                 Display_Clear(0x00,0x00);
  472.                 Display_Clear(0x55,0x55);                        //H_BAR
  473.                 Wait_Press();                  
  474.                
  475.                 Display_Clear(0x00,0x00);
  476.                 //Display_Clear(0xFF,0xFF);                        //BLACK
  477.                 for(i=0;i<65;i++)
  478.                 {
  479.                    show_one_h_bar(i);
  480.                    show_three_number(4,3,i);
  481.                    Wait_Press();
  482.                 }

  483.     }
  484. }
復(fù)制代碼

完整項目看附件

stc8h_st7565r.zip (12.71 KB, 下載次數(shù): 110)


評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:820289 發(fā)表于 2022-1-5 06:02 | 只看該作者
感謝分享 對小白幫助很大
回復(fù)

使用道具 舉報

板凳
ID:46065 發(fā)表于 2022-1-5 08:43 | 只看該作者
是老王店里的嗎?
回復(fù)

使用道具 舉報

地板
ID:477512 發(fā)表于 2022-1-5 17:16 | 只看該作者
無線電話機上常見到這種屏!
回復(fù)

使用道具 舉報

5#
ID:230742 發(fā)表于 2022-1-5 21:26 | 只看該作者
留個記號,感謝分享。
回復(fù)

使用道具 舉報

6#
ID:912806 發(fā)表于 2022-1-6 01:45 | 只看該作者
wxxl 發(fā)表于 2022-1-5 08:43
是老王店里的嗎?

不是, 老王店里的, 是ST7567, 今天看好像又上架了

不過這兩者的驅(qū)動基本上是一樣的, 除了兩點: 睡眠模式的命令不同, 還有ST7567允許寫內(nèi)存自動換頁而ST7565不允許, 其它完全一樣.

老王的ST7567我也寫了驅(qū)動了,
W806的: https://github.com/IOsetting/wm- ... demo/spi/st7567_lcd
STC8H的: https://github.com/IOsetting/FwL ... ter/demo/spi/st7567

回復(fù)

使用道具 舉報

7#
ID:261025 發(fā)表于 2022-1-11 20:31 | 只看該作者
最開始那幾屏顯示的是什么啊  我這顯示的是亂碼  只有后面全屏點陣橫條豎條這些顯示正常

51hei截圖20220111202802.png (371.11 KB, 下載次數(shù): 90)

51hei截圖20220111202802.png

51hei截圖20220111202822.png (142.53 KB, 下載次數(shù): 101)

51hei截圖20220111202822.png

51hei截圖20220111203017.png (142.38 KB, 下載次數(shù): 94)

51hei截圖20220111203017.png

51hei截圖20220111203032.png (200.26 KB, 下載次數(shù): 75)

51hei截圖20220111203032.png

51hei截圖20220111203056.png (207.5 KB, 下載次數(shù): 88)

51hei截圖20220111203056.png

51hei截圖20220111203108.png (239.52 KB, 下載次數(shù): 85)

51hei截圖20220111203108.png
回復(fù)

使用道具 舉報

8#
ID:912806 發(fā)表于 2022-1-12 01:02 | 只看該作者
418854190 發(fā)表于 2022-1-11 20:31
最開始那幾屏顯示的是什么啊  我這顯示的是亂碼  只有后面全屏點陣橫條豎條這些顯示正常

兩個圖片, 一個圖片里顯示的是兩行文字, 64-C0G! WGM-128, 另一個應(yīng)該是插入卡之類的.

你這樣點亮了基本上就沒什么大問題了, 調(diào)調(diào)參數(shù)很快就能正常用了.

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

9#
ID:261025 發(fā)表于 2022-1-12 07:16 來自觸屏版 | 只看該作者
michaelchain 發(fā)表于 2022-1-12 01:02
兩個圖片, 一個圖片里顯示的是兩行文字, 64-C0G! WGM-128, 另一個應(yīng)該是插入卡之類的.

你這樣點亮了基 ...

c語言我玩不轉(zhuǎn)  打算把程序精簡一下只保留最基本的顯示  然后反編譯成匯編  參考19264的匯編程序用
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人精品一区二区三区四区 | 国产成人在线播放 | 免费久草| 欧美性生活一区二区三区 | 国产欧美在线视频 | 午夜视频在线观看网址 | 日韩av成人在线观看 | 久久国产区 | 日韩欧美一区二区三区 | 91精品国产综合久久婷婷香蕉 | 午夜在线小视频 | 国产精品久久国产精品 | 毛片免费在线 | 伊人精品视频 | 欧美一区视频 | 国产91精品久久久久久久网曝门 | 97国产一区二区精品久久呦 | 国产日韩一区二区 | 高清国产午夜精品久久久久久 | 中文字幕日韩一区 | 久久不卡日韩美女 | 国产精品久久久久久一区二区三区 | 亚洲一区二区免费看 | 国产一区二区三区 | 欧美日高清视频 | 欧美不卡在线 | 久久久久久成人 | 韩日免费视频 | 欧美日韩a | 日韩精品一区二区在线观看 | 国产福利在线视频 | 中国人pornoxxx麻豆 | 中文字幕在线电影观看 | 成人久久久 | 一区二区视频在线 | 国产精品久久久久久久免费大片 | 青春草91 | 日本一二三区高清 | 欧美精品欧美精品系列 | 国产成人精品久久二区二区91 | 久久久资源 |