学习LCD显示的笔记
来源:互联网 发布:配电设计软件 编辑:程序博客网 时间:2024/06/05 20:11
1、1602LCD:即表示一行显示16个字符,共两行。
12864:横着128点,竖着64点
2、1602LCD接口信号说明:
编号符号 引脚说明
1 Vss:电源地
2 VDD:电源正极
3 VL:液晶显示偏压信号
4 RS:数据/命令选择端(H/L)
5 R/W:读写选择端(H/L)
6 E: 使能信号(让这个液晶工作的新号)
7 D0: Date I/O
8 D1: Date I/O
9 D2: Date I/O
10 D3: Date I/O
11 D4: Date I/O
12 D5: Date I/O
13 D6: Date I/O
14 D7: Date I/O
15 BLA: 背光源正极
16 BLK: 背光源负极
3、控制接口说明:(HD447及兼容芯片)
(1)基本操作时序:
1.1读状态:
1.2写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲
1.3读指令
1.4写数据:RS=H,RW=L,D0~D7=指令码,E=高脉冲
4、显示开/关及光标设置
指令码:00001DCB功能:D=1开显示;D=0关显示;C=1显示光标;C=0不显示光标;B=1光标闪烁;B=0光标不显示
000001NS功能:N=1当读或写一个字符后地址指针加一,且光标加一N=0当读或写一个字符后地址指针减一,且光标减一S=1当写一个字符,整屏显示左移
如果D=0,则LCD上不显示任何东西。
如果D=0,则LCD上不显示任何东西。
5、LED1 = ~ LED1; //LED显示取反,产生的效果:第一次按得时候亮,下一次按得时候灭。
6、12864LCD引脚说明:
编号符号 引脚说明
1 Vss:电源地
2 VDD:电源正极
3 V0: LCD驱动电压输入端
4 RS(CS):并行的数据/命令选择端(H/L);串行口的片选信号
5 R/W(CLK):并行的读写选择端(H/L);串行的数据口
6 E: 并行的使能信号(让这个液晶工作的新号);串行口同步时钟
7 DB0: Date I/O
8 DB1: Date I/O
9 DB2: Date I/O
10 DB3: Date I/O
11 DB4: Date I/O
12 DB5: Date I/O
13 DB6: Date I/O
14 DB7: Date I/O
15 PSB: 并/串行口选择;H-并行;L-串行
16 NC: 空脚
17 /RET: 复位 低电平有效
18 NC
15 LED-A: 背光源正极(LED+5V)
16 LED-K: 背光源负极(LED-0V)
8位并行连接时序图
MPU写资料到模块:
MPU从模块读出数据:
串行连接时序图:
程序如下:
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8); //11111abc a如果高表示从LCD读数据,低
表示往LCD写数据。 b 高表示显示数据,低表示控制指令 c 固定为0
sendbyte(cmdcode & 0xf0); //取cmdcode的高四位
sendbyte((cmdcode << 4) & 0xf0); //取cmdcode的第四位
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8); //11111abc a如果高表示从LCD读数据,低
表示往LCD写数据。 b 高表示显示数据,低表示控制指令 c 固定为0
sendbyte(cmdcode & 0xf0); //取cmdcode的高四位
sendbyte((cmdcode << 4) & 0xf0); //取cmdcode的第四位
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
五、指令说明
模块控制芯片提供两套控制命令,基本指令和扩充指令如下:
指令表1:(RE=0:基本指令)
指 指 令 码 功 能 令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
清除
显示
0 0 0 0 0 0 0 0 0 1 将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H" 地址
归位
0 0 0 0 0 0 0 0 1 X 设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容 显示状态开/关 0 0 0 0 0 0 1 D C B D=1: 整体显示 ON
C=1: 游标ON
B=1:游标位置反白允许
进入点
设定
0 0 0 0 0 0 0 1 I/D S 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位 游标或显示移位控制 0 0 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 功能
设定
0 0 0 0 1 DL X RE X X DL=0/1:4/8位数据
RE=1: 扩充指令操作
RE=0: 基本指令操作
设定CGRAM
地址
0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 设定CGRAM 地址 设定DDRAM
地址
0 0 1 0 AC5 AC4 AC3 AC2 AC1 AC0 设定DDRAM 地址(显示位址)
第一行:80H-87H
第二行:90H-97H
读取忙标志和地址 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值 写数据到RAM 1 0 数据 将数据D7——D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) 读出RAM的值 1 1 数据 从内部RAM读取数据D7——D0
(DDRAM/CGRAM/IRAM/GRAM)
指令表2:(RE=1:扩充指令)
指 指 令 码 功 能 令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
待命
模式
0 0 0 0 0 0 0 0 0 1 进入待命模式,执行其他指令都棵终止
待命模式
卷动地址开关开启 0 0 0 0 0 0 0 0 1 SR SR=1:允许输入垂直卷动地址
SR=0:允许输入IRAM和CGRAM地址
反白
选择
0 0 0 0 0 0 0 1 R1 R0 选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R0=00,第一次设定为反白显示,再次设定变回正常 睡眠
模式
0 0 0 0 0 0 1 SL X X SL=0:进入睡眠模式
SL=1:脱离睡眠模式
扩充
功能
设定
0 0 0 0 1 CL X RE G 0 CL=0/1:4/8位数据
RE=1: 扩充指令操作
RE=0: 基本指令操作
G=1/0:绘图开关
设定绘图RAM
地址
0 0 1 0
AC6
0
AC5
0
AC4
AC3
AC3
AC2
AC2
AC1
AC1
AC0
AC0
设定绘图RAM
先设定垂直(列)地址AC6AC5…AC0
再设定水平(行)地址AC3AC2AC1AC0
将以上16位地址连续写入即可
备注:当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。
一下是配套光盘上的程序,我做了一点注释。。
/********************************************************************
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
* 创建人 : 东流,2009年4月10日
* 版本号 : 2.0
**********************************************************************
*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^5; //片选信号
sbit SID=P2^6; //数据信号
sbit SCLK=P2^7; //时钟信号
sbit RST=P2^2; //复位信号
sbit CH = P2^4; //并行、串行选择信号
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
**********************************************************************
*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
**********************************************************************
*/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8); //11111abc a如果高表示从LCD读数据,低表示往LCD写数据。 b 高表示显示数据,低表示控制指令 c 固定为0
sendbyte(cmdcode & 0xf0); //取cmdcode的高四位
sendbyte((cmdcode << 4) & 0xf0); //取cmdcode的第四位
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30); //功能设定,001(DL)X(0或RE)XXDL必须为1RE=1:扩展指令集动作,RE=0:基本指令集动作
delay(50);
write_com(0x0c); //卷动地址或IRAM地址选择:0000001SR。SR=1,允许输入垂直卷动地址,SR=0:允许输入IRAM地址
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
**********************************************************************
*/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81); //写地址
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("单片机开发板");
write_com(0x89);
hzkdis(" ");
write_com(0x98);
hzkdis(" 东流电子");
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void Main()
{
CH = 0; //选择是串口
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
* 创建人 : 东流,2009年4月10日
* 版本号 : 2.0
**********************************************************************
*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^5; //片选信号
sbit SID=P2^6; //数据信号
sbit SCLK=P2^7; //时钟信号
sbit RST=P2^2; //复位信号
sbit CH = P2^4; //并行、串行选择信号
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
**********************************************************************
*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
**********************************************************************
*/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8); //11111abc a如果高表示从LCD读数据,低表示往LCD写数据。 b 高表示显示数据,低表示控制指令 c 固定为0
sendbyte(cmdcode & 0xf0); //取cmdcode的高四位
sendbyte((cmdcode << 4) & 0xf0); //取cmdcode的第四位
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
**********************************************************************
*/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30); //功能设定,001(DL)X(0或RE)XXDL必须为1RE=1:扩展指令集动作,RE=0:基本指令集动作
delay(50);
write_com(0x0c); //卷动地址或IRAM地址选择:0000001SR。SR=1,允许输入垂直卷动地址,SR=0:允许输入IRAM地址
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
**********************************************************************
*/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81); //写地址
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("单片机开发板");
write_com(0x89);
hzkdis(" ");
write_com(0x98);
hzkdis(" 东流电子");
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void Main()
{
CH = 0; //选择是串口
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
/********************************************************************
* 文件名 : 定时器的使用.c
* 描述 :
* 创建人 : 东流,2009年4月8日
* 版本号 : 2.0
**********************************************************************
*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code IC_DAT[];
uchar code pic1[];
uchar code pic2[];
uchar code pic3[];
sbit RS = P2^5; //并行的指令/数据选择信号
sbit WRD = P2^6; //读写选择信号
sbit E = P2^7; //使能信号
sbit PSB = P2^2; //并/串行接口选择 高为并,低为串
sbit RES = P2^4; //复位,低电平有效
void TransferData(char data1,bit DI);
void display(void);
void display_grapic(void);
void delayms(uint n);
void DisplayLine(uchar line1,uchar line2);
void DisplayGraphic(uchar code *adder);
void delay(uint m);
void lcd_mesg(uchar code *adder1);
uchar code IC_DAT[]={
" HOT-51 "
" "
" 单片机开发板 "
" 东流电子 "
};
uchar code IC_DAT2[]={
" 白日依山尽, " //0x80
" 欲穷千里目, " //0x90
" 黄河入海流。 " //0x88
//" 更上一层楼。 " //0x98
"一二三四五六七八九十"
};
/********************************************************************
* 名称 : Convert(uchar In_Date)
* 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该
函数。
* 输入 : 1602资料上的值
* 输出 : 送到1602的值
**********************************************************************
*/
unsigned char Convert(unsigned char In_Date)
{
unsigned char i, Out_Date = 0, temp = 0;
for(i=0; i<8; i++)
{
temp = (In_Date >> i) & 0x01;
Out_Date |= (temp << (7 - i));
}
return Out_Date;
}
void initinal(void) //LCD字库初始化程序
{
delay(40); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
delay(1); //延时
RES=0; //复位
delay(1); //延时
RES=1; //复位置高
delay(10);
TransferData(0x30,0); //Extended Function Set :8BIT设
置,RE=0: basic instruction set, G=0 :graphic display OFF
////功能设定,001(DL)X(0或RE)XXDL必须为1RE=1:扩展指令集动作,RE=0:基
本指令集动作
delay(100); //大于100uS的延时程序
TransferData(0x30,0);
delay(37); ////大于37uS的延时程序
TransferData(0x08,0); //显示状态开/关00001DCB;D=1,整体显示
ON,C=1,游标ON B=1:游标位置ON
delay(100); //大于100uS的延时程序
TransferData(0x10,0); //设定DDRAM,1ACACACACACACACAC,设定
DDRAM地址计数器(AC)
delay(100); //大于100uS的延时程序
TransferData(0x0C,0); //Display Control,D=1,显示开,关闭游
标,关闭游标位置
delay(100); //大于100uS的延时程序
TransferData(0x01,0); //Display Clear清除显示
delay(10); //大于10mS的延时程序
TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移
动 进入点设置
delay(100); //大于100uS的延时程序
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void initina2(void) //LCD显示图片(扩展)初始化程序
{
delay(40); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
delay(1); //延时
RES=0; //复位
delay(1); //延时
RES=1; //复位置高
delay(10);
TransferData(0x36,0); //Extended Function Set RE=1:
extended instruction功能设置
delay(100); //大于100uS的延时程序
TransferData(0x36,0); //Extended Function Set:RE=1:
extended instruction set
delay(37); ////大于37uS的延时程序
TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)功能
设置
delay(100); //大于100uS的延时程序
TransferData(0x01,0); //CLEAR SCREEN清屏
delay(100); //大于100uS的延时程序
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void main(void)
{
while(1)
{
initina2(); //调用LCD显示图片(扩展)初始化
程序
DisplayGraphic(pic2); //显示图片2
delayms(200);
initinal(); //调用LCD字库初始化程序
delay(100); //大于100uS的延时程序
lcd_mesg(IC_DAT); //显示中文汉字1
delayms(240);
delayms(240);
initinal(); //调用LCD字库初始化程序
delay(100); //大于100uS的延时程序
lcd_mesg(IC_DAT2); //显示中文汉字2
delayms(240);
delayms(240);
initinal();
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void lcd_mesg(unsigned char code *adder1)
{
unsigned char i;
TransferData(0x80,0); //Set Graphic Display RAM Address设置
DDRAM地址,第一行
delay(100);
for(i=0;i<32;i++)
{
TransferData(*adder1,1); //传输数据
adder1++;
}
TransferData(0x90,0); //Set Graphic Display RAM Address第二行
delay(100);
for(i=32;i<64;i++)
{
TransferData(*adder1,1);
adder1++;
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,
传送命令,当DI=1,传送数据.
{
WRD=0;
RS=DI;
delay(1);
P0=Convert(data1);
E=1;
delay(1);
E=0;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void delayms(unsigned int n) //延时10×n毫秒程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void delay(unsigned int m) //延时程序
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void DisplayGraphic(unsigned char code *adder)
{
int i,j;//*******显示上半屏内容设置
for(i=0;i<32;i++) //
{
TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
TransferData(0x80,0); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<16;j++)
{
TransferData(*adder,1);
adder++;
}
}
//***
* 文件名 : 定时器的使用.c
* 描述 :
* 创建人 : 东流,2009年4月8日
* 版本号 : 2.0
**********************************************************************
*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code IC_DAT[];
uchar code pic1[];
uchar code pic2[];
uchar code pic3[];
sbit RS = P2^5; //并行的指令/数据选择信号
sbit WRD = P2^6; //读写选择信号
sbit E = P2^7; //使能信号
sbit PSB = P2^2; //并/串行接口选择 高为并,低为串
sbit RES = P2^4; //复位,低电平有效
void TransferData(char data1,bit DI);
void display(void);
void display_grapic(void);
void delayms(uint n);
void DisplayLine(uchar line1,uchar line2);
void DisplayGraphic(uchar code *adder);
void delay(uint m);
void lcd_mesg(uchar code *adder1);
uchar code IC_DAT[]={
" HOT-51 "
" "
" 单片机开发板 "
" 东流电子 "
};
uchar code IC_DAT2[]={
" 白日依山尽, " //0x80
" 欲穷千里目, " //0x90
" 黄河入海流。 " //0x88
//" 更上一层楼。 " //0x98
"一二三四五六七八九十"
};
/********************************************************************
* 名称 : Convert(uchar In_Date)
* 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该
函数。
* 输入 : 1602资料上的值
* 输出 : 送到1602的值
**********************************************************************
*/
unsigned char Convert(unsigned char In_Date)
{
unsigned char i, Out_Date = 0, temp = 0;
for(i=0; i<8; i++)
{
temp = (In_Date >> i) & 0x01;
Out_Date |= (temp << (7 - i));
}
return Out_Date;
}
void initinal(void) //LCD字库初始化程序
{
delay(40); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
delay(1); //延时
RES=0; //复位
delay(1); //延时
RES=1; //复位置高
delay(10);
TransferData(0x30,0); //Extended Function Set :8BIT设
置,RE=0: basic instruction set, G=0 :graphic display OFF
////功能设定,001(DL)X(0或RE)XXDL必须为1RE=1:扩展指令集动作,RE=0:基
本指令集动作
delay(100); //大于100uS的延时程序
TransferData(0x30,0);
delay(37); ////大于37uS的延时程序
TransferData(0x08,0); //显示状态开/关00001DCB;D=1,整体显示
ON,C=1,游标ON B=1:游标位置ON
delay(100); //大于100uS的延时程序
TransferData(0x10,0); //设定DDRAM,1ACACACACACACACAC,设定
DDRAM地址计数器(AC)
delay(100); //大于100uS的延时程序
TransferData(0x0C,0); //Display Control,D=1,显示开,关闭游
标,关闭游标位置
delay(100); //大于100uS的延时程序
TransferData(0x01,0); //Display Clear清除显示
delay(10); //大于10mS的延时程序
TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移
动 进入点设置
delay(100); //大于100uS的延时程序
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void initina2(void) //LCD显示图片(扩展)初始化程序
{
delay(40); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
delay(1); //延时
RES=0; //复位
delay(1); //延时
RES=1; //复位置高
delay(10);
TransferData(0x36,0); //Extended Function Set RE=1:
extended instruction功能设置
delay(100); //大于100uS的延时程序
TransferData(0x36,0); //Extended Function Set:RE=1:
extended instruction set
delay(37); ////大于37uS的延时程序
TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)功能
设置
delay(100); //大于100uS的延时程序
TransferData(0x01,0); //CLEAR SCREEN清屏
delay(100); //大于100uS的延时程序
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void main(void)
{
while(1)
{
initina2(); //调用LCD显示图片(扩展)初始化
程序
DisplayGraphic(pic2); //显示图片2
delayms(200);
initinal(); //调用LCD字库初始化程序
delay(100); //大于100uS的延时程序
lcd_mesg(IC_DAT); //显示中文汉字1
delayms(240);
delayms(240);
initinal(); //调用LCD字库初始化程序
delay(100); //大于100uS的延时程序
lcd_mesg(IC_DAT2); //显示中文汉字2
delayms(240);
delayms(240);
initinal();
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void lcd_mesg(unsigned char code *adder1)
{
unsigned char i;
TransferData(0x80,0); //Set Graphic Display RAM Address设置
DDRAM地址,第一行
delay(100);
for(i=0;i<32;i++)
{
TransferData(*adder1,1); //传输数据
adder1++;
}
TransferData(0x90,0); //Set Graphic Display RAM Address第二行
delay(100);
for(i=32;i<64;i++)
{
TransferData(*adder1,1);
adder1++;
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,
传送命令,当DI=1,传送数据.
{
WRD=0;
RS=DI;
delay(1);
P0=Convert(data1);
E=1;
delay(1);
E=0;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void delayms(unsigned int n) //延时10×n毫秒程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void delay(unsigned int m) //延时程序
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
**********************************************************************
*/
void DisplayGraphic(unsigned char code *adder)
{
int i,j;//*******显示上半屏内容设置
for(i=0;i<32;i++) //
{
TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
TransferData(0x80,0); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<16;j++)
{
TransferData(*adder,1);
adder++;
}
}
//***
- 学习LCD显示的笔记
- [学习笔记] TINY441的LCD显示
- ARM学习笔记--LCD显示
- STM32学习笔记(6.1):LCD的显示
- STM32学习笔记(6.2):LCD的显示
- STM32学习笔记(6):LCD的显示
- STM32学习笔记(6):LCD的显示
- STM32学习笔记(6.1):LCD的显示
- STM32学习笔记(6.2):LCD的显示
- stm32学习笔记(十一)LCD显示
- RT-Thread 学习笔记(十一)--- 开启基于RTGUI的LCD显示功能(1)<LCD驱动接口移植>
- RT-Thread 学习笔记(十二)--- 开启基于RTGUI的LCD显示功能(2)<编译测试>
- Altera DE2-70学习笔记5-LCD显示实验
- 学习笔记 --- LINUX LCD显示原理与驱动分析
- AT91SAM9261的LCD控制器学习笔记
- LCD驱动学习笔记
- 驱动学习笔记-lcd
- TFT LCD 学习笔记
- 这个雨季
- 网络工程师考试大纲
- View context menu identifiers
- 20100721
- HTML--->XML
- 学习LCD显示的笔记
- Windows常用命令集
- 相关链接
- 如何实现继承
- 2010.07.22
- Java
- 奋斗
- 强大的是更强大的战斗力
- ASP.NET MVC 学习笔记(4) 分页处理