找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1151|回复: 5
收起左侧

单片机代码红色部分FOR循环的为什么能让LCD1602移屏? 一直想不明白

[复制链接]
ID:903915 发表于 2021-7-9 15:41 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <LCD1602.h>  //LCD1602头文件
#include <ds1302.h>          //时钟芯片头文件
#include <tem.h>          //温度18b20头文件

#define u8 unsigned char  //重定义
#define u16 unsigned int

sbit KEY1=P3^0;         //定义界面功能按键、确定键
sbit add=P3^1;         //定义加按键
sbit sub=P3^2;         //定义减按键
sbit KEY4=P3^3;  //定义改变功能键、返回键

sbit beep=P1^5;         //蜂鸣器输出口

int con=0,mon=0;

bit bcon=0;
bit cool,teel;
bit nao=0,wen=0;

u16 win0,win1;
u16 hin=0;
char  t[][16]={"H50 L20 17/10/25",        //显示日期        放在随机存储器中
               "21.3C 12:00:00 6"}; //显示时间、周  放在程序存储器

char  c1[]="Clock 07:00:00  ";        //显示闹钟时间
char code c2[]=" Good  Everyday ";        // Good Everyday
char code c3[]=" Open OR Close  ";        //  Open OR Close  开启还是关闭

char code M1[][16]={">     Time     <",">    Clock     <",
                    ">  Tem_Aralm   <"};          //  时间调整,闹钟,温度上下限
char K1[16]=" ";
//u8 code kai[]={"          LYC The Most Beautiful Time To Meet The Most Beautiful You Do Not Cherish HJY         "};
u8 code kai[]={"           123456789ABCDEFGHIJKLMNOPQISDUVWXYZ         "};
//*********延时函数***********//
void delay(u16 i)
{
  while(i--);
}

//*********开机画面*********//
void open()
{
   int i=0,j;
   while(kai[ i]!='\0')
    i++;
        i--;
   for(i;i!=0;i--)
   {
      K1[0]=kai[ i];
          LCD1602_WRITERCOM(0x80);
      for(j=0;j<16;j++)
      {
         LCD1602_WRITERDAT(K1[j]);
      }
      LCD1602_WRITERCOM(0xC0);
      for(j=0;j<16;j++)
      {
         LCD1602_WRITERDAT(K1[j]);
      }

          for(j=14;j>=0;j--)
          {
            K1[j+1]=K1[j];
          }

          delay(15000);
   }
}

红色部分FOR循环的为什么能让LCD移屏, 一直想不明白,请哪位大侠帮帮忙????


回复

使用道具 举报

ID:903915 发表于 2021-7-9 16:18 | 显示全部楼层
已经搞懂了
回复

使用道具 举报

ID:81196 发表于 2021-7-9 16:18 | 显示全部楼层
前一个单元存放的数据移位到后一个单元存放,你觉得它是不是移位呢?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2021-7-9 16:37 | 显示全部楼层
例如一个汉字是16*16,每一行或列的点阵数据放在KI[]中。
1、你轮流将KI[]送到显示接口中去(如,16次完成一个汉字显示),则可以显示出一个汉字。认可不?
2、如果KI[]中的数据永远不变,则显示的永远是那个汉字,不会变。认可不?
3、如果每间隔一段时间(如,0.5秒),将KI[]中的后一列数据,送到前一列中,则何如?不就相当于向前滚了一列吗?当然KI[]末列应当补入另一个汉字的最前列。
说的不一定与你的程序完成一样,但道理一样。你想想。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:903915 发表于 2021-7-9 20:21 | 显示全部楼层
shumivan 发表于 2021-7-9 16:18
前一个单元存放的数据移位到后一个单元存放,你觉得它是不是移位呢?

谢谢 已经明白了
回复

使用道具 举报

ID:903915 发表于 2021-7-9 20:22 | 显示全部楼层
yzwzfyz 发表于 2021-7-9 16:37
例如一个汉字是16*16,每一行或列的点阵数据放在KI[]中。
1、你轮流将KI[]送到显示接口中去(如,16次完成 ...

谢谢 已经明白了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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