LCD的特点
- 低电压,微功耗。工作电压为3~5V,每平方厘米液晶显示屏的耗电量在μA级。
- 平板结构。易大量生产,物理体积小,占用空间多。
- 寿命长
- 光线柔和。液晶显示屏是被动发光器件,90%以上是外部物体对光的反射。被动显示适合人的视觉习惯,不会引起疲劳。
- 无电磁辐射。液晶显示器不会产生电磁辐射,是绿色器件。
LCD显示器的分类
按显示器的使用和显示内容来分:
- 字段式
- 点阵字符式
- 点阵图形式
16×2标准LCD字符显示器应用设计
硬件设计
图为16×2标准字符型LCD接口电路图。由于在CVAVR中必须按照一定的规定连接LCD才能使用CVAVR内部提供的LCD函数,所以原理图是按照CVAVR的规定设计的。
如果要使用CVAVR内部提供的LCD函数,则硬件连接必须按以下要求实现:
- 与LCD的连接必须使用AVR的同一个8位的I/O端口,如PC(或者PA、PB、PD)
- LCD采用4位并行传输方式(即仅用DB4~DB7),4位数据总线。
具体连接定义如下:
- 3根控制线:PC0-RS,PC1-R/W,PC2-E。
- 4根控制线:PC4-DB4,PC5-DB5,PC6-DB6,PC7-DB7。
软件设计
代码如下(C):
/******
File name :demo_6_8.c
Chip type :ATmega16
Program type :Application
Clock frequency :4.000000MHz
Memory model :Small
External SRAM size :0
Data Stack size :256
******/
#include<mega16.h>
#include<delay.h>
#asm
.equ __lcd_port = 0x15;//PORTC数据寄存器地址 CVAVR指定要用这一句
#endasm
/* [LCD]
1 GND - 9GND
2 +5V - 10 VCC
3 VLC - LCD HEADER Vo
4 RS - 1 PC0(M16)
5 RD - 2 PC1(M16)
6 EN - 3 PC2(M16)
11 D4 - 5 PC4(M16)
12 D5 - 6 PC5(M16)
13 D6 - 7 PC6(M16)
14 D7 - 8 PC7(M16) */
#include<lcd.h>
flash char dis_str[]="Hello World! This is a LCD display demo."
void main(void)
{
char flash *str;
str = dis_str;
lcd_init(16);//激活2*16的LCD区域;初始化LCD
while(1)
{
lcd_clear();//清屏
lcd_putsf("It's demo_6_8.c");//显示这条消息
lcd_gotoxy(str);//到lcd第二行?
lcd_putsf(str);//显示这条消息
if (*str++ == 0) str = dis_str;
delay_ms(500);
}
}
下面的演示程序,可以在LCD上显示用户定义的简单汉字“天天向上”。
程序代码:
/******-
File name :demo_6_9.c
Chip type :ATmega16
Program type :Application
Clock frequency :4.000000MHz
Memory model :Small
External SRAM size :0
Data Stack size :256
******/
#include<mega16.h>
//Alphanumeric LCD Module functions
#asm
.equ __lcd_port = 0x15;
#endasm
#include<lcd.h>
typedef unsigned char byte;
/* table for the user defined character */
flash byte char0[8] = {//天的字型
0b0011111,
0b0000100,
0b0000100,
0b0011111,
0b0000100,
0b0000100,
0b0001010,
0b0010001,
}
flash byte char1[8] = {//向的字型
0b0000100,
0b0001000,
0b0011111,
0b0010001,
0b0011111,
0b0011011,
0b0011111,
0b0010001,
}
flash byte char2[8] = {//上的字型
0b0000100,
0b0000100,
0b0000111,
0b0000100,
0b0000100,
0b0000100,
0b0000100,
0b0011111,
}
/* function used to define user characters */
void define_char(byte flash *pc,byte_code)
{
byte i,a;
a = (char_code << 3) | 0x40;
for (i=0;i<8;i++) lcd_write_byte(a++,*pc++);
}
void main(void)
{
lcd_init(16);//初始化LCD
define_char(char0,0);//定义字符0
define_char(char1,1);//定义字符1
define_char(char2,2);//定义字符2
lcd_clear();
lcd_putsf("demo_6_9.c");//第一行显示内容
lcd_gotoxy(0,1);
lcd_putsf("User define:");//第二行显示内容
lcd_putchar(0);
lcd_putchar(0);
lcd_putchar(1);
lcd_putchar(2);
while(1);
}