原创 【博客大赛】PIC液晶显示

2012-11-21 09:06 1570 10 10 分类: MCU/ 嵌入式

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。

 

   LCD1602引脚图

1602采用标准的16脚接口,其中:

  第1脚:VSS为电源地

  第2脚:VCC接5V电源正极

  第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

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

  第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

  第6脚:E(或EN)端为使能(enable)端。

  第7~14脚:D0~D7为8位双向数据端。

  第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。

  +3.3V电压,对比度可调

  内含复位电路

  提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能

  有80字节显示数据存储器DDRAM

  内建有192个5X7点阵的字型的字符发生器CGROM

  8个可由用户自定义的5X7的字符发生器CGRAM

  微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。

  注:关于E=H脉冲——开始时初始化E为0,然后置E为1。

  字符集

  1602液晶模块内部的字符发生存储器CGROM已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

  因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。

#include     "p18f458.h"

#include    "delays.h"

#pragma romdata TABLE=0x1000

const rom char table[240]={0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,

0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,                //"P",0~15

0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,

0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,                //"I",16~31

0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,

0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,                //"C",32~47

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,

0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,                //"1",48~63

0x00,0x70,0x88,0x08,0x00,0x1C,0x22,0x21,               //"8"左,64~71

0x08,0x88,0x70,0x00,0x21,0x22,0x1C,0x00,               //"8"右,72~79

0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,

0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,                //"F",80~95

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,

0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,                //"4",96~111

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,

0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,                //"5",112~127

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,

0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,               //"8",128~143

0x00,0x10,0x0C,0x04,0x4C,0xB4,0x94,0x05,

0xF6,0x04,0x04,0x04,0x14,0x0C,0x04,0x00,

0x00,0x82,0x82,0x42,0x42,0x23,0x12,0x0A,

0x07,0x0A,0x12,0xE2,0x42,0x02,0x02,0x00,               //"实",144~175

0x02,0xFA,0x82,0x82,0xFE,0x80,0x40,0x60,

0x08,0x04,0x24,0x40,0x3F,0x22,0x2C,0x21,      //"验"左,176~191

0x58,0x46,0x48,0x50,0x20,0x20,0x20,0x00,

0x21,0x2E,0x20,0x30,0x2C,0x23,0x20,0x00,      //"验"右,192~207

0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE,

0x62,0xA2,0x22,0x21,0xA1,0x61,0x00,0x00,

0x04,0x03,0x00,0x7F,0x00,0x11,0x0E,0x41,

0x20,0x11,0x0A,0x0E,0x31,0x60,0x20,0x00};//"板",208~239

#pragma romdata

//主函数

main()

{

int     j;

for(j=0;j<5;j++)

{

initial();

LCD1INIT(1);

LCD1INIT(2);

DISPLAY1(1,0xBC-j,0x5C);

DISPLAY2(2,0xBC-j,0x40);

DISPLAY3(1,0xBE-j,0x68);

DISPLAY4(2,0xBE-j,0x40);

Delay10KTCYx (255);                   /*暂停 (255 * 10,000 cycles) */

}

}

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条