找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4519|回复: 5
打印 上一主题 下一主题
收起左侧

st7565主控的12864液晶驱动程序

[复制链接]
跳转到指定楼层
楼主
st7565主控的12864液晶驱动程序,全部分享。

下载地址:
st7565r-并口.rar (59.11 KB, 下载次数: 61)


部分源码预览:
  1. /*************************************************************************  
  2. Module name  :  CH12864F(128*64 dots)  COG产品
  3. Driver IC    :  ST7565R
  4. interface    :  6800 for 8 bit mcu interface
  5. ************************************************************************/   
  6. #include<REG52.H>   
  7. #include<INTRINS.H>  
  8. #include"int/ascii0816x.c"
  9. #include"int/ascii0508x.c"
  10. #include"int/hanzi1616.c"
  11. #include"int/photo.c"

  12. #define uchar unsigned char
  13. #define uint unsigned int
  14. #define data   P1
  15.    
  16. sbit cs  =  P3^0;   
  17. sbit rst =  P3^1;   
  18. sbit di  =  P3^2;   
  19. sbit wr  =  P3^3;   
  20. sbit rd  =  P3^4;
  21.                                                    

  22. // Delay microsecond less than 255us
  23. void delayUs(uint Tus)
  24. {
  25.         // If Tus >= 18, the delay is precise, otherwise not!
  26.         if (Tus > 17)
  27.         {
  28.                 Tus = Tus/2 - 9;
  29.                 if (Tus != 0)
  30.                         while(--Tus != 0);
  31.         }
  32. }

  33. // Delay Tms ms
  34. void delayMs(uint Tms)
  35. {
  36.         uint i;
  37.         while(Tms-- != 0)
  38.         {
  39.                 i = 4;
  40.                 while(i-- != 0)
  41.                 delayUs(250);
  42.         }
  43. }

  44.    
  45. /****************************reset IC for start****************************/   
  46. void LCD_Reset()   
  47. {   
  48. IE  =  0x00;   
  49. rst =  0;   
  50. delayMs(50);   
  51. rst =  1;   
  52. delayMs(50);   
  53. }   
  54. //-----------------写指令或者数据--------------------      
  55. void write_cmd_dat(uchar cmda,uchar com)   
  56. {   
  57. cs=0;   
  58. di=cmda;
  59. rd=1;
  60. wr=0;
  61. data=com;  
  62. delayUs(2);
  63. wr=1;  
  64. delayUs(2);
  65. }


  66. // set Column address
  67. void SetCA(uchar Caddr)
  68. {
  69.    write_cmd_dat(0,Caddr & 0x0F);          // Lower 4-bit
  70.    write_cmd_dat(0,(Caddr >> 4) | 0x10);   // Higher 4-bit
  71. }

  72. // set page address
  73. void SetPA(uchar Paddr)
  74. {
  75.    write_cmd_dat(0,0xb0+Paddr);
  76. }

  77. //--------------向某页某列写数据----------------------------
  78. void write_data(uint com,uchar page,uchar clum)
  79. {
  80.   SetPA(page);
  81.   SetCA(clum);
  82.   write_cmd_dat(1,com);
  83. }

  84. // Display data RAM page and column address
  85. void GotoXY(uchar Paddr, uchar Caddr)
  86. {
  87.    SetPA(Paddr);
  88.    SetCA(Caddr);
  89. }

  90. //----------------------组装测试-------------------------
  91. void display_test(uchar fst,uchar snd)
  92. {
  93.   uchar i,j;
  94. for(j=0;j<8;j++)
  95. {       
  96.   GotoXY(j,0);
  97.    for(i=0;i<128/2;i++)
  98.   {
  99.    write_cmd_dat(1,fst);
  100.    write_cmd_dat(1,snd);
  101.   }
  102. }
  103. }
  104. // Clear LCD screen
  105. void Clear(void)
  106. {
  107.         display_test(0x00,0x00);
  108.         delayUs(4);
  109. }  
  110. // Wait some time and clear the screen
  111. void wait_and_clear(void)
  112. {
  113.         delayMs(200);
  114.         Clear();
  115. }
  116.   
  117. void lcd_test()
  118. {
  119.   uchar i;
  120.   uchar code tdata[][2]=
  121.   {
  122.           {0xff,0xff},        // All
  123.         {0x00,0x00},        // None       
  124.         {0x00,0xFF},        // Virtical
  125.         {0xff,0x00},        // Virtical
  126.         {0xAA,0xAA},        // Horizontal
  127.         {0x55,0x55},        // Horizontal
  128.         {0xAA,0x55},        // Stars
  129.         {0x55,0xaa},        // Stars
  130.   };
  131.   for(i=0;i<8;i++)
  132.   {
  133.    display_test(tdata[i][0],tdata[i][1]);
  134.    wait_and_clear();
  135.   }
  136. }   
  137. //------------------显示方框-----------------------
  138. void lcd_kuang(void)
  139. {
  140. uchar i,j;
  141.   for(i=0;i<8;i++)
  142.    {         
  143.     for(j=0;j<128;j++)
  144.          {
  145.           if((j==0)||(j==127)) { GotoXY(i,j); write_cmd_dat(1,0xff);}
  146.           if(i==0)
  147.            {
  148.             if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x01);}}
  149.           if(i==7)
  150.            {
  151.             if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x80);}}
  152.          }
  153.    }
  154. }

  155. //------------------显示8X16点阵字符串-------------------------               
  156. void disp_ascii0816(uchar *ptrAscii, uchar startP, uchar startC)
  157.         {

  158.                 uchar i,xclum;
  159.                 uint index;
  160.                 GotoXY(startP,startC);
  161.                 while((*ptrAscii) != '\0')
  162.                 {
  163.                           index = ((*ptrAscii)-0x20)*16;
  164.                   
  165.                         for(i=0;i<16;i++)
  166.                         {
  167.                          if(i%8==0)
  168.                           {
  169.                           xclum=startC;
  170.                           }
  171.                          write_data(AsciiDot0816[index++],startP+i/8,xclum++);                         
  172.                         }
  173.                         startC+=8;
  174.                     ptrAscii++;                                  
  175.                 //        if((128-xclum)<8)
  176.         //        {
  177.                 // startP+=2;
  178.                 //         startC=0;
  179.                          //if(startP<8)
  180.                 //         {Gotoxy(startP,startC);}
  181.                 //        }
  182.         }
  183. }

  184. //------------------显示5X8点阵字库串-------------------------
  185. void disp_ascii0508(uchar *ptrAscii, uchar startP, uchar startC)
  186. {

  187.                 uchar i;
  188.                 uint index;
  189.                 GotoXY(startP,startC);
  190.                 while((*ptrAscii) != '\0')
  191.                 {
  192.                         index = ((*ptrAscii) - 0x20)*5;
  193.                         for (i=0;i<5;i++)       
  194.                         {
  195.                          write_data(AsciiDot0508[index++],startP,startC++);               
  196.                         }
  197.                     ptrAscii++;                                  
  198.                         if((128-startC)<6)
  199.                         {
  200.                          startP++;
  201.                          startC=0;
  202.                          if(startP<8)
  203.                          {GotoXY(startP,startC);}
  204.                         }
  205.         }
  206. }
  207. //------------------显示一个汉字-------------------------
  208. void display_hanzi(uchar *p,uchar startP, uchar startC)
  209. {

  210.    uchar i,j;
  211.          for(i=0;i<2;i++)
  212.            {
  213.          GotoXY(startP+i,startC);
  214.                           for(j=0;j<16;j++)
  215.                             {write_cmd_dat(1,*p++);}//发送数据
  216.      }
  217. }

  218. //------------------显示一个反白汉字-------------------------
  219. void display_hanzi_fan(uchar *p,uchar startP, uchar startC)
  220. {

  221.    uchar i,j;
  222.          for(i=0;i<2;i++)
  223.            {
  224.          GotoXY(startP+i,startC);
  225.                           for(j=0;j<16;j++)
  226.                             {write_cmd_dat(1,~*p++);}//发送数据
  227.      }
  228. }

  229. //-------------显示一副128X32点阵的图片------------------------------
  230. void display_photo(uchar *p,uchar startP,uchar startC)         
  231. {
  232.    uchar i,j;
  233.    GotoXY(startP,startC);
  234.    for(i=0;i<4;i++)
  235.     {
  236.           for(j=0;j<128;j++)
  237.           {
  238.            write_data(*p++, startP+i, startC+j);
  239.           }
  240.         }
  241. }
  242.          
  243. void Init_IC()   
  244. {   
  245. cs  =  0;   
  246. P1  =  0xFF;   
  247. LCD_Reset();
  248. write_cmd_dat(0,0xE2);   //initialize interal function
  249. write_cmd_dat(0,0xA2); //LCD Bias selection(1/65 Duty,1/9Bias)  
  250. write_cmd_dat(0,0xA0);  //ADC selection(SEG0->SEG128) //改变SEG扫描方向
  251. write_cmd_dat(0,0xC8);  //SHL selection(COM64->COM0) //改变COM扫描方向
  252. write_cmd_dat(0,0x2F);  //power control(VB,VR,VF=1,1,1)
  253. write_cmd_dat(0,0x25); //Regulator resistor select 110 内部电位器调节
  254. write_cmd_dat(0,0x81); //set reference voltage mode
  255. write_cmd_dat(0,0x50); //set reference voltage //改变此值可以改变效果  
  256. write_cmd_dat(0,0x40); //Initial Display Line
  257. write_cmd_dat(0,0xAF); //Display on
  258. Clear();
  259. }   
  260.    
  261. void main()   
  262. {
  263.   
  264.   uint i;
  265.   Init_IC();   
  266.   while(1)
  267.   {

  268.   lcd_kuang();
  269.   delayMs(500);
  270.   Clear();

  271.   lcd_test();  // lcd 组装测试

  272.     display_hanzi(shen,0,0);   //显示16X16点阵汉字
  273.         display_hanzi(zhen,0,16);
  274.         display_hanzi(chuan,0,32);
  275.         display_hanzi(hang,0,48);
  276.         display_hanzi(dian,0,64);
  277.         display_hanzi(zi,0,80);
  278.         display_hanzi(ke,0,96);
  279.         display_hanzi(ji,0,112);
  280.         disp_ascii0816("CH12864F-COG",2,0);
  281.         display_hanzi(gong,2,96);
  282.         display_hanzi(yi,2,112);
  283.         disp_ascii0816("st7565r-",4,0);
  284.         display_hanzi(bing,4,64);
  285.         display_hanzi(kou,4,80);
  286.         display_hanzi(chuan1,4,96);
  287.         display_hanzi(kou,4,113);
  288.         display_hanzi_fan(ci,6,0);
  289.         display_hanzi_fan(chun,6,16);
  290.         disp_ascii0816(":",6,32);
  291.         disp_ascii0508("54.0 x 50.0 x 7",6,48);
  292.         disp_ascii0508("44.0 x 29.0 mm",7,48);
  293.         delayMs(500);
  294.     Clear();

  295.         display_hanzi(shen,0,0);   //显示16X16点阵汉字
  296.         display_hanzi(zhen,0,16);
  297.         display_hanzi(chuan,0,32);
  298.         display_hanzi(hang,0,48);
  299.         display_hanzi(dian,0,64);
  300.         display_hanzi(zi,0,80);
  301.         display_hanzi(ke,0,96);
  302.         display_hanzi(ji,0,112);
  303.         disp_ascii0816("CH12864F-COG",2,0);
  304.         display_hanzi(gong,2,96);
  305.         display_hanzi(yi,2,112);
  306.         display_photo(tupian,4,0);           //显示一副128X32点阵的图片
  307.         delayMs(500);
  308.     Clear();
  309.   }   
  310. }   
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:85743 发表于 2019-11-8 15:46 | 只看该作者
好东西,正需要,谢谢楼主
回复

使用道具 举报

板凳
ID:85743 发表于 2019-11-8 15:56 | 只看该作者
楼主,有没有串口的?就是SPI方式的。谢谢!
回复

使用道具 举报

地板
ID:505400 发表于 2020-3-2 21:08 | 只看该作者
有没有分左右片的
回复

使用道具 举报

5#
ID:20088 发表于 2021-6-16 21:00 | 只看该作者
很想看看程序啊,可惜币不够
回复

使用道具 举报

6#
ID:59515 发表于 2022-1-22 10:58 | 只看该作者
不错不错,顶一下,哪个96*32的1寸屏驱动啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表