找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动LCD1602液晶液晶滚动显示

[复制链接]
跳转到指定楼层
楼主
ID:361216 发表于 2018-7-6 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /********************************************************************************
  2. *  描述:                LCD1602 滚动显示                                       *
  3. * 显示方式:                                                                   *
  4. * 1、从左到右逐字显示,闪动二次,清屏。                                        *
  5. * 2、再从右到左逐字显示,闪动二次,清屏。                                      *
  6. * 3、周期性地重复上述显示方式。                                                *                           
  7. ********************************************************************************/

  8. #include <reg51.h>
  9. #include <intrins.h>

  10. typedef unsigned char BYTE;
  11. typedef bit BOOL;  

  12. sbit LCD_RS = P2^6;            
  13. sbit LCD_RW = P2^5;
  14. sbit LCD_EP = P2^7;

  15. BYTE code dis1[] = {"   WELCOME  TO   "};
  16. BYTE code dis2[] = {" WWW.baidu.COM "};
  17. BYTE code dis3[] = {"   OT  EMOCLEW   "};
  18. BYTE code dis4[] = {" MOC*udiab*WWW "};

  19. delay(int ms)
  20. {                           // 延时子程序
  21. int i;
  22. while(ms--)
  23. {
  24.   for(i = 0; i< 250; i++)
  25.   {
  26.    _nop_();
  27.    _nop_();
  28.    _nop_();
  29.    _nop_();
  30.   }
  31. }
  32. }

  33. BOOL lcd_bz()
  34. {                          // 测试LCD忙碌状态
  35. BOOL result;
  36. LCD_RS = 0;
  37. LCD_RW = 1;
  38. LCD_EP = 1;
  39. _nop_();
  40. _nop_();
  41. _nop_();
  42. _nop_();
  43. result = (BOOL)(P0 & 0x80);
  44. LCD_EP = 0;
  45. return result;
  46. }

  47. lcd_wcmd(BYTE cmd)
  48. {                          // 写入指令数据到LCD
  49. while(lcd_bz());
  50. LCD_RS = 0;
  51. LCD_RW = 0;
  52. LCD_EP = 0;
  53. _nop_();
  54. _nop_();
  55. P0 = cmd;
  56. _nop_();
  57. _nop_();
  58. _nop_();
  59. _nop_();
  60. LCD_EP = 1;
  61. _nop_();
  62. _nop_();
  63. _nop_();
  64. _nop_();
  65. LCD_EP = 0;  
  66. }

  67. lcd_pos(BYTE pos)
  68. {                          //设定显示位置
  69. lcd_wcmd(pos | 0x80);
  70. }

  71. lcd_wdat(BYTE dat)
  72. {                          //写入字符显示数据到LCD
  73. while(lcd_bz());
  74. LCD_RS = 1;
  75. LCD_RW = 0;
  76. LCD_EP = 0;
  77. P0 = dat;
  78. _nop_();
  79. _nop_();
  80. _nop_();
  81. _nop_();
  82. LCD_EP = 1;
  83. _nop_();
  84. _nop_();
  85. _nop_();
  86. _nop_();
  87. LCD_EP = 0;
  88. }

  89. lcd_init()
  90. {                        //LCD初始化设定
  91. lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
  92. delay(1);
  93. lcd_wcmd(0x0c);          //显示开,关光标
  94. delay(1);
  95. lcd_wcmd(0x06);          //移动光标
  96. delay(1);
  97. lcd_wcmd(0x01);          //清除LCD的显示内容
  98. delay(1);
  99. }

  100. main()
  101. {
  102.       BYTE i;
  103.       lcd_init();               // 初始化LCD
  104.       delay(10);

  105.     while(1)              
  106.    {
  107.       lcd_wcmd(0x06);            //向右移动光标
  108.       lcd_pos(0);                //设置显示位置为第一行的第1个字符
  109.       i = 0;
  110.      while(dis1[ i ] != '\0')
  111.      {                           //显示字符"WLCOME  TO"
  112.        lcd_wdat(dis1[ i ]);
  113.        i++;
  114.        delay(30);                //控制两字之间显示速度
  115.      }
  116.       lcd_pos(0x40);             //设置显示位置为第二行第1个字符
  117.       i = 0;
  118.      while(dis2[ i ] != '\0')
  119.      {
  120.        lcd_wdat(dis2[ i ]);      //显示字符
  121.        i++;
  122.        delay(30);                //控制两字之间显示速度
  123.      }
  124.       delay(800);                //控制停留时间

  125.       lcd_wcmd(0x01);            //清除LCD的显示内容
  126.       delay(1);
  127.       lcd_wcmd(0x04);            //向左移动光标

  128.       lcd_pos(15);               //设置显示位置为第一行的第16个字符
  129.       i = 0;
  130.      while(dis3[ i ] != '\0')
  131.      {                           //显示字符"WLCOME  TO"
  132.        lcd_wdat(dis3[ i ]);
  133.        i++;
  134.        delay(30);                //控制两字之间显示速度
  135.      }
  136.       lcd_pos(0x4F);             //设置显示位置为第二行的第16个字符
  137.       i = 0;
  138.      while(dis4[ i ] != '\0')
  139.      {
  140.        lcd_wdat(dis4[ i ]);      //显示字符" WWW.baidu.COM  "
  141.        i++;
  142.        delay(30);                //控制两字之间显示速度
  143.      }
  144.       delay(800);                //控制停留时间

  145.       lcd_wcmd(0x01);            //清除LCD的显示内容
  146.       delay(200);                //控制两屏转换时间

  147.    }
  148. }
复制代码

所有资料51hei提供下载:
液晶滚动显示.zip (42.21 KB, 下载次数: 17)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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