📄 lcd12864.lst
字号:
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE LCD12864.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************************************
2 * 文件名: LCD12864.c *
3 * 描 述: 本文件包含了液晶模块的基本函数和显示汉字的所有操作子函数,可共其他的模块进行调用 *
4 * 接口定义: 用的是熊涛那块12864接口板,接口按板上定义 *
5 * P1口接DB7 -- DB0 *
6 * DI -- P3.7, 数据/指令 选择 *
7 * RW -- P3.6, 读/写选择 *
8 * E -- P3.5, 使能信号 *
9 * CS2 -- P3.4, 片选1, 右半片 *
10 * CS1 -- P3.3, 片选2, 左半片 *
11 * RST -- P3.2, 复位 *
12 * 版 本: KEIL uV2 *
13 ****************************************************************************************************/
14
15
16 //头文件
17 #include "config.h"
18 #include "ziku.h"
19
20
21 //定义结构体数组
22 struct Word_Buffer
23 {
24 uchar word[2];
25 };
26 struct Word_Buffer word_buf[32]; //定义结构体数组来存储待显示的汉字,共32个
27
28
29 /*****************************************************************************************************
30 * 函 数 名: Delay
31 * 功能描述: 本函数为延时子函数,延时 i ms
32 * 全局变量: 无
33 * 入口参数: i
34 * 出口参数: 无
35 * 调用模块: 无
36 * 版 本: KEIL uV2
37 ******************************************************************************************************/
38 void Delay(uchar i)
39 {
40 1 uchar j;
41 1 while(i > 0)
42 1 {
43 2 i--;
44 2 j = 122;
45 2 while(j > 0)
46 2 {
47 3 j--;
48 3 }
49 2 }
50 1 }
51
52 /*****************************************************************************************************
53 * 函 数 名: Initiate
54 * 功能描述: 本函数为液晶初始化子函数
55 * 全局变量: 无
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 2
56 * 入口参数: 无
57 * 出口参数: 无
58 * 调用模块: 无
59 * 版 本: KEIL uV2
60 ******************************************************************************************************/
61 void Initiate(void)
62 {
63 1 Delay(40);
64 1 LEFTSIDE
65 1 WriteCmd(0x3e); //关显示
66 1 RIGHTSIDE
67 1 WriteCmd(0x3e); //关显示
68 1
69 1 LEFTSIDE
70 1 WriteCmd(0x3f); //开显示
71 1 RIGHTSIDE
72 1 WriteCmd(0x3f); //开显示
73 1
74 1 LEFTSIDE //起始行设置为第一行
75 1 WriteCmd(0xc0);
76 1 RIGHTSIDE
77 1 WriteCmd(0xc0);
78 1
79 1 ClearDDRAM(); //清屏
80 1
81 1 LEFTSIDE //读左右半屏
82 1 ReadData();
83 1 RIGHTSIDE
84 1 ReadData();
85 1 }
86
87
88 /*****************************************************************************************************
89 * 函 数 名: CheckBusy
90 * 功能描述: 本函数为判断LCD忙子函数,BUSY=1时,为忙;BUSY=0时,为空闲
91 * 全局变量: 无
92 * 入口参数:
93 * 出口参数: 无
94 * 调用模块: 无
95 * 日 期:
96 * 版 本: KEIL uV2
97 ******************************************************************************************************/
98 void CheckBusy(void)
99 {
100 1 DPORT = 0xff;
101 1 DI = 0;
102 1 RW = 1;
103 1 E = 1;
104 1 while(DPORT & 0x80); //BUSY=1时,为忙,则等待;BUSY=0时,为空闲
105 1 E = 0;
106 1 }
107
108
109 /*****************************************************************************************************
110 * 函 数 名: WriteCmd
111 * 功能描述: 本函数为写指令子函数
112 * 全局变量: 无
113 * 入口参数: cmd -- 要写入的指令
114 * 出口参数: 无
115 * 调用模块: CheckBusy()
116 * 版 本: KEIL uV2
117 ******************************************************************************************************/
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 3
118 void WriteCmd(uchar cmd) //写指令子函数
119 {
120 1 // CheckBusy();
121 1 DI = 0;
122 1 RW = 0;
123 1 DPORT = cmd;
124 1 E = 1;
125 1 E = 0;
126 1 }
127
128
129 /*****************************************************************************************************
130 * 函 数 名: WriteData
131 * 功能描述: 本函数为写数据子函数
132 * 全局变量: 无
133 * 入口参数: data -- 要写入的数据
134 * opp -- 显示标志位: 为1,显示阳码(点亮为0);为0,显示阴码(点亮为1)
135 * 出口参数: 无
136 * 调用模块: CheckBusy()
137 * 版 本: KEIL uV2
138 ******************************************************************************************************/
139 void WriteData(uchar dat) //写数据子函数
140 {
141 1 // CheckBusy();
142 1 DI = 1;
143 1 RW = 0;
144 1 DPORT = dat;
145 1 E = 1;
146 1 E = 0;
147 1 }
148
149
150 /*****************************************************************************************************
151 * 函 数 名: ReadData
152 * 功能描述: 本函数为读数据子函数
153 * 全局变量: 无
154 * 入口参数:
155 * 出口参数: 无
156 * 调用模块: CheckBusy()
157 * 版 本: KEIL uV2
158 ******************************************************************************************************/
159 uchar ReadData(void)
160 {
161 1 uchar rddata;
162 1 // CheckBusy();
163 1 DI = 1;
164 1 RW = 1;
165 1 E = 1;
166 1 rddata = DPORT;
167 1 E = 0;
168 1 return rddata;
169 1 }
170
171
172 /*****************************************************************************************************
173 * 函 数 名: SetPos
174 * 功能描述: 本函数为设置显示起始地址(显示行,页地址,Y地址)子函数
175 * 全局变量: 无
176 * 入口参数: st_line -- 液晶显示的起始行,0--63,共64行
177 * x_add -- 液晶显示的页地址,即为DDRAM的行地址,8行为一页,共8页
178 * y_add -- 液晶显示的Y地址,0--127,在对DDRAM进行读/写操作后,Y地址指针自动加1
179 * 出口参数: 无
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 4
180 * 调用模块: WriteCmd()
181 * 版 本: KEIL uV2
182 ******************************************************************************************************/
183 void SetPos(uchar st_line, uchar x_add, uchar y_add) //设置显示起始地址子函数
184 {
185 1 st_line &= 0x3f; //st_line(起始行)的取值范围为0--63
186 1 x_add &= 0x07; //x_add(页地址)的取值范围为0--7
187 1 WriteCmd(st_line + 0xc0); //+ 0xc0根据液晶显示模块指令中设置起始行的格式
188 1 WriteCmd(x_add + 0xb8); //+ 0xb1根据液晶显示模块指令中设置页地址的格式
189 1 if(y_add < 64)
190 1 {
191 2 LEFTSIDE
192 2 WriteCmd(y_add + 0x40); //y_add的取值范围为0-63,y_add<64时,左半屏显示
193 2 }
194 1 else
195 1 {
196 2 RIGHTSIDE
197 2 WriteCmd(y_add); //63<y_add<124时,右半屏显示
198 2 }
199 1 }
200
201
202 /*****************************************************************************************************
203 * 函 数 名: ClearDDRAM
204 * 功能描述: 本函数为清DDRAM子函数
205 * 全局变量: 无
206 * 入口参数: 无
207 * 出口参数: 无
208 * 调用模块: WriteData(),SetPos()
209 * 版 本: KEIL uV2
210 ******************************************************************************************************/
211 void ClearDDRAM(void)
212 {
213 1 uchar i; //i表示页地址
214 1 uchar j; //j表示列地址
215 1 for(i = 0; i < 8; i++) //清右半屏
216 1 {
217 2 //此处注意,起始行地址受到页地址的限制
218 2 SetPos(0, i, 0); //设置起始行为第0行,起始页为第0页,起始列为第0列
219 2 for(j = 0; j < 64; j++) //将右半屏DRAM的64个字节全部清零
220 2 {
221 3 WriteData(0);
222 3 }
223 2 }
224 1 for(i = 0; i < 8; i++) //清左半屏
225 1 {
226 2 SetPos(0, i, 64); //设置起始行为第0行,起始页为第0页,起始列为第64列
227 2 for(j = 0; j < 64; j++) //将左半屏DRAM的64个字节全部清零
228 2 {
229 3 WriteData(0);
230 3 }
231 2 }
232 1 }
233
234
235 /*****************************************************************************************************
236 * 函 数 名: WriteWord
237 * 功能描述: 本函数为在液晶屏的任意位置写单个汉字的子函数
238 * 全局变量: 无
239 * 入口参数: st_line,显示的起始行,0--63
240 * x_add,显示的页地址,0--7
241 * y_add,显示的列地址,0--127
C51 COMPILER V7.50 LCD12864 05/05/2009 20:58:41 PAGE 5
242 * Index[2],字符串数组,用来存储汉字
243 * 出口参数: 无
244 * 调用模块: WriteData(),SetPos()
245 * 版 本: KEIL uV2
246 ******************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -