亚博智能论坛  
  
查看: 574|回复: 0

1602 滚动显示

  [复制链接]

该用户从未签到

18

主题

43

帖子

114

积分

新手上路

Rank: 1

积分
114
发表于 2017-6-22 15:58:17 | 显示全部楼层 |阅读模式

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. typedef unsigned char BYTE;
  4. typedef bit BOOL;  

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

  8. BYTE code dis1[] = {"   WELCOME  TO   "};
  9. BYTE code dis2[] = {" WWW.PRECHIN.COM "};
  10. BYTE code dis3[] = {"   OT  EMOCLEW   "};
  11. BYTE code dis4[] = {" MOC.NIHCERP.WWW "};

  12. delay(int ms)
  13. {                           // 延时子程序
  14. int i;
  15. while(ms--)
  16. {
  17.   for(i = 0; i< 250; i++)
  18.   {
  19.    _nop_();
  20.    _nop_();
  21.    _nop_();
  22.    _nop_();
  23.   }
  24. }
  25. }

  26. BOOL lcd_bz()
  27. {                          // 测试LCD忙碌状态
  28. BOOL result;
  29. LCD_RS = 0;
  30. LCD_RW = 1;
  31. LCD_EP = 1;
  32. _nop_();
  33. _nop_();
  34. _nop_();
  35. _nop_();
  36. result = (BOOL)(P0 & 0x80);
  37. LCD_EP = 0;
  38. return result;
  39. }

  40. lcd_wcmd(BYTE cmd)
  41. {                          // 写入指令数据到LCD
  42. while(lcd_bz());
  43. LCD_RS = 0;
  44. LCD_RW = 0;
  45. LCD_EP = 0;
  46. _nop_();
  47. _nop_();
  48. P0 = cmd;
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. _nop_();
  53. LCD_EP = 1;
  54. _nop_();
  55. _nop_();
  56. _nop_();
  57. _nop_();
  58. LCD_EP = 0;  
  59. }

  60. lcd_pos(BYTE pos)
  61. {                          //设定显示位置
  62. lcd_wcmd(pos | 0x80);
  63. }

  64. lcd_wdat(BYTE dat)
  65. {                          //写入字符显示数据到LCD
  66. while(lcd_bz());
  67. LCD_RS = 1;
  68. LCD_RW = 0;
  69. LCD_EP = 0;
  70. P0 = dat;
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. _nop_();
  75. LCD_EP = 1;
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. _nop_();
  80. LCD_EP = 0;
  81. }

  82. lcd_init()
  83. {                        //LCD初始化设定
  84. lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
  85. delay(1);
  86. lcd_wcmd(0x0c);          //显示开,关光标
  87. delay(1);
  88. lcd_wcmd(0x06);          //移动光标
  89. delay(1);
  90. lcd_wcmd(0x01);          //清除LCD的显示内容
  91. delay(1);
  92. }

  93. main()
  94. {
  95.       BYTE i;
  96.       lcd_init();               // 初始化LCD
  97.       delay(10);

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

  118.       lcd_wcmd(0x01);            //清除LCD的显示内容
  119.       delay(1);
  120.       lcd_wcmd(0x04);            //向左移动光标
  121.      
  122.       lcd_pos(15);               //设置显示位置为第一行的第16个字符
  123.       i = 0;
  124.      while(dis3[ i ] != '\0')
  125.      {                           //显示字符"WLCOME  TO"
  126.        lcd_wdat(dis3[ i ]);
  127.        i++;
  128.        delay(30);                //控制两字之间显示速度
  129.      }
  130.       lcd_pos(0x4F);             //设置显示位置为第二行的第16个字符
  131.       i = 0;
  132.      while(dis4[ i ] != '\0')
  133.      {
  134.        lcd_wdat(dis4[ i ]);      //显示字符" WWW.PRECHIN.COM  "
  135.        i++;
  136.        delay(30);                //控制两字之间显示速度
  137.      }
  138.       delay(800);                //控制停留时间

  139.       lcd_wcmd(0x01);            //清除LCD的显示内容
  140.       delay(200);                //控制两屏转换时间
  141.          
  142.    }
  143. }
复制代码


回复

使用道具 举报

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

本版积分规则

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