找回密码
 立即注册

QQ登录

只需一步,快速开始

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

12864液晶驱动资料 显示图形、文字的单片机源程序

[复制链接]
跳转到指定楼层
楼主
如题,12864液晶驱动资料,包括软件程序和资料
LCD12864显示图形、文字(请使用keil uvision3或以上版本打开)

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. //#include <at89x51.h>

  4. sbit LCD_RS=P1^0;//定义引脚
  5. sbit LCD_RW=P1^1;
  6. sbit LCD_E=P1^2;
  7. sbit PSB =P3^6;                //PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
  8. #define LCD_Data P2




  9. #define Busy    0x80 //用于检测LCD状态字中的Busy标识
  10. void WriteDataLCD(unsigned char WDLCD);
  11. void WriteCommandLCD(unsigned char WCLCD,BuysC);
  12. unsigned char ReadDataLCD(void);
  13. unsigned char ReadStatusLCD(void);
  14. void LCDInit(void);
  15. void LCDClear(void);
  16. void LCDFlash(void);
  17. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  18. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  19. void DisplayImage (unsigned char code *DData);
  20. void Delay5Ms(void);
  21. void Delay400Ms(void);

  22. code unsigned char  uctech[] = {"大雄电子营业部"};
  23. code unsigned char  net[] = {"ic2012*taobao*co"};
  24. code unsigned char  mcu[] = {"专业元件供应商!"};
  25. code unsigned char  qq[] = {"  QQ: 571630059 "};
  26. code unsigned char tmp[]={//128*64点阵图形数据
  27. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  28. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  29. …………限于本文篇幅 余下代码请从51黑下载附件…………
  30. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  31. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};

  32. void main(void)
  33. {
  34. Delay400Ms(); //启动等待,等LCD讲入工作状态
  35. LCDInit(); //LCM初始化
  36. Delay5Ms(); //延时片刻(可不要)
  37. while(1){
  38.                  LCDClear();
  39.                 DisplayImage(tmp);//显示图形
  40.                 Delay400Ms();
  41.                 Delay400Ms();
  42.                 Delay400Ms();
  43.                 Delay400Ms();
  44.                 Delay400Ms();
  45.                 LCDClear();
  46.                 DisplayListChar(0,1,uctech);        //显示字库中的中文数字
  47.                  DisplayListChar(0,2,net);                //显示字库中的中文数字
  48.                 DisplayListChar(0,3,mcu);                //显示字库中的中文
  49.                 DisplayListChar(0,4,qq);                //显示字库中的中文数字
  50.                 Delay400Ms();
  51.                 Delay400Ms();
  52.                 Delay400Ms();
  53.                 Delay400Ms();
  54.                  LCDFlash();        //闪烁效果
  55.                 //}
  56.         }
  57. }

  58. //写数据
  59. void WriteDataLCD(unsigned char WDLCD)
  60. {
  61. ReadStatusLCD(); //检测忙
  62. LCD_RS = 1;
  63. LCD_RW = 0;
  64. LCD_Data = WDLCD;
  65. LCD_E = 1;
  66. LCD_E = 1;
  67. LCD_E = 1;
  68. LCD_E = 0;
  69. }

  70. //写指令
  71. void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
  72. {
  73. if (BuysC) ReadStatusLCD(); //根据需要检测忙
  74. LCD_RS = 0;
  75. LCD_RW = 0;
  76. LCD_Data = WCLCD;
  77. LCD_E = 1;
  78. LCD_E = 1;
  79. LCD_E = 1;
  80. LCD_E = 0;  
  81. }

  82. //读数据
  83. unsigned char ReadDataLCD(void)
  84. {
  85. LCD_RS = 1;
  86. LCD_RW = 1;
  87. LCD_E = 0;
  88. LCD_E = 0;
  89. LCD_E = 1;
  90. return(LCD_Data);
  91. }

  92. //读状态
  93. unsigned char ReadStatusLCD(void)
  94. {
  95. LCD_Data = 0xFF;
  96. LCD_RS = 0;
  97. LCD_RW = 1;
  98. LCD_E = 1;
  99. while (LCD_Data & Busy); //检测忙信号
  100. LCD_E = 0;
  101. return(LCD_Data);
  102. }

  103. void LCDInit(void) //LCM初始化
  104. {
  105. WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号
  106. WriteCommandLCD(0x01,1); //显示清屏
  107. WriteCommandLCD(0x06,1); // 显示光标移动设置
  108. WriteCommandLCD(0x0C,1); // 显示开及光标设置
  109. }
  110. void LCDClear(void) //清屏
  111. {
  112. WriteCommandLCD(0x01,1); //显示清屏
  113. WriteCommandLCD(0x34,1); // 显示光标移动设置
  114. WriteCommandLCD(0x30,1); // 显示开及光标设置
  115. }
  116. void LCDFlash(void)        //闪烁效果
  117. {
  118. WriteCommandLCD(0x08,1); //显示清屏
  119. Delay400Ms();
  120. WriteCommandLCD(0x0c,1); // 显示开及光标设置
  121. Delay400Ms();
  122. WriteCommandLCD(0x08,1); //显示清屏
  123. Delay400Ms();
  124. WriteCommandLCD(0x0c,1); // 显示开及光标设置
  125. Delay400Ms();
  126. WriteCommandLCD(0x08,1); //显示清屏
  127. Delay400Ms();
  128. }
  129. //按指定位置显示一个字符
  130. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  131. {
  132. if(Y<1)
  133.          Y=1;
  134. if(Y>4)
  135.          Y=4;
  136. X &= 0x0F; //限制X不能大于16,Y不能大于1
  137. switch(Y){
  138.         case 1:X|=0X80;break;
  139.         case 2:X|=0X90;break;
  140.         case 3:X|=0X88;break;
  141.         case 4:X|=0X98;break;
  142.         }
  143. WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
  144. WriteDataLCD(DData);
  145. }

  146. //按指定位置显示一串字符
  147. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  148. {
  149. unsigned char ListLength,X2;
  150.   ListLength = 0;
  151.   X2=X;
  152. if(Y<1)
  153.          Y=1;
  154. if(Y>4)
  155.          Y=4;
  156. X &= 0x0F; //限制X不能大于16,Y在1-4之内
  157. switch(Y){
  158.         case 1:X2|=0X80;break;        //根据行数来选择相应地址
  159.         case 2:X2|=0X90;break;
  160.         case 3:X2|=0X88;break;
  161.         case 4:X2|=0X98;break;
  162.         }
  163. WriteCommandLCD(X2, 1); //发送地址码
  164.   while (DData[ListLength]>=0x20) //若到达字串尾则退出
  165.   {
  166.    if (X <= 0x0F) //X坐标应小于0xF
  167.     {
  168.      WriteDataLCD(DData[ListLength]); //
  169.      ListLength++;
  170.          X++;
  171.          Delay5Ms();
  172.     }
  173.   }
  174. }

  175. //图形显示122*32
  176. void DisplayImage (unsigned char code *DData){
  177.         unsigned char x,y,i;
  178.         unsigned int tmp=0;
  179.         for(i=0;i<9;){                //分两屏,上半屏和下半屏,因为起始地址不同,需要分开
  180.         for(x=0;x<32;x++){                                //32行
  181.                 WriteCommandLCD(0x34,1);
  182. ……………………

  183. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
12864说明书+例子程序.rar (608.94 KB, 下载次数: 22)


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

使用道具 举报

沙发
ID:278249 发表于 2018-1-25 11:58 | 只看该作者
这个不是淘宝买12864时送的资料么?http://pan.baidu.com/s/1c2FB2FY
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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