找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 49565|回复: 78
收起左侧

LCD12864中文液晶屏显示(含仿真和程序)

  [复制链接]
ID:102056 发表于 2017-9-21 00:04 | 显示全部楼层 |阅读模式
仿真报错的请看这里!!!
使用proteus中12864液晶再也不用担心没有字库了?
http://www.51hei.com/bbs/dpj-59193-1.html

QQ截图20170920231434.jpg QQ截图20170920232504.jpg

单片机源程序如下:
  1. /* ***************************************************** */
  2. // QQ交流 :1181826414
  3. /* ***************************************************** */
  4. // 工  程   : 51单片机开发板
  5. // 文件名   : LCD12864.c
  6. // 处理器   : STC89C52RC
  7. // 编译环境 : Keil4 C51
  8. // 系统时钟 : 11.0592MHZ
  9. // 版    本        : V1.0
  10. // 生成日期        : 2017-09-20                                                  
  11. // 修改日期        :  
  12. // 简单描述 : 本文件是带字库LCD12864显示程序
  13. /* ***************************************************** */
  14. #include <reg52.h>
  15. #define uint unsigned int
  16. #define uchar unsigned char
  17. #define Lcd_Bus P0 //数据总线
  18. /* ***************************************************** */
  19. // 位定义
  20. /* ***************************************************** */
  21. sbit RS=P2^4;     //数据/命令选择端(H/L)
  22. sbit RW=P2^5;    //数/写选择端(H/L)
  23. sbit E=P2^6;     //使能信号
  24. /* ***************************************************** */
  25. // 函数名称:DelayMS()
  26. // 函数功能:延时毫秒数(ValMS)
  27. // 入口参数:无
  28. // 出口参数:无
  29. /* ***************************************************** */
  30. void DelayMS(uint ValMS)
  31. {
  32.         uint uiVal,ujVal;
  33.         for(uiVal = 0; uiVal < ValMS; uiVal++)
  34.                 for(ujVal = 0; ujVal < 121; ujVal++);
  35. }
  36. /* ***************************************************** */
  37. // 函数名称hk_busy()
  38. // 函数功能:检测状态标志位(判断是忙/闲)
  39. // 入口参数:无
  40. // 出口参数:无
  41. /* ***************************************************** */
  42. void chk_busy()
  43. {  
  44.           Lcd_Bus=0x00;
  45.     RS=0;
  46.     RW=1;
  47.     E=1;  
  48.           DelayMS(1);
  49.     while(Lcd_Bus & 0x80);   // 若LCD忙,停止到这里,否则走起
  50.     E=0;                // 之后将EN初始化为低电平
  51. }

  52. /* ***************************************************** */
  53. // 函数名称rite_com()
  54. // 函数功能:LCD写指令
  55. // 入口参数:指令(cmdcode)
  56. // 出口参数:无
  57. /* ***************************************************** */
  58. void write_com(unsigned char cmdcode)
  59. {
  60.         chk_busy();     //忙检查
  61.         RS=0;
  62.         RW=0;      //RS=0,RW=0;表示MCU写指令到暂存器IR
  63.         E=1;
  64.         Lcd_Bus=cmdcode;   //Lcd_Bus=P0;
  65.         E=0;      //E由高到低变化配合W进行写指令或写数据

  66. }
  67. /* ***************************************************** */
  68. // 函数名称rite_data()
  69. // 函数功能:LCD写数据
  70. // 入口参数:数据(Dispdata)
  71. // 出口参数:无
  72. /* ***************************************************** */
  73. void write_data(unsigned char Dispdata)
  74. {  
  75.   chk_busy();     //忙检查
  76.         RS=1;
  77.         RW=0;      //RS=1;RW=0;表示MCU写数据到暂存器IR
  78.         E=1;
  79.         Lcd_Bus=Dispdata;  //Lcd_Bus=P0;
  80.         E=0;      //E由高到低变化配合W进行写指令或写数据
  81. }
  82. /* ***************************************************** */
  83. // 函数名称:lcm_init()
  84. // 函数功能:LCD初始化
  85. // 入口参数:无
  86. // 出口参数:无
  87. /* ***************************************************** */
  88. void lcm_init()
  89. {         
  90.    write_com(0x30);    //选择8bit数据流 0X30=0011,0000
  91.          DelayMS(10);
  92.    write_com(0x0C);    //开显示(无游标,不反白)
  93.          DelayMS(10);
  94.    write_com(0x01);    //清除显示,并且设定地址指针为00H
  95.          DelayMS(10);
  96. }
  97. //============================================================//写数据或指令(被调用层)
  98. void lcm_w_test(bit i,unsigned char word)
  99. {
  100.    if(i == 0)   //根据i的状态区分指令或数据
  101.          {   
  102.       write_com(word);//写数据或指令(0,指令)
  103.    }
  104.    else
  105.         {
  106.    write_data(word);//写指令或数据(1,数据)
  107.   }
  108. }
  109. //-----------------------------------------------------------//清屏函数
  110. void lcm_clr(void){
  111.    lcm_w_test(0,0x01);
  112. }
  113. //===========================================================//向LCM发送一个字符串,长度64字符之内(被调用层),
  114. void lcm_w_word(unsigned char *s)
  115. {
  116.     while(*s>0)  //*s指针
  117.          {     
  118.       write_data(*s);//用指针显示数据地址
  119.       s++;      //自加显示下一个数据地址
  120.     }
  121. }
  122. void welcome(void)        //初始化开机显示
  123. {
  124.     lcm_w_test(0,0x81);   //写指令和地址
  125.     lcm_w_word ("空山新雨后,"); //写显示数据
  126.     lcm_w_test(0,0x91);
  127. ……………………

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

所有资料51hei提供下载:
字库LCD12864液晶.zip (297.99 KB, 下载次数: 1742)

评分

参与人数 5黑币 +81 收起 理由
stkh + 8 很给力!
莫子栋 + 5 共享资料的黑币奖励!
chef + 10 赞一个!
almsy + 8 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:44037 发表于 2017-10-24 20:58 | 显示全部楼层
谢谢分享   学习一下
回复

使用道具 举报

ID:259837 发表于 2017-12-10 18:56 | 显示全部楼层
不错,学习了
回复

使用道具 举报

ID:333436 发表于 2018-7-19 07:52 来自手机 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:4294 发表于 2018-7-30 06:05 | 显示全部楼层
好资料,学习了,谢谢
回复

使用道具 举报

ID:355325 发表于 2018-7-30 10:22 | 显示全部楼层
不错哦
回复

使用道具 举报

ID:385852 发表于 2018-8-17 10:47 | 显示全部楼层
正需要的东西,非常感谢
回复

使用道具 举报

ID:382800 发表于 2018-9-1 16:28 | 显示全部楼层
为什么液晶左上方显示了几串数字,程序中并没有写这个。
回复

使用道具 举报

ID:393260 发表于 2018-9-27 08:00 来自手机 | 显示全部楼层
也就51黑的代码能放心用
回复

使用道具 举报

ID:403645 发表于 2018-9-28 16:48 | 显示全部楼层
为啥能直接显示汉字,带字库的应该用两个字节,不带字库的应该取模啊,看不太懂
回复

使用道具 举报

ID:403645 发表于 2018-9-28 16:49 | 显示全部楼层
为什么可以直接显示汉字,带字库的应该用两个字节啊,不带字库取模,这个看不太懂
回复

使用道具 举报

ID:307643 发表于 2018-9-28 17:06 | 显示全部楼层
有用的
回复

使用道具 举报

ID:411156 发表于 2018-10-17 15:50 | 显示全部楼层
正在用,正好学习一下
回复

使用道具 举报

ID:185258 发表于 2018-10-17 17:42 | 显示全部楼层
学习来了
回复

使用道具 举报

ID:214223 发表于 2018-10-24 11:22 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:321559 发表于 2018-10-25 23:24 | 显示全部楼层
下来后 lcd12864.dll的大小不对啊
回复

使用道具 举报

ID:321559 发表于 2018-10-25 23:29 | 显示全部楼层
运行后不对……
回复

使用道具 举报

ID:391361 发表于 2018-11-1 10:16 | 显示全部楼层
谢谢分享。学习学习
回复

使用道具 举报

ID:298195 发表于 2018-11-20 22:31 | 显示全部楼层
已下载学习,谢谢楼主分享
回复

使用道具 举报

ID:393698 发表于 2018-11-22 12:16 来自手机 | 显示全部楼层
这个可以啊
回复

使用道具 举报

ID:427657 发表于 2018-11-30 09:44 | 显示全部楼层
谢谢分享   学习一下
回复

使用道具 举报

ID:437661 发表于 2018-12-2 14:32 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:451217 发表于 2018-12-22 13:45 | 显示全部楼层
学习学习啦
回复

使用道具 举报

ID:449525 发表于 2018-12-24 15:40 | 显示全部楼层
其实这个屏幕,排线太多了,而且价格比较贵,现在好多用定制的lcd屏幕,网上参考的代码真的少,不过楼主刚刚学习还是可以的啊。赞一个
回复

使用道具 举报

ID:417092 发表于 2018-12-25 11:00 | 显示全部楼层
我的软件里,为什么找不到这个屏呀。
回复

使用道具 举报

ID:473027 发表于 2019-1-26 10:18 | 显示全部楼层
毕业设计要用到这个中文屏,得好好学习一下
回复

使用道具 举报

ID:285175 发表于 2019-1-27 16:09 | 显示全部楼层
我居然看懂了
回复

使用道具 举报

ID:67085 发表于 2019-1-30 18:01 | 显示全部楼层
很赞!
回复

使用道具 举报

ID:404374 发表于 2019-2-27 16:45 | 显示全部楼层
为什么仿真什么都没有,难受
回复

使用道具 举报

ID:482449 发表于 2019-3-1 15:13 | 显示全部楼层
为什么我用你的HEX烧写就能显示,我自己改显示的中文就显示不了
回复

使用道具 举报

ID:404981 发表于 2019-4-5 15:59 | 显示全部楼层
我想问一下楼主的protues是什么版本的?谢谢
回复

使用道具 举报

ID:404981 发表于 2019-4-8 17:05 | 显示全部楼层
感谢楼主的分享,我发现我的protuel直接复制这个器件无法正常工作
回复

使用道具 举报

ID:504391 发表于 2019-4-14 20:10 | 显示全部楼层
很好用 我最爱
回复

使用道具 举报

ID:512152 发表于 2019-4-15 11:49 | 显示全部楼层
下载看看怎么样
回复

使用道具 举报

ID:318492 发表于 2019-4-15 17:26 | 显示全部楼层
感谢感谢
回复

使用道具 举报

ID:502817 发表于 2019-4-15 21:32 | 显示全部楼层
谢谢分享,小白求教,怎样编写程序实现建立XY轴并显示动态波形图呢?求程序分享。
回复

使用道具 举报

ID:515634 发表于 2019-4-18 17:10 | 显示全部楼层
谢谢分享,小白求救
回复

使用道具 举报

ID:521143 发表于 2019-4-25 10:33 | 显示全部楼层
很实用
回复

使用道具 举报

ID:102056 发表于 2019-5-9 20:08 来自手机 | 显示全部楼层
ly2087 发表于 2019-4-5 15:59
我想问一下楼主的protues是什么版本的?谢谢

Protues7.9
回复

使用道具 举报

ID:426662 发表于 2019-5-23 15:36 | 显示全部楼层
很好!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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