12864实验
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
45. void LcdWdata(unsigned char WData)
46. {
47. delay(1);
48. RS=1; //指明操作对象为数据寄存器
49. RW=0; //指明为写操作
50. E=1;
51. lcd_data=WData; //将数据写入总线
52. E=0;
53. }
3、初始化操作
75.
delay_ms(12); //延时 12ms
76.
//进入点设置
77.
LcdWcom(0x06); //设置为游标右移,DDRAM 位地址加 1,画面不移动
78.
delay(5);
79.
LcdWcom(0x0C); //开显示
80. }
4、显示基本的字符和汉字
1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的 分配:
4. sbit RW = P2^5;
//读写控制脚(并行) 0:写入 1:读出
5. sbit E = P2^6;
//读写数据启始脚(并行)
6. sbit PSB = P2^1;
//串并方式选择引脚,0 为串行模式,1 为 8/4 位数据口模式
7. sbit RST = P2^3;
//复位引脚
8.
9. //********************************************************
管脚号 管脚名称 电平 管脚功能描述
1 VSS
0V
电源地
2 VCC
3.0+5V 电源正
3 V0
-
对比度(亮度)调整
4 RS(CS)
RS=“H”,表示 DB7——DB0 为显示数据 H/L
RS=“L”,表示 DB7——DB0 为显示指令数据
5
R/W=“H”,E=“H”,数据被读到 DB7——DB0
R/W(SID)
128×64 点阵型液晶显示实验
一、实验目的
1、了解字符型液晶显示器的工作原理;
2、掌握带中文字库 12864 液晶显示器控制方式。
二、实验仪器
1、最小 C8051f410 实验开发板电子元件 若干
2、直流稳压电源、示波器
各1台
3、仿真器(U-EC6)
1只
4、PC 机
1台
三、实验内容
1、QC12864 液晶介绍
5>E=0;
以下是驱动函数,仅供参考:
1. /********************************液晶端口定义**************************/
2. #define lcd_data P0
//数据口
3. sbit RS = P2^4;
//选择寄存器(并行) 0:指令寄存器 1:数据寄存器;
31. //写命令函数
32. //********************************************************
33. void LcdWcom(unsigned char WCom)
34. {
35.
delay(1);
36.
RS=0; //指明操作对象为指令寄存器
24. void delay_ms(unsigned int k)//延时 0.994us,晶振 12M
25. {
26. unsigned int x,y;
27. for(x=k;x>0;x--)
28.
for(y=121;y>0;y--);
29. }
30. //********************************************************
0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 //第一行汉字位置 0x90 0x91 0x92 0x93 0x94 0x95 0x96 0x97 //第二行汉字位置
0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x98 0x99 0x9a 0x9b 0x9c 0x9d 0x9e 0x9f
102. void Display_Char(unsigned char Alphabet)
103. {
104.
delay(1);
105.
LcdWdata(Alphabet); //写入需要显示字符的显示码
106. }
显示!的实例:
107. /**********************显示单个字符*************************/ 108. Set_Cursor(0,0); //光标地址设定 109. Display_Char(0x21); //显示字符!
20 K
VSS 背光源负端(见注释 3)
首先说一下关于驱动函数的书写,这些是液晶显示的基础, 一般包括四个函数:
1、写命令函数; 2、写数据函数; 3、读状态函数; 4、读数据函数。
这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和
字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那
58. {
59.
delay_ms(45); //延时 45ms
60.
PSB=1; //8 位并行口
61.
//复位操作
62.
RST=1;delay(1);
63.
RST=0;delay(1);
64.
RST=1;delay(1);
65.
//功能设定
66.
LcdWcom(0x30); //设置为 8 位并行口,基本指令集
13>初始化结束;
54. //********************************************************
55. //显示初始化函数
56. //********************************************************
57. void Display_Init(void)
12 DB5
H/L 三态数据线
13 DB6
H/L 三态数据线
14 DB7
H/L 三态数据线
15 PSB
H/L H:8 位或 4 位并口方式,L:串口方式(见注释 1)
16 NC
-
空脚
17 /RESET
H/L 复位端,低电平有效(见注释 2)
18 VOUT
-
LCD 驱动电压输出端
19 A
VDD 背光源正端(+5V)(见注释 3)
10. //延时函数
11. //********************************************************
12. void delay(unsigned int k)
13. {
14.
unsigned int i;
15.
unsigned char j;
16.
for(i=0;i<k;i++)
读数据函数也必须书写。
另外关于读状态函数,其实也就是用于判忙操作,原则上每次对控制器进行读写操作之 前,都必须进行读写检测。 2、写操作的编写
由上图 8 位并口写操作时序图可见,写操作很简单:
1>RS=1(写数据操作);或者 RS=0(写命令操作);
2>RW=0;//指明为写操作
3>E=1;
4>DB=data;//data 为你要写入的命令或数据值
67.
delay(10);
68.
LcdWcom(0x30); //再次设置为 8 位并行口,基本指令集
69.
delay(5);
70. // //显示开关控制
71. // LcdWcom(0x0c); //游标显示关,正常显示,整体显示开
72. // delay(10);
73.
//清除显示
74.
LcdWcom(0x01);
因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的
显示码,比如要显示!就应该写入 0x21。
99. //********************************************************
100. //显示字符函数
101. //********************************************************
//第三行汉字位置 //第四行汉字位置
设定 DDRAM 地址参考程序:
81. //********************************************************
82. //设置光标函数
83. //参数说明:x 为行号,y 为列号
84. //********************************************************
85. void Set_Cursor(unsigned char x, unsigned char y)
86. {
87.
unsigned char i;
88.
switch(x)//确定行号
89.
{
90.
case 0x00: i=0x80; break;//第一行
91.
case 0x01: i=0x90; break;//第二行
由于此液晶为 128*64,即是横向 128 个点,竖向 64 个点,由于该液晶控制器支持的字 符为 8*16,汉字为 16*16,因此只能显示四行,如果是汉字,为每行显示 8 个,如果是字符, 每行显示 16 个。
由上图设置 DDRAM 地址的指令可知,最高位为 1,余下 7 位为地址值,因此就对应了为 什么起始地址为 80H 的原因(即对应的写地址指令为 1000 0000);因此如果你要设定显示 的地址为第一行的第一个位置,只需要调用写指令函数,写入 0x80 即可。
92.
case 0x02: i=0x88; break;//第三行
93.
case 0x03: i=0x98; break;//第四行
94.
default : break;
95.
}
96.
i = y+i;//确定列号
97.
LcdWcom(i);//写地址
98. }
2、显示字符
由数据手册可查看可以显示的字符及其显示码:
初始化操作如下: 1>芯片上电; 2>延时 40ms 以上; 3>复位操作:RST 出现一个上升沿(RST=1;RST=0;RST=1;); 4>功能设定; 5>延时 100us 以上; 6>再次进行功能设定; 7>延时 37us; 8>显示开关控制; 9>延时 100us 以上; 10>清除显示; 11>延时 10ms 以上; 12>进入点设置;
H/L R/W=“L”,E=“H→L”, DB7——DB0 的数据被写到 IR 或
Baidu NhomakorabeaDR
6 E(SCLK)
H/L 高—>低,I/O 缓冲—>DR;;高时 DR—>I/O 缓冲
7 DB0
H/L 三态数据线
8 DB1
H/L 三态数据线
9 DB2
H/L 三态数据线
10 DB3
H/L 三态数据线
11 DB4
H/L 三态数据线
17.
{
18.
for(j=0;j<10;j++);
19.
}
20. }
21. //********************************************************
22. //延时 1ms 函数 23. //********************************************************
扩展程序:在指定位置显示字符串
110. //******************************************************** 111. //指定位置显示字符串函数 112. //参数说明:x 为行号,y 为列号
113. //******************************************************** 114. void Display_String(unsigned char x,unsigned char y,unsigned char *Alphabet) 115. { 116. unsigned char i=0; 117. Set_Cursor(x,y); //设置显示的起始地址 118. while(Alphabet[i]!='\0') 119. {
37.
RW=0; //指明为写操作
38.
E=1;
39.
lcd_data=WCom; //将命令写入总线
40.
E=0;
41. }
42. //********************************************************
43. //写数据函数
44. //********************************************************
120. LcdWdata(Alphabet[i]); //写入需要显示字符的显示码 121. i++; 122. } 123. }