找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有关LCD1602动态显示的源程序和仿真原理图

[复制链接]
跳转到指定楼层
楼主
ID:144383 发表于 2016-10-25 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了一个基本的1602动态显示程序供大家参考!希望能给初学者带来帮助。

字符式LCD滚动显示.rar

71.46 KB, 下载次数: 30, 下载积分: 黑币 -5

1602

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

使用道具 举报

沙发
ID:1 发表于 2016-11-13 21:33 | 只看该作者
  1. #include "stc15f2k60s2.h"
  2. #include"intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit  lcd_rs=P0^7;
  6. sbit  lcd_rw=P0^6;
  7. sbit  lcd_en=P0^5;
  8. uchar idata dis0[]={"            "};
  9. uchar idata dis1[]={"hdxydxc@163.com"};  
  10. uchar idata dis2[]={"QQ:1767104479"};
  11. uchar idata dis3[]={"2016-10-20"} ;
  12. uchar idata dis4[]= {"I LOVE YOU"};
  13. void delay(uchar ms)
  14. {
  15.         uchar i;
  16.                 while(ms--)
  17.                         {
  18.                                 for(i=0;i<120;i++);
  19.                         }
  20. }



  21. uchar Busy_Check(void)//   测试LCD忙碌状态
  22. {
  23.         uchar LCD_Status;
  24.         lcd_rs=0;
  25.         lcd_rw=1;
  26.         lcd_en=1;
  27.         _nop_ ();
  28.         _nop_ ();
  29.         _nop_ ();
  30.         _nop_ ();
  31.         LCD_Status=P0&0x80;
  32.         lcd_en=0;
  33.         return LCD_Status;
  34. }
  35. void lcd_wcmd(uchar cmd)  //写入指令数据到LCD
  36. {                                                  
  37.         while(Busy_Check()); //等待LCD空闲
  38.         lcd_rs=0;
  39.         lcd_rw=0;
  40.         lcd_en=0;
  41.         _nop_ ();
  42.         _nop_ ();
  43.         P2=cmd;
  44.         _nop_ ();
  45.         _nop_ ();
  46.         _nop_ ();
  47.         _nop_ ();
  48.         lcd_en=1;
  49.         _nop_ ();
  50.         _nop_ ();
  51.         _nop_ ();
  52.         _nop_ ();
  53.         lcd_en=0;

  54. }
  55. void lcd_pos(uchar pos)          //  设定显示位置
  56. {
  57.         lcd_wcmd(pos|0x80);        //设置LCD当前光标的位置
  58. }
  59. void lcd_wdat(uchar dat)//写入字符显示数据到LCD
  60. {                                                                                                       
  61.         while(Busy_Check());        //等待LCD空闲
  62.     lcd_rs=1;
  63.         lcd_rw=0;
  64.         lcd_en=0;
  65.         P2=dat;
  66.         _nop_ ();
  67.         _nop_ ();
  68.         _nop_ ();
  69.         _nop_ ();
  70.         lcd_en=1;
  71.         _nop_ ();
  72.         _nop_ ();
  73.         _nop_ ();
  74.         _nop_ ();
  75.         lcd_en=0;
  76. }

  77. void LCD_disp(void)        //向上滚动
  78. {
  79.         uchar i;
  80.         lcd_pos(1);         //设置显示位置为第一行的第二个字符
  81.         i=0;
  82.         while(dis0[i]!='\0')
  83.         {
  84.                 lcd_wdat(dis0[i]);        //在第一行显示字符串“”
  85.                 i++;

  86.         }
  87.         delay(1200);
  88.         lcd_pos(0x41);//设置显示位置为第二行第二个字符
  89.         i=0;
  90.         while(dis1[i]!='\0')
  91.         {
  92.                 lcd_wdat(dis1[i]);         //在第1行显示字符串“hdxydxc@163.com”
  93.                 i++;
  94.         }



  95.         delay(200);
  96.         lcd_wcmd(0x01);        //清除LCD显示内容
  97.         delay(1);
  98.         lcd_pos(1);//设置显示位置为第一行第二个字符
  99.         i=0;
  100.                 while(dis1[i]!='\0')
  101.         {
  102.                 lcd_wdat(dis1[i]);        //在第一行显示字符串“hdxydxc@163.com”
  103.                 i++;

  104.         }
  105.         delay(1200);
  106.         lcd_pos(0x41);//设置显示位置为第二行第二个字符
  107.         i=0;
  108.         while(dis2[i]!='\0')
  109.         {
  110.                 lcd_wdat(dis2[i]);         //在第二行显示字符串“QQ:1767104479”
  111.                 i++;
  112.         }


  113.         delay(200);
  114.         lcd_wcmd(0x01);        //清除LCD显示内容
  115.         delay(1);
  116.         lcd_pos(1);//设置显示位置为第一行第二个字符
  117.         i=0;
  118.                 while(dis1[i]!='\0')
  119.         {
  120.                 lcd_wdat(dis2[i]);        //在第一行显示字符串“QQ:1767104479”
  121.                 i++;

  122.         }
  123.         delay(1200);
  124.         lcd_pos(0x41);//设置显示位置为第二行第二个字符
  125.         i=0;
  126.         while(dis3[i]!='\0')
  127.         {
  128.                 lcd_wdat(dis3[i]);         //在第二行显示字符串“2016-10-20”
  129.                 i++;
  130.         }



  131.         delay(200);
  132.         lcd_wcmd(0x01);        //清除LCD显示内容
  133.         delay(1);
  134.         lcd_pos(1);//设置显示位置为第一行第二个字符
  135.         i=0;
  136.                 while(dis3[i]!='\0')
  137.         {
  138.                 lcd_wdat(dis3[i]);        //在第一行显示字符串“2016-10-20”
  139.                 i++;

  140.         }
  141.         delay(1200);
  142.         lcd_pos(0x41);//设置显示位置为第二行第二个字符
  143.         i=0;
  144.         while(dis4[i]!='\0')
  145.         {
  146.                 lcd_wdat(dis4[i]);         //在第二行显示字符串“I LOVE YOU”
  147.                 i++;
  148.         }




  149.         delay(200);
  150.         lcd_wcmd(0x01);        //清除LCD显示内容
  151.         delay(1);
  152.         lcd_pos(1);//设置显示位置为第一行第二个字符
  153.         i=0;
  154.                 while(dis4[i]!='\0')
  155.         {
  156.                 lcd_wdat(dis4[i]);        //在第一行显示字符串“I LOVE YOU”
  157.                 i++;

  158.         }
  159.         delay(1200);
  160.         lcd_pos(0x41);//设置显示位置为第二行第二个字符
  161.         i=0;
  162.         while(dis1[i]!='\0')
  163.         {
  164.                 lcd_wdat(dis1[i]);         //在第二行显示字符串“hdxydxc@163.com”
  165.                 i++;
  166.         }


  167.         delay(200);
  168.         lcd_wcmd(0x01);        //清除LCD显示内容
  169.         delay(1);
  170. }
  171. void lcd_init(void)        //LCD初始化设定
  172. {
  173.                 lcd_wcmd(0x38);        //设置显示格式为:16*2行显示,5*7点阵,8位数据接口
  174.                 delay(1);
  175.                 lcd_wcmd(0x0c);//0x0f--显示开关设置,显示光标并闪烁
  176.                 delay(1);
  177.                 lcd_wcmd(0x06);//0x06--读写后指针加1
  178.                 delay(1);
  179.                 lcd_wcmd(0x01);        // 清除LCD显示内容
  180.                 delay(1);
  181. }
  182. void main(void)
  183. {
  184.          lcd_init();  //   初始化LCD
  185.          delay(10);
  186.          
  187.          while(1)
  188.          {
  189.                  LCD_disp();
  190.          }
  191. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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