找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18985|回复: 12
收起左侧

12864串口接线方式与实例程序分享

  [复制链接]
ID:227784 发表于 2018-7-3 13:54 | 显示全部楼层 |阅读模式
百度了好长时间都没有找到带字库的12864使用串口如何接线,后来参阅了一下12864的产品说明,终于摸索出来了,本人是刚入门单片机,还有好多的不懂的,我把接线的方式还有实例程序分享出来,只要对大家有一丁点的帮助就满足了。首先看引脚定义
LCD12864屏.jpg FlYPYXpuGG09vRwwdDgSafa2VOaG.png
  RS=CS;   R/W=SID;  E=CLK; FSB高电平为并行接口,用并口时接高电平,FSB接低电平时为串口,高低电平可以直接接VCC或者GND也可以用软件去控制,实现并口和串口的切换。RET不接线也能使用,用串口时除了DB0--DB7就不再使用外,其他的接口按手册上说明使用。下面是测试代码,也是参阅从51黑电子论坛的不过有些错误无法显示,已经更改。
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit CS=P3^5;     //片选信号
  6. sbit SID=P3^6;  //数据信号
  7. sbit SCLK=P3^4;  //时钟信号
  8. sbit RST=P2^2;  //复位信号
  9. sbit CH = P3^7;  //并行、串行选择信号
  10. /********************************************************************
  11. * 名称 : delay()
  12. * 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
  13. * 输入 : t
  14. * 输出 : 无
  15. ***********************************************************************/
  16. void delay(unsigned int t)
  17. {
  18. unsigned int i,j;
  19. for(i=0; i<t;  i++)
  20.     for(j=0; j<10; j++);
  21. }
  22. /********************************************************************
  23. * 名称 : sendbyte()
  24. * 功能 : 按照液晶的串口通信协议,发送数据
  25. * 输入 : zdata
  26. * 输出 : 无
  27. ***********************************************************************/
  28. void sendbyte(unsigned char zdata)
  29. {
  30. unsigned int i;
  31. for(i=0; i<8; i++)
  32. {
  33.   if((zdata << i) & 0x80)
  34.   {
  35.    SID = 1;
  36.   }
  37.   else
  38.   {
  39.    SID = 0;
  40.   }
  41.   SCLK = 0;
  42.   SCLK = 1;
  43. }
  44. }
  45. /********************************************************************
  46. * 名称 : write_com()
  47. * 功能 : 写串口指令
  48. * 输入 : cmdcode
  49. * 输出 : 无
  50. ***********************************************************************/
  51. void write_com(unsigned char cmdcode)
  52. {
  53. CS = 1;
  54. sendbyte(0xf8);
  55. sendbyte(cmdcode & 0xf0);
  56. sendbyte((cmdcode << 4) & 0xf0);
  57. delay(2);
  58. }
  59. /********************************************************************
  60. * 名称 : write_data()
  61. * 功能 : 写串口指令
  62. * 输入 : cmdcode
  63. * 输出 : 无
  64. ***********************************************************************/
  65. void write_data(unsigned char Dispdata)
  66. {
  67. CS = 1;
  68. sendbyte(0xfa);
  69. sendbyte(Dispdata & 0xf0);
  70. sendbyte((Dispdata << 4) & 0xf0);
  71. delay(2);
  72. }
  73. /********************************************************************
  74. * 名称 : lcdinit()
  75. * 功能 : 初始化函数
  76. * 输入 : cmdcode
  77. * 输出 : 无
  78. ***********************************************************************/
  79. void lcdinit()
  80. {  
  81. RST = 0;
  82. delay(100);
  83. RST = 1;
  84. delay(20000);
  85. write_com(0x30);
  86. delay(50);
  87. write_com(0x0c);
  88. delay(50);
  89. }
  90. /********************************************************************
  91. * 名称 : hzkdis()
  92. * 功能 : 显示字符串
  93. * 输入 : *s
  94. * 输出 : 无
  95. ***********************************************************************/
  96. void hzkdis(unsigned char code *s)
  97. {  
  98. while(*s > 0)
  99.     {
  100.   write_data(*s);
  101.   s++;
  102.   delay(50);
  103.     }
  104. }

  105. /********************************************************************
  106. * 名称 : Test()
  107. * 功能 : 显示子函数
  108. * 输入 : 无
  109. * 输出 : 无
  110. ***********************************************************************/
  111. void Test()
  112. {  
  113. write_com(0x03);
  114. delay(50);   

  115. write_com(0x80);
  116. hzkdis("铅酸电池放电仪");
  117. write_com(0x90);
  118. hzkdis("电压");
  119. write_com(0x92);
  120. hzkdis("16.8v 13.2v");
  121. write_com(0x98);
  122. hzkdis("  电子爱好者");
  123. }

  124. /********************************************************************
  125. * 名称 : Main()
  126. * 功能 : 主函数
  127. * 输入 : 无
  128. * 输出 : 无
  129. ***********************************************************************/
  130. void Main()
  131. {
  132. CH = 0;
  133. delay(1);
  134. lcdinit();
  135. delay(10);
  136. while(1)
  137. {
  138.   Test();  a++;
  139.   delay(5000);
  140. }
  141. }
复制代码



评分

参与人数 3黑币 +56 收起 理由
谢小康4 + 1 淡定
机智胜理智 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:435886 发表于 2018-11-29 17:33 | 显示全部楼层
MARK,MARK,学习了,小白还是不太明白串行和并行
回复

使用道具 举报

ID:436147 发表于 2018-12-17 20:19 | 显示全部楼层
请教下,如果程序中显示内容里面的hzkdis("16.8v 13.2v");这两个电压值是根据外部电压测量,采集得到的模拟量,实时变化的,程序该怎么写
回复

使用道具 举报

ID:461428 发表于 2019-1-8 22:12 | 显示全部楼层
编译都通不过。。。。
回复

使用道具 举报

ID:461428 发表于 2019-1-8 22:32 | 显示全部楼层
void write_com(unsigned char cmdcode)。这个cmdcode干啥的  咋来的?
回复

使用道具 举报

ID:333678 发表于 2019-2-10 16:50 | 显示全部楼层
学习一下。
回复

使用道具 举报

ID:59185 发表于 2019-6-2 22:46 | 显示全部楼层
V0和VOUT怎么接  没有可变电阻
回复

使用道具 举报

ID:633290 发表于 2019-10-31 14:53 | 显示全部楼层
不错,我用avr,改改下就可以用
回复

使用道具 举报

ID:164988 发表于 2019-10-31 16:44 | 显示全部楼层
很好,谢谢分享,就想找12864和19264屏的51驱动程序,
回复

使用道具 举报

ID:165291 发表于 2019-11-2 08:04 来自手机 | 显示全部楼层
好使,就是不太会用
回复

使用道具 举报

ID:165291 发表于 2019-11-2 08:11 来自手机 | 显示全部楼层
灬chang 发表于 2018-12-17 20:19
请教下,如果程序中显示内容里面的hzkdis("16.8v 13.2v");这两个电压值是根据外部电压测量,采集得到的模拟 ...

uchar shuzu[];
hzkdis(shuzu[]);
定义个数组试试!
回复

使用道具 举报

ID:454897 发表于 2019-12-5 19:48 | 显示全部楼层
你好,请问一下为什么我的背光没有亮啊?
回复

使用道具 举报

ID:878048 发表于 2021-2-5 16:58 | 显示全部楼层
学习了,这个程序是我见过最简单的了,程序也少好用赞一个
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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