📄 lcm12864.lst
字号:
163 };
164
165 /*------------------检查忙位-----------------------------*/
166 void chk_busy()
167 {
168 1 RS=0; //RS=0,instruction;RS=1,data
169 1 RW=1; //read busy flag and address counter;H read;L write
170 1 E=1; //high impulse
171 1 Lcd_Bus=0xff;//write instruction to set BF=1
172 1 while((Lcd_Bus&0x80)==0x80); //read busy flag BF=0 receive new instruction
173 1 E=0;
174 1 }
175 /*------------------延时子程序-----------------------------*/
176 void delay(unsigned int t)
177 {
178 1 unsigned int i,j;
179 1 for(i=0;i<t;i++)
C51 COMPILER V8.16 LCM12864 03/12/2009 04:10:13 PAGE 4
180 1 for(j=0;j<10;j++);
181 1 }
182 /*------------------写命令到LCD------------------------------*/
183 void write_com(unsigned char cmdcode)
184 {
185 1 chk_busy();
186 1 RS=0;//RS=0,instruction;RS=1,data
187 1 RW=0;//write
188 1 E=1;
189 1 Lcd_Bus=cmdcode;
190 1 delay(5);////////////////////在数据写入的时候加入适当的延时
191 1 E=0;
192 1 delay(5);
193 1 }
194 /*-------------------写数据到LCD----------------------------*/
195 void write_data(unsigned char Dispdata)
196 {
197 1 chk_busy();
198 1 RS=1;//RS=1,write data
199 1 RW=0;
200 1 E=1;
201 1 Lcd_Bus=Dispdata;
202 1 delay(5);///////////////////在数据写入的时候加入适当的延时
203 1 E=0;
204 1 delay(5);
205 1 }
206 /*------------------初始化LCD屏--------------------------*/
207 void lcdreset()
208 {
209 1 delay(2000);
210 1 write_com(0x30);
211 1 delay(10); //选择基本指令集
212 1 write_com(0x30); //选择8bit数据流,此时DB4=DL,DL=1为8位数据流
213 1 delay(5);
214 1 write_com(0x0c); //开显示(无游标、不反白)
215 1 delay(10);
216 1 write_com(0x01); //清除显示,并且设定地址指针为00H
217 1 delay(500);
218 1 write_com(0x1c); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
219 1 delay(0);
220 1 }
221 /*------------------自定义一个字符代码(一个星星和月亮)--------------------------*/
222 void CGRAM()
223 {
224 1 int i;
225 1 write_com(0x30);//基本指令集
226 1 write_com(0x40);//设定CGRAM地址到地址计数器AC
227 1 for(i=0;i<16;i++)
228 1 {
229 2 write_data(zk[i*2]);
230 2 write_data(zk[i*2+1]);
231 2 }
232 1 }
233 /*------------------显示字符串--------------------------*/
234 void hzkdis(unsigned char code *s)
235 {
236 1 while(*s>0)
237 1 {
238 2 write_data(*s);
239 2 s++;
240 2 delay(50);
241 2 }
C51 COMPILER V8.16 LCM12864 03/12/2009 04:10:13 PAGE 5
242 1 }
243 /*------------------首屏显示--------------------------*/
244 void ceshi()
245 {
246 1 write_com(0x01);//清除显示,并且设定地址指针为00H
247 1 delay(5);
248 1
249 1 write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)
250 1 hzkdis("吾将上下而求索!");
251 1
252 1 write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)
253 1 hzkdis("初级单片机开发");
254 1
255 1 write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)
256 1 hzkdis("TEL:13928574872");
257 1
258 1 write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)
259 1 hzkdis("测试程序: 李燕绪");
260 1
261 1
262 1 }
263 /*------------------显示图片------------------------*/
264 void Disp_Img(unsigned char code *img)
265 { unsigned int j=0;
266 1 unsigned char x,y,i;
267 1 for(i=0;i<9;i+=8)
268 1 for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/
269 1 for(x=0;x<8;x++)
270 1 { write_com(0x36);//功能设置---8BIT控制界面,扩充指令集绘图显示开
271 2 write_com(y+0x80); //行地址
272 2 write_com(x+0x80+i); //列地址
273 2 write_com(0x30);
274 2 write_data(img[j++]);
275 2 write_data(img[j++]);
276 2 }
277 1
278 1 }
279 /*------------------清整个GDRAM空间----------------------------*/
280 void clrgdram()
281 {
282 1 unsigned char x,y;
283 1 for(y=0;y<64;y++)
284 1 for(x=0;x<16;x++)
285 1 {
286 2 write_com(0x34);//功能设置---8BIT控制界面,扩充指令集绘图显示关
287 2 write_com(y+0x80); //行地址
288 2 write_com(x+0x80); //列地址
289 2 write_com(0x30);
290 2 write_data(0x00);
291 2 write_data(0x00);
292 2 }
293 1 }
294 /*------------------整屏写入数据:全亮,或者竖条-----------------------------*/
295 void lcdfill(unsigned char disdata)
296 {
297 1 unsigned char x,y;
298 1 for(y=0;y<32;y++)
299 1 for(x=0;x<16;x++)
300 1 {
301 2 write_com(0x36);
302 2 write_com(y+0x80); //行地址
303 2 write_com(x+0x80); //列地址
C51 COMPILER V8.16 LCM12864 03/12/2009 04:10:13 PAGE 6
304 2 write_com(0x30);
305 2 write_data(disdata);
306 2 write_data(disdata);
307 2 }
308 1 write_com(0x34);
309 1 write_com(0x36);
310 1 }
311 /*------------------显示横-----------------------------*/
312 void Disp_H_Line()
313 {
314 1 unsigned char x,y;
315 1 unsigned char k=0x00;
316 1 for(y=0;y<32;y++)
317 1 {
318 2 k=~k;
319 2 for(x=0;x<16;x++)
320 2 {
321 3 write_com(0x36);
322 3 write_com(y+0x80); //行地址
323 3 write_com(x+0x80); //列地址
324 3 write_com(0x30);
325 3 write_data(k);
326 3 write_data(k);
327 3 };
328 2 }
329 1 write_com(0x34);
330 1 write_com(0x36);
331 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -