找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD12864、STC15 单片机并行连接方式多文件编程

[复制链接]
跳转到指定楼层
楼主
ID:369306 发表于 2019-7-21 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #ifndef __LCD12864_H__
  2. #define __LCD12864_H__
  3. #include<stc15.h>
  4. #define DataPort P0        //MCU P0<------> LCM
  5. sbit RS=P5^5;
  6. sbit RW=P4^2;
  7. sbit E=P4^1;
  8. sbit PSB=P1^1;
  9. sbit RES=P1^0;
  10. /*????????*/
  11. //??????λ
  12. void Check_Busy();
  13. //д???
  14. void Write_Cmd(unsigned char Cmd);
  15. //д????
  16. void Write_Data(unsigned char Data);
  17. //LCD?????????
  18. void Init_LCD12864();
  19. //???????????
  20. void CGRAM();
  21. //??????????????
  22. void DisplayCGRAM(unsigned char x,unsigned char y);
  23. //????????  x:???????????Χ0~8  y:???????????Χ1~4
  24. void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s);
  25. //????
  26. void ClrScreen();
  27. //?????
  28. void LCD_PutGraphic(unsigned char code *img);
  29. //??????????
  30. void SetGraphicMode();
  31. #endif



  32. #include"LCD12864.h"
  33. #include "delay.h"[/b]
  34. //????λ
  35. void Check_Busy()
  36. {  
  37.     RS=0;
  38.     RW=1;
  39.     E=1;
  40.     DataPort=0xff;
  41.     while((DataPort&0x80)==0x80);//?????
  42.     E=0;
  43. }

  44. //д????
  45. [b]void Write_Cmd(unsigned char Cmd)
  46. {
  47. Check_Busy();
  48. RS=0;
  49. RW=0;
  50. E=1;
  51. DataPort=Cmd;
  52. DelayUs2x(5);
  53. E=0;
  54. DelayUs2x(5);
  55. }
  56. //д????
  57. [b]void Write_Data(unsigned char Data)
  58. {
  59. Check_Busy();
  60. RS=1;
  61. RW=0;
  62. E=1;
  63. DataPort=Data;
  64. DelayUs2x(5);
  65. E=0;
  66. DelayUs2x(5);
  67. }[/b]
  68. [b]
  69. //??????????
  70. void Init_LCD12864()
  71. {  
  72.    DelayMs(40);           //????40MS?????????
  73.    PSB=1;                 //?????8BIT?????????
  74.    DelayMs(1);            //???
  75.    RES=0;                 //??λ
  76.    DelayMs(1);            //???
  77.    RES=1;                 //??λ???
  78.    DelayMs(10);
  79.    Write_Cmd(0x30);       //?????????
  80.    DelayUs2x(50);         //???????100us
  81.    Write_Cmd(0x30);       //???8bit??????
  82.    DelayUs2x(20);         //???????37us
  83.    Write_Cmd(0x0c);       //?????(???α???????)
  84.    DelayUs2x(50);         //???????100us
  85.    Write_Cmd(0x01);       //?????????????趨???????00H
  86.    DelayMs(15);           //???????10ms
  87.    Write_Cmd(0x06);       //??????????????д??????趨?α???????????????????λ?????????????1λ???
  88.    DelayUs2x(50);         //???????100us
  89. }
  90. //???????????
  91. void CGRAM()
  92. {
  93.      Write_Cmd(0x30);
  94.      Write_Cmd(0x40);
  95. }
  96. //??????????????
  97. void DisplayCGRAM(unsigned char x,unsigned char y)
  98. {
  99. switch(y)
  100.      {
  101.    case 1: Write_Cmd(0x80+x);break;
  102.    case 2: Write_Cmd(0x90+x);break;
  103.    case 3: Write_Cmd(0x88+x);break;
  104.    case 4: Write_Cmd(0x98+x);break;
  105.       default:break;
  106.   }
  107.     Write_Data(00);
  108.     Write_Data(00);[/b]
  109. }      
  110. //????????  x:???????????Χ0~8  y:???????????Χ1~4
  111. void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s)
  112. {
  113. switch(y)
  114.      {
  115.    case 1: Write_Cmd(0x80+x);break;
  116.    case 2: Write_Cmd(0x90+x);break;
  117.    case 3: Write_Cmd(0x88+x);break;
  118.    case 4: Write_Cmd(0x98+x);break;
  119.       default:break;
  120.   }
  121. while(*s>0)
  122.    {
  123.       Write_Data(*s);
  124.       s++;
  125.       DelayUs2x(50);
  126.    }
  127. }[/b]
  128. [b]//????
  129. void ClrScreen()
  130. {
  131.    Write_Cmd(0x01);
  132.    DelayMs(15);
  133. }
  134.    
  135. //?????
  136. void LCD_PutGraphic(unsigned char code *img)
  137. {
  138. int i,j;
  139.   //????????????????
  140.    for(i=0;i<32;i++)            
  141.     {
  142.       Write_Cmd(0x80 + i); //SET  ?????? VERTICAL ADD
  143.       Write_Cmd(0x80);     //SET  ????? HORIZONTAL ADD
  144.       for(j=0;j<16;j++)
  145.        {
  146.          Write_Data(*img);
  147.          img++;
  148.        }
  149.     }
  150.   //????°???????????
  151.    for(i=0;i<32;i++)            
  152.     {
  153.       Write_Cmd(0x80 + i); //SET ?????? VERTICAL ADD
  154.       Write_Cmd(0x88);     //SET ????? HORIZONTAL ADD
  155.       for(j=0;j<16;j++)
  156.        {
  157.          Write_Data(*img);
  158.          img++;
  159.        }
  160.     }  
  161.            
  162. }
  163. //??????????
  164. void SetGraphicMode()
  165. {
  166.    Write_Cmd(0x36);       //???8bit?????? ?????
  167.    DelayUs2x(20);
  168. }  
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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