51学习第八天---液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作--简单液晶显示移动程序

 

学习液晶感觉还可以,对于不同的液晶片,学会读懂参考手册,才是最重要的。

https://wenku.baidu.com/view/840dcb2a6c85ec3a87c2c561.html

这个对应郭老师的课的总结,里面总结比我个人详细。

第九节、 I602液晶显示原理及实现.... 79

1、1602LCD最简单液晶工作原理、.... 80

1.1、1602LCD主要技术参数:.... 80

1.2、引脚功能说明.... 80

1.3、基本操作时序.... 80

1.4、液晶指令设置和初始化.... 80

1.5、液晶储存器结构.... 80

2、简单设计程序操作液晶.... 80

2.1、程序一.... 80

2.2、程序二.... 80

3、如何开始对一个没有任何概念的芯片开始单片机的操作.... 76

第九节、I602液晶显示原理及实现

1、1602LCD最简单液晶工作原理、

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别

1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02(2行,一行16字符)即32个字符。

它由若干个5X7或者5X11点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。

1.1、1602LCD主要技术参数:

  1. 显示容量:16×2个字符
  2. 芯片工作电压:4.5—5.5V
  3. 工作电流:2.0mA(5.0V)
  4. 模块最佳工作电压:5.0V
  5. 字符尺寸:2.95×4.35(W×H)mm

1.2、引脚功能说明

1602LC采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明所示:

第1脚:VSS为地电源。

第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。对比度调整端,若仅仅接地,对比度会很高,常常接上一个几K的电位器或可变电阻来调节对比度以实现理想的显示效果。

第4脚:RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW:读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙(一般对于单纯的LCD显示只用到写操作)。

第6脚:E:使能信号,当E端由高电平变为低电平时,液晶模块执行命令。

第7~14脚:D0-D7:8个数据I/O口(双向数据线)。

第15脚: BG_VCC、背光电源正极

第16脚:BG_GND、是背光电源负极。

LCD寄存器的选择

E使能

R/W读写

RS

功能说明

1

0

0

写入命令寄存器

1

0

1

写入数据寄存器

1

1

0

读写忙碌标志和RAM地址

1

1

1

读取RAM数据

0

X

 

不动作

1.3、基本操作时序

 

1.4、液晶指令设置和初始化

1.4.1、显示模式设置

 

指令码(0x38

功能

0

0

1

1

1

0

0

0

设置16x2显示,5x7点阵,8位数据接口

         

1.4.2、显示开关及光标设置:(初始化)

指令码

功能

0

0

0

0

1

D

C

B

D=1  开显示  D=0关显示

C=1  显示光标  C=0不显示光标

B=1光标闪烁  B=0不闪烁

0

0

0

0

0

1

N

S

N=1(读或写一个字符后地址指针加1 &光标加1),

N=0(读或写一个字符后地址指针减1 &光标减1),

S=1 且 N=1 (当写一个字符后,整屏显示左移)(N=0右移)以得到光标不移动而屏幕移动的效果

s=0 当写一个字符后,整屏显示不移动

 

          

1.4.3、数据指针设置

指令码

功能

80H+地址码(0-27H,,, 40H-67H)

设置数据地址指针

数据首地址为80H

第一行0-27H,

第二行40H-67H(当第一行装不下时,就需要第二行,但是需要设置数据指针0x80+0x40

1.4.4、其他设置

 

指令码

功能

01H

显示清屏:1.数据指针清零

2.所有显示清零

02H

显示回车:1.数据指针

1.4.5、显示地址

1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下

 

显示字符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

第一行

地址

00H

01H

02H

03H

04H

05H

06H

07H

08H

09H

0AH

0BH

0CH

0DH

0EH

0FH

第二行

地址

40H

41H

42H

43H

44H

45H

46H

47H

48H

49H

4AH

4BH

4CH

4DH

4EH

4FH

1.5、液晶储存器结构

2、简单设计程序操作液晶

2.1、程序一

显示:I like mcu!”; 和www.stu.com”;直接显示液晶上

#include<reg52.h>

#define  uchar  unsigned  char

#define  uint unsigned  int

sbit  lcden=P3^4;

sbt  lcdrs=P3^5;

sbit  dula=P2^7;

uchar  code  table[]=“I like mcu!”;

uchar  code  table1[]=“www.stu.com”;

uchar num;

void  main()

{

int ()

for(num=0;num<11;num++)//利用循环调用数组显示

{

write_data(table[num]);//显示:I like mcu!

delay(20);

}

write_com(1);//清屏指令,上面的一行会显示出来后立刻消失

write_com(0x80+0x40+0x03);//设置数据指针,显示第二行! +0x03:表示向后移动三字符

for(num=0;num<13;num++)//利用循环调用数组显示

{

write_data(table1[num]);//显示: www.stu.com

delay(20);

}

 

//write_data(‘1’);//显示:1或者输入按照CGROM中对应的码

//delay(20);

//write_data(‘B’);//显示B

 

while(1)

}

void  write_com(ucahr com)//写命令子函数

{

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void  write_data(ucahr data)//写数据子函数

{

lcdrs =1;

P0=data;

delay (5);

lcden =1;

delay (5);

lcden =0;

}

void delay (unit  z)//延迟函数

{

unit x, y;

for (x=z; x>0; x++)

for (y=110; y>0; y++)

}

void init ()//初始化函数

{

dula=0;

wela=0

lcden=0;

write_com(0x38);

write_com(.0x0e);

write_com(.0x06);

write_com(.0x01);

write_com(.0x80);

}

2.2、程序二

显示:从右侧平移到液晶上显示出来。

#include<reg52.h>

#define  uchar  unsigned  char

#define  uint unsigned  int

sbit  lcden=P3^4;

sbt  lcdrs=P3^5;

sbit  dula=P2^7;

uchar  code  table[]=“I like mcu!”;

uchar  code  table1[]=“www.stu.com”;

uchar num;

void  main()

{

int ()

for(num=0;num<11;num++)//利用循环调用数组显示

{

write_data(table[num]);//显示:I like mcu!

delay(20);

}

 

write_com(0x80+0x53);//设置数据指针,指定写入位置!!!显示第二行! +0x53:第二行从53那个字符开始写入。

for(num=0;num<13;num++)//利用循环调用数组写入字符

{

write_data(table1[num]);//显示: www.stu.com字符

delay(20);

}

for(num=0;num<16;num++)//左移动循环

{

write_com(0x18);//左移指令0x18   0001 1000

delay(200);

}

 

//write_data(‘1’);//显示:1或者输入按照CGROM中对应的码

//delay(20);

//write_data(‘B’);//显示B

 

while(1)

}

void  write_com(ucahr com)//写命令子函数

{

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void  write_data(ucahr data)//写数据子函数

{

lcdrs =1;

P0=data;

delay (5);

lcden =1;

delay (5);

lcden =0;

}

void delay (unit  z)//延迟函数

{

unit x, y;

for (x=z; x>0; x++)

for (y=110; y>0; y++)

}

void init ()//初始化函数

{

dula=0;

wela=0

lcden=0;

write_com(0x38);

write_com(.0x0e);

write_com(.0x06);

write_com(.0x01);

write_com(.0x80);

}

3、如何开始对一个没有任何概念的芯片开始单片机的操作

1、写命令子函数

2、写数据子函数

3、初始化子函数

4、main第一行,第二行显示,移动

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
51计算器程序#include #include #define uchar unsigned char #define uint unsigned int sbit lcden=P3^4; sbit lcdrw=P3^6; sbit lcdrs=P3^5; uchar num,temp,jia=0,cheng=0,chu=0,jian=0,qing=0; uint key,key1,shu; uchar fuhao,flag1,flag=0; uchar table[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,}; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } bit lcd_bz() { bit result; lcdrs = 0; lcdrw= 1; lcden = 1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80;); lcden=0; return result; } void write_com(uchar com) { while(lcd_bz()); lcdrs=0; lcden=0; lcdrw=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) { while(lcd_bz()); lcdrs=1; lcden=0; lcdrw=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void lcd_init() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void keyscan() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:key=1;num=0;break; case 0xde:key=2;num=0;break; case 0xbe:key=3;num=0;break; case 0x7e:num=1;break; //¼ÓºÅ } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:key=4;num=0;break; case 0xdd:key=5;num=0;break; case 0xbd:key=6;num=0;break; case 0x7d:num=2;break; //¼õºÅ } while( temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:key=7;num=0;break; case 0xdb:key=8;num=0;break; case 0xbb:key=9;num=0;break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值