标题: 单片机代码红色部分FOR循环的为什么能让LCD1602移屏? 一直想不明白 [打印本页]

作者: Tongnh    时间: 2021-7-9 15:41
标题: 单片机代码红色部分FOR循环的为什么能让LCD1602移屏? 一直想不明白
#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移屏, 一直想不明白,请哪位大侠帮帮忙????



作者: Tongnh    时间: 2021-7-9 16:18
已经搞懂了
作者: shumivan    时间: 2021-7-9 16:18
前一个单元存放的数据移位到后一个单元存放,你觉得它是不是移位呢?
作者: yzwzfyz    时间: 2021-7-9 16:37
例如一个汉字是16*16,每一行或列的点阵数据放在KI[]中。
1、你轮流将KI[]送到显示接口中去(如,16次完成一个汉字显示),则可以显示出一个汉字。认可不?
2、如果KI[]中的数据永远不变,则显示的永远是那个汉字,不会变。认可不?
3、如果每间隔一段时间(如,0.5秒),将KI[]中的后一列数据,送到前一列中,则何如?不就相当于向前滚了一列吗?当然KI[]末列应当补入另一个汉字的最前列。
说的不一定与你的程序完成一样,但道理一样。你想想。

作者: Tongnh    时间: 2021-7-9 20:21
shumivan 发表于 2021-7-9 16:18
前一个单元存放的数据移位到后一个单元存放,你觉得它是不是移位呢?

谢谢 已经明白了
作者: Tongnh    时间: 2021-7-9 20:22
yzwzfyz 发表于 2021-7-9 16:37
例如一个汉字是16*16,每一行或列的点阵数据放在KI[]中。
1、你轮流将KI[]送到显示接口中去(如,16次完成 ...

谢谢 已经明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1