找回密码
 立即注册

QQ登录

只需一步,快速开始

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

st7565普中科技lcd12864单片机源程序

  [复制链接]
跳转到指定楼层
楼主
(分享文件)普中科技开发教程12864

单片机源程序如下:
  1. #include"st7565.h"

  2. /*******************************************************************************
  3. * 函 数 名         : LCD12864_WriteCmd
  4. * 函数功能                   : 写入一个命令到12864
  5. * 输    入         : cmd
  6. * 输    出         : 无
  7. *******************************************************************************/

  8. void LcdSt7565_WriteCmd(cmd)
  9. {
  10.         LCD12864_CS = 0;           //chip select,打开片选
  11.         LCD12864_RD = 1;           //disable read,读失能        
  12.         LCD12864_RS = 0;       //select command,选择命令
  13.         LCD12864_RW = 0;       //select write,选择写模式
  14.         _nop_();
  15.         _nop_();

  16.         DATA_PORT = cmd; //put command,放置命令
  17.         _nop_();
  18.         _nop_();

  19.         LCD12864_RW = 1;           //command writing ,写入命令
  20. }

  21. /*******************************************************************************
  22. * 函 数 名         : LcdSt7565_WriteData
  23. * 函数功能                   : 写入一个数据到12864
  24. * 输    入         : dat
  25. * 输    出         : 无
  26. *******************************************************************************/

  27. void LcdSt7565_WriteData(dat)
  28. {        
  29.         LCD12864_CS = 0;           //chip select,打开片选
  30.         LCD12864_RD = 1;           //disable read,读失能        
  31.         LCD12864_RS = 1;       //select data,选择数据
  32.         LCD12864_RW = 0;       //select write,选择写模式
  33.         _nop_();
  34.         _nop_();

  35.         DATA_PORT = dat;       //put data,放置数据
  36.         _nop_();
  37.         _nop_();

  38.         LCD12864_RW = 1;           //data writing,写数据
  39. }
  40. /*******************************************************************************
  41. * 函 数 名         : LCD12864_Init
  42. * 函数功能                   : 初始化12864
  43. * 输    入         : 无
  44. * 输    出         : 无
  45. * 说    明         : LCD12864的命令指令可以查看例程文件夹下的《ST7565p数据手册》
  46. *                  * 的第51页的位置。
  47. *******************************************************************************/

  48. void Lcd12864_Init()
  49. {
  50.         uchar i;
  51.         LCD12864_RSET = 0;
  52.         for (i=0; i<100; i++);
  53.         LCD12864_CS = 0;
  54.         LCD12864_RSET = 1;
  55.         
  56.         //----------------Star Initial Sequence-------//
  57.         //------程序初始化设置,具体命令可以看文件夹下---//

  58.         //--软件初始化--//
  59.         LcdSt7565_WriteCmd(0xE2);  //reset
  60.         for (i=0; i<100; i++);           //延时一下

  61.         //--表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)--//
  62.         LcdSt7565_WriteCmd(0xA1);  //ADC select segment direction
  63.         
  64.         //--表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向--//
  65.         LcdSt7565_WriteCmd(0xC8);  //Common direction
  66.                           
  67.         //--表格第9个命令,0xA6为设置字体为黑色,背景为白色---//
  68.         //--0xA7为设置字体为白色,背景为黑色---//
  69.         LcdSt7565_WriteCmd(0xA6);  //reverse display

  70.         //--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//
  71.         LcdSt7565_WriteCmd(0xA4);  //normal display
  72.         
  73.         //--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//
  74.         LcdSt7565_WriteCmd(0xA2);  //bias set 1/9
  75.         
  76.         //--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--//
  77.         //--0xF801,选择增压为5X,其实效果差不多--//        
  78.         LcdSt7565_WriteCmd(0xF8);  //Boost ratio set
  79.         LcdSt7565_WriteCmd(0x01);  //x4
  80.         
  81.         //--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--//
  82.         //--选择从0x00到0X3F。用来设置背景光对比度。---/
  83.         LcdSt7565_WriteCmd(0x81);  //V0 a set
  84.         LcdSt7565_WriteCmd(0x23);

  85.         //--表格第17个命令,选择调节电阻率--//
  86.         LcdSt7565_WriteCmd(0x25);  //Ra/Rb set
  87.         
  88.         //--表格第16个命令,电源设置。--//
  89.         LcdSt7565_WriteCmd(0x2F);
  90.         for (i=0; i<100; i++);

  91.         //--表格第2个命令,设置显示开始位置--//
  92.         LcdSt7565_WriteCmd(0x40);  //start line

  93.         //--表格第1个命令,开启显示--//
  94.         LcdSt7565_WriteCmd(0xAF);  // display on
  95.         for (i=0; i<100; i++);

  96. }

  97. /*******************************************************************************
  98. * 函 数 名         : LCD12864_ClearScreen
  99. * 函数功能                   : 清屏12864
  100. * 输    入         : 无
  101. * 输    出         : 无
  102. *******************************************************************************/

  103. void Lcd12864_ClearScreen(void)
  104. {
  105.         uchar i, j;

  106.         for(i=0; i<8; i++)
  107.         {
  108.                 //--表格第3个命令,设置Y的坐标--//
  109.                 //--Y轴有64个,一个坐标8位,也就是有8个坐标--//
  110.                 //所以一般我们使用的也就是从0xB0到0x07,就够了--//        
  111.                 LcdSt7565_WriteCmd(0xB0+i);

  112.                 //--表格第4个命令,设置X坐标--//
  113.                 //--当你的段初始化为0xA1时,X坐标从0x10,0x04到0x18,0x04,一共128位--//
  114.                 //--当你的段初始化为0xA0时,X坐标从0x10,0x00到0x18,0x00,一共128位--//
  115.                 //--在写入数据之后X坐标的坐标是会自动加1的,我们初始化使用0xA0所以--//
  116.                 //--我们的X坐标从0x10,0x00开始---//
  117.                 LcdSt7565_WriteCmd(0x10);
  118.                 LcdSt7565_WriteCmd(0x04);                                                           
  119.                
  120.                 //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//
  121.                 for(j=0; j<128; j++)
  122.                 {
  123.                         LcdSt7565_WriteData(0x00);  //如果设置背景为白色时,清屏选择0XFF
  124.                 }
  125.         }
  126. }

  127. /*******************************************************************************
  128. * 函 数 名         : LCD12864_Write16CnCHAR
  129. * 函数功能                   : 在12864上面书写16X16的汉字
  130. * 输    入         : x, y, cn
  131. * 输    出         : 无
  132. * 说    明                   : 该函数可以直接书写字符串,但是书写是从右到左,所以输入的时
  133. *                  * 侯注意输入。汉字的取模方式请观看文件夹下的《汉字取模软件的
  134. *                  * 使用说明》
  135. *******************************************************************************/

  136. #ifdef  CHAR_CODE

  137. #include"charcode.h"

  138. uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)
  139. {
  140.         uchar j, x1, x2, wordNum;

  141.         //--Y的坐标只能从0到7,大于则直接返回--//
  142.         if(y > 7)
  143.         {
  144.                 return 0;
  145.         }

  146.         //--X的坐标只能从0到128,大于则直接返回--//
  147.         if(x > 128)
  148.         {
  149.                 return 0;
  150.         }
  151.         y += 0xB0;           //求取Y坐标的值
  152.         //--设置Y坐标--//
  153.         LcdSt7565_WriteCmd(y);
  154.         while ( *cn != '\0')         //在C语言中字符串结束以‘\0’结尾
  155.         {        
  156.         
  157.                 //--设置Y坐标--//
  158.                 LcdSt7565_WriteCmd(y);

  159.                 x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
  160.                 x2 = x & 0x0F;          //去低四位
  161.                 //--设置X坐标--//
  162.                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  163.                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位

  164.                 for (wordNum=0; wordNum<50; wordNum++)
  165.                 {
  166.                     //--查询要写的字在字库中的位置--//
  167.                         if ((CN16CHAR[wordNum].Index[0] == *cn)
  168.                              &&(CN16CHAR[wordNum].Index[1] == *(cn+1)))
  169.                         {
  170.                                 for (j=0; j<32; j++) //写一个字
  171.                                 {               
  172.                                         if (j == 16)         //由于16X16用到两个Y坐标,当大于等于16时,切换坐标
  173.                                         {
  174.                                                 //--设置Y坐标--//
  175.                                                    LcdSt7565_WriteCmd(y + 1);
  176.                         
  177.                                                 //--设置X坐标--//
  178.                                                 LcdSt7565_WriteCmd(0x10 + x1);   //高4位
  179.                                                 LcdSt7565_WriteCmd(0x04 + x2);        //低4位
  180.                                         }
  181.                                         LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);
  182.                                 }
  183.                                 x += 16;
  184.                         }//if查到字结束               
  185.                 } //for查字结束        
  186.                 cn += 2;
  187.         }        //while结束
  188.         return 1;
  189. }

  190. #endif
复制代码

所有资料51hei提供下载:
程序.zip (27.41 KB, 下载次数: 254)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:242746 发表于 2019-2-1 11:28 | 只看该作者
有串口的吗?
回复

使用道具 举报

板凳
ID:500114 发表于 2019-5-6 18:27 | 只看该作者
请问那棵树和头顶的背景可以去掉吗?只想保留纯色背景
回复

使用道具 举报

地板
ID:60483 发表于 2019-8-7 08:15 | 只看该作者

请问那棵树和头顶的背景可以去掉吗?只想保留纯色背景
回复

使用道具 举报

5#
ID:85743 发表于 2019-11-9 20:55 | 只看该作者
楼主,我这个模块是ST7565的,SPI通讯,复制别人的字模数据,能够正常显示。关键问题是,我自己用PCtoLCD、ZIMO、畔畔取模的数据,都是乱码,不能正常显示。在取模软件要怎样设置才能正常显示?谢谢!
回复

使用道具 举报

6#
ID:229641 发表于 2019-11-12 16:38 来自手机 | 只看该作者
那个彩屏谁有完整的刷屏代码?
回复

使用道具 举报

7#
ID:488962 发表于 2019-11-24 01:49 | 只看该作者
lzbsnb 发表于 2019-8-7 08:15
请问那棵树和头顶的背景可以去掉吗?只想保留纯色背景

可以去掉了。 拆开背后的导光板。 可以被背景的那层撕下来。 不过撕下来之后边缘会有一点不平整
回复

使用道具 举报

8#
ID:880867 发表于 2021-2-9 21:05 | 只看该作者
我的代码也是跟这个一模一样,我直接下载屏幕只亮,没有任何显示,怎么办
回复

使用道具 举报

9#
ID:87000 发表于 2021-3-4 09:55 | 只看该作者
这个找了很久了,值得参考
回复

使用道具 举报

10#
ID:849913 发表于 2021-3-18 12:36 | 只看该作者
这个好 我喜欢
回复

使用道具 举报

11#
ID:968108 发表于 2021-9-25 09:28 | 只看该作者
IIC的还是SPI的?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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