找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用51单片机控制LCD12864显示屏源程序

  [复制链接]
跳转到指定楼层
楼主
12864液晶在出厂时其对比度已经调好,所以用户在使用的时候第三管脚可不用接任何东西,本实验板上为了兼容多家12864液晶所以加了液晶对比度调节电位器,若用户使用我们配套的12864液晶可不用管它,液晶的第三管脚悬空就可以。有些液晶功耗比较大,用户在使用的时候可将液晶的第19、20引脚的背光不接,这样字体会很清楚。



单片机源程序如下:
  1. /**********************BST-V51实验开发板例程************************
  2. *  平台:BST-V51 + Keil U3 + STC89C52
  3. *  名称:
  4. *  晶振:11.0592MHZ
  5. *  说明:免费开源,不提供源代码分析.
  6. ******************************************************************/
  7. /*******************************************************************/
  8. /*                                                                 */
  9. /* 单片机开发系统演示程序 - 128*64LCD显示显示  */
  10. /*                                                                 */
  11. //;*  LCD型号:TS12864A-3(带汉字库)或兼容型号    控制器ST7920      */
  12. //;*  MCU:AT89S52 ,晶体频率:11.0592MHz                              */
  13. /*                                                                 */
  14. /*******************************************************************/

  15. #include <reg51.h>
  16. #include <intrins.h>
  17.        
  18. #define uchar unsigned char
  19. #define uint  unsigned int
  20. /*12864端口定义*/
  21. #define LCD_data  P0             //数据口
  22. sbit LCD_RS  =  P2^6;            //寄存器选择输入
  23. sbit LCD_RW  =  P2^5;            //液晶读/写控制
  24. sbit LCD_EN  =  P2^7;            //液晶使能控制
  25. sbit LCD_PSB =  P1^2;            //串/并方式控制
  26. sbit wela    =  P2^6;
  27. sbit dula    =  P2^7;

  28. uchar code dis1[] = {"看什么看!"};
  29. uchar code dis2[] = {"显示屏而已!"};
  30. uchar code dis3[] = {"少见多怪!"};
  31. uchar code dis4[] = {"那凉哪呆着!"};                  

  32. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  33. uchar IRDIS[2];
  34. uchar IRCOM[4];
  35. void delay0(uchar x);  //x*0.14MS
  36. void beep();
  37. void  dataconv();
  38. void lcd_pos(uchar X,uchar Y);  //确定显示位置
  39. /*******************************************************************/
  40. /*                                                                 */
  41. /*  延时函数                                                       */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void delay(int ms)
  45. {
  46.     while(ms--)
  47.         {
  48.       uchar i;
  49.           for(i=0;i<250;i++)  
  50.            {
  51.             _nop_();                          
  52.                 _nop_();
  53.                 _nop_();
  54.                 _nop_();
  55.            }
  56.         }
  57. }               
  58. /*******************************************************************/
  59. /*                                                                 */
  60. /*检查LCD忙状态                                                    */
  61. /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
  62. /*                                                                 */
  63. /*******************************************************************/
  64. bit lcd_busy()
  65. {                          
  66.     bit result;
  67.     LCD_RS = 0;
  68.     LCD_RW = 1;
  69.     LCD_EN = 1;
  70.     delayNOP();
  71.     result = (bit)(P0&0x80);
  72.     LCD_EN = 0;
  73.     return(result);
  74. }
  75. /*******************************************************************/
  76. /*                                                                 */
  77. /*写指令数据到LCD                                                  */
  78. /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  79. /*                                                                 */
  80. /*******************************************************************/
  81. void lcd_wcmd(uchar cmd)
  82. {                          
  83.    while(lcd_busy());
  84.     LCD_RS = 0;
  85.     LCD_RW = 0;
  86.     LCD_EN = 0;
  87.     _nop_();
  88.     _nop_();
  89.     P0 = cmd;
  90.     delayNOP();
  91.     LCD_EN = 1;
  92.     delayNOP();
  93.     LCD_EN = 0;  
  94. }
  95. /*******************************************************************/
  96. /*                                                                 */
  97. /*写显示数据到LCD                                                  */
  98. /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  99. /*                                                                 */
  100. /*******************************************************************/
  101. void lcd_wdat(uchar dat)
  102. {                          
  103.    while(lcd_busy());
  104.     LCD_RS = 1;
  105.     LCD_RW = 0;
  106.     LCD_EN = 0;
  107.     P0 = dat;
  108.     delayNOP();
  109.     LCD_EN = 1;
  110.     delayNOP();
  111.     LCD_EN = 0;
  112. }
  113. /*******************************************************************/
  114. /*                                                                 */
  115. /*  LCD初始化设定                                                  */
  116. /*                                                                 */
  117. /*******************************************************************/
  118. void lcd_init()
  119. {

  120.     LCD_PSB = 1;         //并口方式
  121.    
  122.     lcd_wcmd(0x34);      //扩充指令操作
  123.     delay(5);
  124.     lcd_wcmd(0x30);      //基本指令操作
  125.     delay(5);
  126.     lcd_wcmd(0x0C);      //显示开,关光标
  127.     delay(5);
  128.     lcd_wcmd(0x01);      //清除LCD的显示内容
  129.     delay(5);
  130. }
  131. /*********************************************************/
  132. /*                                                                                                                 */
  133. /* 主程序                                                                                    */
  134. /*                                                       */
  135. /*********************************************************/
  136.   main()
  137. {
  138.     uchar i;
  139.     delay(10);                 //延时
  140.     wela=0;
  141.         dula=0;
  142.     lcd_init();                //初始化LCD            
  143.   
  144.     lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
  145.      i = 0;
  146.     while(dis1[i] != '\0')
  147.      {                         //显示字符
  148.        lcd_wdat(dis1[i]);
  149.        i++;
  150.      }
  151.     lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
  152.      i = 0;
  153.     while(dis2[i] != '\0')
  154.      {
  155.        lcd_wdat(dis2[i]);      //显示字符
  156.        i++;
  157.      }
  158.          lcd_pos(2,0);             //设置显示位置为第三行的第1个字符
  159.      i = 0;
  160.     while(dis3[i] != '\0')
  161.      {
  162.        lcd_wdat(dis3[i]);      //显示字符
  163.        i++;
  164.      }
  165.          lcd_pos(3,0);             //设置显示位置为第四行的第1个字符
  166.      i = 0;
  167.     while(dis4[i] != '\0')
  168.      {
  169.        lcd_wdat(dis4[i]);      //显示字符
  170.        i++;
  171.      }
  172.      while(1);
  173. }



  174. /*********************************************************/
  175. /*                                                                                                                 */
  176. /* 延时x*0.14ms子程序                                                                         */
  177. /*                                                       */
  178. /*********************************************************/

  179. void delay0(uchar x)    //x*0.14MS
  180. {
  181.   uchar i;
  182. ……………………

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

所有资料51hei提供下载:
12864显示字符.rar (19.33 KB, 下载次数: 1635)


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

使用道具 举报

沙发
ID:382837 发表于 2018-8-4 15:43 来自手机 | 只看该作者
头文件是自己编写的吗
回复

使用道具 举报

板凳
ID:126254 发表于 2018-9-10 17:12 | 只看该作者
谢谢楼主了
回复

使用道具 举报

地板
ID:203947 发表于 2018-10-2 09:09 | 只看该作者
好好学习,日后有用之处
回复

使用道具 举报

5#
ID:241700 发表于 2018-10-27 17:55 | 只看该作者
好东西,收藏了,自己做小玩具的时候一定用得到。
回复

使用道具 举报

6#
ID:147492 发表于 2018-11-14 14:56 | 只看该作者
学习前辈~~~
回复

使用道具 举报

7#
ID:436579 发表于 2018-11-30 15:40 | 只看该作者
厉害。
回复

使用道具 举报

8#
ID:451217 发表于 2018-12-21 10:26 | 只看该作者
这文件好像在哪见过
回复

使用道具 举报

9#
ID:451363 发表于 2018-12-21 14:04 来自手机 | 只看该作者
学习学习
回复

使用道具 举报

10#
ID:213280 发表于 2018-12-23 10:13 | 只看该作者
sbit wela    =  P2^6;
sbit dula    =  P2^7;这两个是定义啥
回复

使用道具 举报

11#
ID:473264 发表于 2019-1-27 00:10 | 只看该作者
收藏
回复

使用道具 举报

12#
ID:490006 发表于 2019-3-14 16:39 | 只看该作者
感谢楼主大大,好人一生平安!!!
回复

使用道具 举报

13#
ID:490330 发表于 2019-4-3 08:47 | 只看该作者
十分感谢
回复

使用道具 举报

14#
ID:480412 发表于 2019-5-13 23:04 | 只看该作者
感谢楼主分享
回复

使用道具 举报

15#
ID:470493 发表于 2019-7-30 10:20 | 只看该作者
非常好用,感谢分享
回复

使用道具 举报

16#
ID:319288 发表于 2019-9-18 10:30 | 只看该作者
感谢楼主分享
回复

使用道具 举报

17#
ID:234544 发表于 2019-10-3 21:31 | 只看该作者
下载对话框总是一闪而过,怎么回事
回复

使用道具 举报

18#
ID:581801 发表于 2019-10-6 23:54 | 只看该作者
蓝琪 发表于 2018-12-23 10:13
sbit wela    =  P2^6;
sbit dula    =  P2^7;这两个是定义啥

楼主的开发板上P2^6,P2^7.有与数码管链接,所以需要定义这两个引脚,然后在初始化中关闭数码管。
回复

使用道具 举报

19#
ID:620768 发表于 2019-10-8 22:00 | 只看该作者
有下载的吗,求一份1273176424@qq.com
回复

使用道具 举报

20#
ID:470696 发表于 2019-10-21 00:01 来自手机 | 只看该作者
感谢楼主分享,小白我拿去研究一下
回复

使用道具 举报

21#
ID:198286 发表于 2019-10-22 17:15 | 只看该作者
学习一下,注释比较详细,适合初学者
回复

使用道具 举报

22#
ID:294754 发表于 2019-11-19 19:29 | 只看该作者
感谢分享
回复

使用道具 举报

23#
ID:643991 发表于 2019-11-19 23:28 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

24#
ID:649789 发表于 2019-11-26 11:26 | 只看该作者
原理图啥样呀
回复

使用道具 举报

25#
ID:648008 发表于 2019-12-3 01:27 | 只看该作者
求仿真电路图
回复

使用道具 举报

26#
ID:136189 发表于 2020-2-12 22:31 | 只看该作者
好好学习,日后有用之处
回复

使用道具 举报

27#
ID:421783 发表于 2020-3-10 20:46 | 只看该作者
蓝琪 发表于 2018-12-23 10:13
sbit wela    =  P2^6;
sbit dula    =  P2^7;这两个是定义啥

数码管位选 段选
回复

使用道具 举报

28#
ID:423533 发表于 2020-4-3 19:37 | 只看该作者
回帖是一种美德~~~~感谢分享
回复

使用道具 举报

29#
ID:419529 发表于 2020-4-14 08:42 | 只看该作者
感谢分享
回复

使用道具 举报

30#
ID:698810 发表于 2020-4-29 15:12 | 只看该作者

头文件是自己编写的吗
回复

使用道具 举报

31#
ID:231831 发表于 2020-4-30 09:58 | 只看该作者
我要二维码的,正在到处找!
回复

使用道具 举报

32#
ID:742667 发表于 2020-5-2 09:56 | 只看该作者
压缩包里有原理图吗?
回复

使用道具 举报

33#
ID:617947 发表于 2020-5-9 00:13 | 只看该作者
感谢楼主,。。。。
回复

使用道具 举报

34#
ID:560981 发表于 2020-5-11 16:22 | 只看该作者
感谢楼主,头文件要自己编写吗?
回复

使用道具 举报

35#
ID:750087 发表于 2020-5-19 21:24 来自手机 | 只看该作者
这跟刘清翔51单片机的教程源码一样
回复

使用道具 举报

36#
ID:775487 发表于 2020-6-26 13:38 | 只看该作者
用来测试新买的屏,非常好用!谢谢分享!
回复

使用道具 举报

37#
ID:807159 发表于 2020-12-8 13:54 | 只看该作者
用谱中的没运行成功
回复

使用道具 举报

38#
ID:870548 发表于 2021-1-12 20:35 | 只看该作者
请问有仿真图吗?
回复

使用道具 举报

39#
ID:784221 发表于 2021-1-25 15:25 | 只看该作者
运行不成功,屏上什么也没有
回复

使用道具 举报

40#
ID:784221 发表于 2021-1-25 15:42 | 只看该作者
额!我人傻了,我自己没搞清楚开发板上接口的位置顺序,导致显示不出来,还以为是程序的问题。楼主的程序是对的,感谢楼主大大,这对我非常有用,救我于水火之中!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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