找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2615|回复: 2
收起左侧

利用AT89S52单片机总线方式点亮LM6063CCW(ST7565)显示

[复制链接]
ID:46918 发表于 2020-3-4 18:56 | 显示全部楼层 |阅读模式
液晶显示模块通常用来作为控制设备的人机交互的窗口,把机器/设备的内部参数显示在液晶屏幕上,今天和大家来分享一下,如何利用单片机的总线来点亮液晶显示模块的;
         通常情况下,拿到一个液晶屏幕要如何才能点亮他呢,首先得看懂用户手册,也不是要全看懂哈,看懂关键的几个点就可以了:
第一,  接口定义;
第二,  时序图;
第三,  指令表;
看懂这些就差不多了,这里就拿工业显示屏幕里比较知名的拓普微的LM6063CCW的模块(控制器是ST7565的,128x64液晶屏用的最多的控制器了)来做个讲解,首先打开手册(网上一搜一大把哈):
咱按着节奏来:
第一:接口定义

接口定义

接口定义
全是英文的,不要被吓到哈,其实这些都是比较简单的英文,我四级都没过都能看懂,相信你们也都可以哈;怕有些草根确实看不明白,我挑几个关键点说一下,首先我们只看8080模式:1.手册里说这个是默认的;2.AT89S52的总线就是8080的;
A0 通道选择信号,当A0=0时,选择指令通道;A0=1时,选择数据通道;
         /RD为读信号,低电平有效;
         /WR为写信号,低电平有效;注意:/WR/RD 不能同时为底电平哈
         /RES复位脚,低电平有效;
         /CS1片选型号,低电平有效;与模块通讯都需要片选信号有效情况下;
第二:时序图

时序图

时序图
如何看懂时序图在这里就不多说了在学校师傅应该是有教过的哈,如果已经还给师傅了的话,可以私聊我;

第三:指令表

指令表

指令表
英文的,我也就不多解释了,最好是看ST7565的IC资料也是英文的,不过我找到了中文版的资料需要的童鞋可以私聊我;

好了接下来画重点:
很多人都有用IO口点亮过液晶显示模块,今天咱来介绍一下更高级的点亮办法,因为用IO口模拟时序,就需要一个一个信号的去操作,很耗费时间,从而会导致整幅图片刷新时,能看出刷的效果;那么怎么样才能够避免出现刷的效果呢,可以通过节省送数据的时间,而51单片机设计的时候为了快速访问外部存储,带有16根地址线可直接寻址既80总线,这种方式的好处是,他的读写时序都是单片机内部产生的时序,因此缩短模拟IO口所花费的时间,可能这么说你感觉不到什么,举个实例:假设单片机的指令周期为1us,如果是IO口模拟的话至少需要7us,如果是用总线方式只需要1us,相差7倍!废话少说,直接上干货:
要使用总线方式,首先硬件要连接好,可参照下面的原理图设计硬件:

原理图

原理图


总线寻址方式是模块的数据总线直接挂在89S52的数据总线上,/RD、/WR作为模块的读、写控制信号,/CS信号和A0信号都由地址线译码产生,模块的/RES接RC复位电路。
总线寻址方式驱动函数如下:(地址定义,根据用户平台接口修改)
1、指令代码写入函数
voidSdCmd(uchar Command)
{
  uchar xdata *Com_addr;
Com_addr =0x8000;                 // 指令通道地址
  *Com_addr = Command;         //写指令操作
}
2、显示数据写入函数
voidSdData(uchar DData)
{
uchar xdata *DData_addr;
   DData_addr =0x8100;        // 数据通道地址           
*DData_addr = DData;          //写数据操作
}
3、显示数据读取函数
ucharRdData()
{
uchar DData;
uchar xdata *DData_addr;
DData_addr =0x8100;       //数据通道地址
DData = DData_addr;             //读数据操作
return(DData);                   //返回数据值
}
其他的代码就没啥好说的了,参照附件


  1. #include <stdio.h>
  2. #include <reg52.h>
  3. #include <intrins.h>

  4. #define uchar unsigned char // 0~255
  5. #define uint unsigned int   // 0~65535



  6. bit     AutoRun;           // 1 for auto run, 0 for manual run
  7. uchar   ContrastLevel;     // for contrast setting level



  8. //-----------------------------------
  9. // dispaly data (128x64)
  10. //-----------------------------------
  11. uchar code Logo[]={
  12. /*--  调入了一幅图像:D:\guoq files\technic support\pic\LM6063c-LOGO-128x64.bmp  --*/
  13. /*--  宽度x高度=128x64  --*/
  14. 0xFF,0x01,0x81,0x01,0x81,0x01,0x81,0x01,0x81,0x41,0x81,0x41,0x81,0x41,0x81,0x41,
  15. 0x81,0x41,0xA1,0x41,0xA1,0x41,0xA1,0x51,0xA1,0x51,0xA1,0x51,0xA9,0x51,0xA9,0x51,
  16. 0xA9,0x55,0xA9,0x55,0x29,0x15,0xAB,0x95,0xCB,0xC5,0xEB,0xE5,0xE3,0xF5,0xF3,0xF9,
  17. 0xFB,0xF9,0xF9,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0x01,0x01,0x41,0x81,0x01,0x81,0x81,
  18. 0x81,0x81,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0xC1,0x01,0x01,0xC1,0x01,0x01,0x81,
  19. 0x01,0x01,0xC1,0x01,0x01,0x01,0xC1,0x01,0x01,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
  20. 0x01,0x01,0x01,0x01,0x41,0x81,0x01,0x01,0x81,0x41,0x01,0x01,0x01,0x01,0x01,0x81,
  21. 0x41,0x81,0x01,0xC1,0x01,0x81,0x01,0xC1,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
  22. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. 0x00,0x00,0x80,0x41,0xA8,0x55,0xAA,0x55,0xAA,0x55,0x2A,0x95,0xCA,0xE5,0xF2,0xF9,
  24. 0xF8,0xFD,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  25. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x42,0xE4,0x10,0x00,0x11,0x94,
  26. 0x52,0xFC,0x50,0x92,0x14,0x11,0x00,0x84,0x84,0xFF,0x44,0x44,0xFF,0x00,0x00,0xFF,
  27. 0x00,0x00,0xFF,0x00,0x22,0x22,0xFF,0x12,0x2A,0x10,0xFC,0x13,0x10,0x10,0xF0,0x00,
  28. 0x00,0x08,0x0B,0x0D,0xE9,0xAF,0xA9,0xA9,0xAF,0xA9,0xED,0x0B,0x09,0x00,0x11,0xF8,
  29. 0x04,0x0B,0xEA,0x2B,0xEA,0x8B,0x3C,0xC3,0x3E,0x02,0x00,0x00,0x00,0x00,0x00,0xFF,
  30. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,
  31. 0xA8,0x54,0x2A,0x95,0xCA,0xE5,0xF2,0xF9,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  32. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  33. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x20,0x20,0x23,0x20,0x21,0x21,0x20,
  34. 0x20,0x23,0x20,0x20,0x21,0x21,0x20,0x20,0x21,0x20,0x22,0x21,0x20,0x20,0x20,0x20,
  35. 0x20,0x20,0x23,0x20,0x20,0x22,0x23,0x20,0x20,0x20,0x23,0x21,0x21,0x21,0x23,0x20,
  36. 0x20,0x20,0x20,0x20,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x20,0x20,0x20,0x20,0x23,
  37. 0x22,0x21,0x20,0x20,0x21,0x22,0x21,0x20,0x21,0x22,0x20,0x20,0x20,0x20,0x20,0xFF,
  38. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x14,0xCA,0xE1,
  39. 0xF8,0xFC,0xFF,0xFF,0xFB,0xFB,0xC3,0xFB,0xFB,0xFF,0xE7,0xDB,0xDB,0xDB,0xE7,0xFF,
  40. 0xC3,0xEB,0xEB,0xEB,0xF7,0xFF,0xE3,0xDF,0xEF,0xDF,0xE3,0xFF,0xCF,0xE7,0xEB,0xE7,
  41. 0xCF,0xFF,0xFB,0xF7,0xCF,0xF7,0xFB,0xFF,0xFF,0x00,0x01,0x01,0xFF,0x01,0x01,0x00,
  42. 0x3C,0x42,0x81,0x81,0x81,0x42,0x3C,0x00,0xFF,0x11,0x11,0x11,0x0E,0x03,0x3C,0xC0,
  43. 0x30,0x0E,0x01,0x0E,0x30,0xC0,0x3C,0x03,0xC0,0x30,0x2E,0x21,0x2E,0x30,0xC0,0x00,
  44. 0x01,0x06,0x08,0xF0,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0xFF,0x80,0x80,0x80,0x80,
  45. 0x04,0xFF,0x84,0x00,0x78,0x84,0x84,0x48,0xFF,0x00,0x00,0x80,0x00,0x00,0x00,0xFF,
  46. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0xF0,0xF0,0xF0,0x70,0xF0,0xC0,0x00,0x00,0x00,0xC0,0xF0,0x70,0xF0,0xF0,
  49. 0xF0,0x00,0x00,0x80,0xE0,0xE0,0x70,0x30,0x30,0x70,0x60,0x40,0x00,0x00,0x80,0xE0,
  50. 0xE0,0x70,0x30,0x70,0xE0,0xE0,0x80,0x00,0x00,0x80,0xE0,0xE0,0x70,0x30,0x30,0x70,
  51. 0x60,0x40,0x00,0x00,0xC0,0xE0,0xF0,0x30,0x30,0x30,0xF0,0xE0,0xC0,0x00,0x00,0x00,
  52. 0xC0,0xE0,0xE0,0x70,0x70,0x70,0x70,0xF0,0xE0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
  54. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  55. 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  56. 0x00,0x00,0xFF,0xFF,0xFF,0x00,0x07,0x7F,0xFC,0xC0,0xFC,0x7F,0x07,0x00,0xFF,0xFF,
  57. 0xFF,0x00,0x00,0x7F,0xFF,0xFF,0x86,0x03,0x87,0xFF,0xFE,0x7C,0x00,0x00,0x7F,0xFF,
  58. 0xFF,0x80,0x00,0x80,0xFF,0xFF,0x7F,0x00,0x00,0x7F,0xFF,0xFF,0x86,0x03,0x87,0xFF,
  59. 0xFE,0x7C,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x06,0x06,0xFF,0xFF,0xF9,0x00,0x00,0x3F,
  60. 0xFF,0xFF,0xC0,0x80,0x80,0x80,0x80,0xC0,0xE1,0xE1,0x40,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
  62. 0xFF,0x00,0xE0,0x20,0x20,0x20,0x20,0x00,0xC0,0x20,0x20,0x20,0x20,0x40,0x00,0x20,
  63. 0x20,0xE0,0x20,0x20,0x00,0xE0,0x43,0x83,0x03,0x03,0xE3,0x03,0x03,0x03,0x03,0xE3,
  64. 0x00,0x00,0x03,0x03,0x03,0x80,0x40,0x20,0x23,0x23,0x43,0x00,0xE0,0x20,0x23,0x23,
  65. 0x43,0x80,0x00,0x00,0x01,0x01,0x83,0x43,0xE3,0x01,0x01,0x00,0x40,0x20,0x20,0x21,
  66. 0xC1,0x03,0xC3,0x23,0x21,0x21,0xC0,0x00,0x00,0x00,0x01,0x81,0x03,0x03,0x03,0x81,
  67. 0x01,0x00,0x00,0x00,0xC0,0x21,0x23,0x23,0x43,0x03,0x03,0x81,0x40,0xE0,0x00,0x00,
  68. 0x00,0x01,0x01,0xE3,0x23,0x23,0x23,0xC3,0x01,0xA1,0x00,0x80,0x00,0x00,0x00,0x80,
  69. 0x00,0x00,0x80,0x80,0x80,0x00,0x00,0xE0,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0xFF,
  70. 0xFF,0x80,0x9F,0x81,0x81,0x81,0x80,0x80,0x88,0x91,0x91,0x92,0x92,0x8C,0x80,0x80,
  71. 0x80,0x9F,0x80,0x80,0x80,0x9F,0x80,0x81,0x86,0x88,0x9F,0x80,0x80,0x80,0x80,0x9F,
  72. 0x90,0x90,0x90,0x90,0x80,0x87,0x88,0x90,0x90,0x90,0x88,0x80,0x9F,0x90,0x90,0x90,
  73. 0x88,0x87,0x80,0x80,0x80,0x80,0x80,0x80,0x9F,0x80,0x80,0x80,0x90,0x98,0x94,0x92,
  74. 0x91,0x80,0x8E,0x91,0x91,0x91,0x8E,0x80,0x80,0x80,0x80,0x90,0x89,0x86,0x89,0x90,
  75. 0x80,0x80,0x80,0x80,0x8F,0x91,0x91,0x91,0x8E,0x80,0x86,0x85,0x84,0x9F,0x84,0x80,
  76. 0x80,0x80,0x80,0x9F,0x82,0x82,0x82,0x81,0x80,0x9F,0x80,0x90,0x89,0x86,0x89,0x90,
  77. 0x80,0x8F,0x92,0x92,0x92,0x8B,0x80,0x9F,0x80,0x89,0x92,0x92,0x94,0x89,0x80,0xFF

  78. };

  79. //-----------------------------------
  80. // Delay Routine
  81. //-----------------------------------
  82. void delayms(uint m)        // 12MHz Xtal, close to ms value
  83. {
  84.     uint j;
  85.     uint i;
  86.    
  87.     for(i=0; i<m; i++)
  88.         for(j=0; j<109; j++)
  89.            _nop_();
  90. }
  91. //--------------------------------------------
  92. //总线寻址方式驱动程序  (INTEL8080 时序)

  93. //-----指令代码写入函数----------------------
  94. void SdCmd(uchar Command)
  95. {
  96.         uchar xdata *Com_addr;            
  97.     Com_addr =0x8000;                // 指令口地址
  98.     *Com_addr = Command;       // 写指令操作
  99. }
  100. //-----显示数据写入函数--------------------------
  101. void SdData(uchar DData)
  102. {
  103.     uchar xdata *DData_addr;
  104.     DData_addr =0x8100;               // 数据口地址
  105.     *DData_addr = DData;              // 写数据操作
  106. }
  107. //------显示数据读取函数-------------------------
  108. uchar RdData()
  109. {
  110.    uchar DData;
  111.    uchar xdata *DData_addr;
  112.    DData_addr = 0x8100;      // 读数据地址
  113.    DData = *DData_addr;      // 读数据操作
  114.    return(DData);           //返回数据值

  115. }

  116. //-----------------------------------
  117. // Write a Screen
  118. //-----------------------------------
  119. void WriteScreen(uchar *DisplayData)        // DisplayData should be 164x64/8 = 1312byte
  120. {
  121.         uchar TempData;
  122.         uchar i, j;
  123.         for(i=0;i<8;i++)
  124.             {
  125.             SdCmd(0xb0 | i);        // select page 0~7
  126.             SdCmd(0x10);            // start form column 0
  127.             SdCmd(0x00);            // (2byte command)
  128.              for(j=0;j<128;j++)
  129.                      {
  130.                      TempData=(*(DisplayData+(i*128)+j));
  131.                      SdData(TempData);
  132.                     }
  133.         }
  134. }

  135. /*
  136. //-----------------------------------
  137. // Contrast control
  138. //-----------------------------------
  139. void LCD_Darker(void)
  140. {
  141.         if (ContrastLevel<0x3F)
  142.             {
  143.         ContrastLevel++;
  144.                 }
  145.     SdCmd(0x81);                     // E-Vol setting
  146.         SdCmd(ContrastLevel);   // (2byte command)
  147. }



  148. void LCD_Lighter(void)
  149. {
  150.         if (ContrastLevel>0x00)
  151.             {
  152.              ContrastLevel--;
  153.                 }
  154.     SdCmd(0x81);            // E-Vol setting
  155.         SdCmd(ContrastLevel);   // (2byte command)
  156. }

  157. */

  158. //-----------------------------------
  159. // Init LCD module
  160. //-----------------------------------
  161. void initLCDM(void)
  162. {
  163.         _RST=1;                 // hardware reset LCD module
  164.         _RST=0;
  165.         delayms(1);
  166.         _RST=1;
  167.         delayms(10);
  168.        
  169.     ContrastLevel=0x21;     // default Contrast Level

  170.         SdCmd(0xaf);            // display on
  171.         SdCmd(0x40);            // display start line=0
  172.     SdCmd(0xa1);            // ADC=1
  173.     SdCmd(0xa6);            // normal display
  174.     SdCmd(0xa4);            // Display all point = off
  175.     SdCmd(0xa2);            // LCD bias = 1/9
  176.     SdCmd(0xc0);            // Common output mode select= reverse


  177.     SdCmd(0x2f);            // Power control = all on

  178.            SdCmd(0x25);                        // RA/RB setting

  179.            SdCmd(0xf8);SdCmd(0x00);// Booster Ratio Set= 2x,3x,4x (2byte command)

  180.         SdCmd(0x81);            // E-Vol setting
  181.     SdCmd(ContrastLevel);   // (2byte command)
  182. }

  183. //-----------------------------------
  184. // Main Program
  185. //-----------------------------------
  186. void main()
  187. {
  188.         SP=0x60;
  189.         EA = 0;         // disable interrupts

  190.   
  191.     _RST    = 1;


  192.            initLCDM();
  193.         WriteScreen(Logo);   
  194.         while(1)
  195.         {
  196.         }
  197. }
  198. //end of program
复制代码





评分

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

查看全部评分

回复

使用道具 举报

ID:343102 发表于 2021-7-5 21:22 | 显示全部楼层
程序缺太多内容。
回复

使用道具 举报

ID:46918 发表于 2020-3-10 08:33 | 显示全部楼层
看样子大家都是大虾呀,都没啥人提问呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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