LCD1602——8位总线驱动-Arduino中文社区 - Powered by Discuz! Archiver

豇豆逗逗 发表于 2016-1-15 11:34

LCD1602——8位总线驱动

本帖最后由 豇豆逗逗 于 2016-1-15 15:01 编辑

1602的概念
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

字符的显示
   用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

关于1602的初始化设置与数据/命令、读/写方式的资料网上很多的,希望大家可以去网上多多看一下哟,以下是我之前用keil学着郭天祥老师写的一个关于1602的代码,大家可以参考一下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="DOUDOU";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;

//延时
void delay(uint z)
{
      uint x,y;
      for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

//写命令
void write_com(uchar com)
{
      lcdrs=0;
      P0=com;
      delay(5);
      lcden=1;
      delay(5);
      lcden=0;
}

//写数据
void write_data(uchar date)
{
      lcdrs=1;
      P0=date;
      delay(5);
      lcden=1;
      delay(5);
      lcden=0;
}

//1602初始化设置
void init()
{
      dula=0;
      wela=0;
      lcden=0;
      write_com(0x38);
      write_com(0x0e);
      write_com(0x06);
      write_com(0x01);
      write_com(0x80+0x10);
}
void main()
{
      init();
      for(num=0;num<11;num++)
      {
                write_data(table);
                delay(20);
      }
//      write_com(1);
      write_com(0x80+0x53);
      for(num=0;num<13;num++)
      {
                write_data(table1);
                delay(20);
      }
      for(num=0;num<16;num++)
      {
                write_com(0x18);
                delay(20);
      }
      while(1);
}


190808149 发表于 2016-9-30 09:57

验证原理后,换用LiquidCrystal库代劳,更方便。
页: [1]
查看完整版本: LCD1602——8位总线驱动