找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的LCD1602滚动显示内容源程序

[复制链接]
跳转到指定楼层
楼主
单片机LCD实现以下功能在两行逐字显示内容后滚动显示
  1. #include<reg52.h>
  2. typedef unsigned char uint8;
  3. typedef unsigned int uint16;
  4. sbit rs=P2^6;
  5. sbit rw=P2^5;
  6. sbit e=P2^7;
  7. uint8 a[16]="zheeeg ti wwi    ";
  8. uint8 b[27]="ze asfeng xe xi 1w284g50hb6 ";
  9. void delay(uint16 i)  //1us
  10. {
  11.         while(i--);
  12. }
  13. void wrc(uint8 c)  /*写命令*/
  14. {
  15.         delay(1000);
  16.         rs=0;  //选择发送命令
  17.         rw=0;  //选择写入
  18.         e=0;   //使能清零
  19.         P0=c;        //放入命令
  20.         e=1;   //写入时序
  21.         delay(10); //保持时间
  22.         e=0;
  23.         /*
  24.         P0=c<<4;
  25.         e=1;
  26.         e=0;*/       //四位的LCD要加上
  27. }
  28. void wrd(uint8 dat)           /*读命令将数据写在LCD上*/
  29. {
  30.         delay(1000);
  31.         rs=1;         //选择输入数据
  32.         rw=0;        //选择写入
  33.         e=0;          //使能清零
  34.         P0=dat;         //写入数据
  35.         e=1;         //写入时序
  36.         delay(10);//保持时间
  37.         e=0;
  38.         /*
  39.         P0=dat<<4;
  40.         e=1;
  41.         e=0;           //四位的LCD要加上
  42.         rs=0;*/        
  43. }
  44. void init()          /*初始化设置*/
  45. {
  46.         delay(1000);
  47.         /*wrc(0x32);         
  48.         wrc(0x28);
  49.         wrc(0x28);        */        //四位的LCD要加上
  50.         wrc(0x38);         //8位数据总线,显示两行,5*10点阵        
  51.         wrc(0x0c);        
  52.         wrc(0x01);        
  53. }
  54. void display()
  55. {
  56.         uint8 i;
  57.         wrc(0x00+0x80);
  58.         for(i=0;i<16;i++)
  59.         {
  60.                 wrd(a[i]);
  61.                 delay(30000);        
  62.         }
  63.         wrc(0x40+0x80);
  64.         for(i=0;i<27;i++)
  65.         {
  66.                 wrd(b[i]);
  67.                 delay(30000);
  68.         }
  69.         wrc(0x07);         //每写一个数据屏幕就要右移一位,就相对于数据来说就是左移了;
  70. /*        while(1)
  71.         {        
  72.                 wrc(0x00+0x80);
  73.                 for(i=0;i<16;i++)
  74.                 {
  75.                         wrd(a[i]);
  76.                         delay(30000);        //如果不加这条延时语句的话滚动会非常快。
  77.                 }
  78.         }  */
  79. }
  80. void main()
  81. {
  82.         init();
  83.         while(1)
  84.         {
  85.                 display();
  86.                
  87.         }        
  88. }
复制代码


评分

参与人数 1黑币 +7 收起 理由
心疯扬 + 7 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:251483 发表于 2017-11-20 17:07 | 只看该作者
有仿真图吗
回复

使用道具 举报

板凳
ID:272416 发表于 2018-1-6 19:37 来自手机 | 只看该作者
1602什么都没显示
回复

使用道具 举报

地板
ID:125540 发表于 2018-1-9 10:42 | 只看该作者


背光太亮了,现实的字符都看不到了,不过还是可以用的,挺不错的程序。使用了
指令码。让我忽然发现,原来循环左移右移也没那么难,就只是加了一行指令而已。
同时,可以使1602显示的内容量大大增加。

1.png (50.68 KB, 下载次数: 31)

1.png
回复

使用道具 举报

5#
ID:272625 发表于 2018-1-24 04:21 | 只看该作者
编译显示'array[]': string out of bounds(“[]数组”:字符串越界)是那里有门题?
回复

使用道具 举报

6#
ID:367440 发表于 2018-7-21 20:54 | 只看该作者
试了一下,好像没有效果。。
回复

使用道具 举报

7#
ID:538722 发表于 2019-11-23 12:00 | 只看该作者
改动了一下用着还不错C:\Users\wangdi\Desktop\捕获.PNG
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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