lcmdrv.lst
来自「51单片机在lcd上实现zlg gui,希望好的请多加点分数」· LST 代码 · 共 489 行 · 第 1/2 页
LST
489 行
230 1 for(x=0; x<8; x++)
231 1 { LCM_WrCommand(LCM_ADDRSTRX+x); // 设置页地址,即X
232 2 LCM_WrCommand(LCM_ADDRSTRY); // 设置列地址,即Y
233 2 for(y=0; y<64; y++)
234 2 { LCM_WrData(filldata);
235 3 }
236 2 }
237 1 }
238
239
240 /***********************************************************************
C51 COMPILER V7.50 LCMDRV 09/11/2007 21:56:41 PAGE 5
241 * 名称:LCM_DispIni()
242 * 功能:LCM显示初始化
243 * 入口参数:无
244 * 出口参数:无
245 * 注:初化显示后,清屏并设置显示起始行为0
246 * 会复位LCM_DISPCX,LCM_DISPCY.(并会只选中CS1)
247 ***********************************************************************/
248 void LCM_DispIni(void)
249 { uint32 i;
250 1
251 1 // 设置引脚连接模块
252 1
253 1 // 复位LCM
254 1 CRST();
255 1 for(i=0; i<5000; i++);
256 1 SRST();
257 1 for(i=0; i<5000; i++);
258 1
259 1 SCS1(); // 选中两个控制芯片
260 1 SCS2();
261 1
262 1 LCM_WrCommand(LCM_DISPOFF); // 打开显示
263 1 LCM_WrCommand(LCM_STARTROW); // 设置显示起始行为0
264 1
265 1 LCM_WrCommand(LCM_ADDRSTRX); // 设置页地址,即X
266 1 LCM_WrCommand(LCM_ADDRSTRY); // 设置列地址,即Y
267 1 LCM_WrCommand(LCM_DISPON); // 打开显示
268 1 }
269
270
271
272 /////////////////////////////////////////////////////////////////////////////
273
274
275 /****************************************************************************
276 * 名称:GUI_FillSCR()
277 * 功能:全屏填充。直接使用数据填充显示缓冲区。
278 * 入口参数:dat 填充的数据
279 * 出口参数:无
280 * 说明:用户根据LCM的实际情况编写此函数。
281 ****************************************************************************/
282 void GUI_FillSCR(TCOLOR dat)
283 { uint32 i,j;
284 1
285 1 // 填充缓冲区
286 1 for(i=0; i<(GUI_LCM_YMAX/8); i++)
287 1 { for(j=0; j<GUI_LCM_XMAX; j++)
288 2 { gui_disp_buf[i][j] = dat;
289 3 }
290 2 }
291 1
292 1 // 填充LCM
293 1 LCM_DispFill(dat);
294 1 }
295
296
297 /****************************************************************************
298 * 名称:GUI_Initialize()
299 * 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
300 * 入口参数:无
301 * 出口参数:无
302 * 说明:用户根据LCM的实际情况编写此函数。
C51 COMPILER V7.50 LCMDRV 09/11/2007 21:56:41 PAGE 6
303 ****************************************************************************/
304 void GUI_Initialize(void)
305 { LCM_DispIni(); // 初始化LCM模块工作模式,纯图形模式
306 1 GUI_FillSCR(0x00); // 初始化缓冲区为0x00,并输出屏幕(清屏)
307 1 }
308
309
310 uint8 const DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
311 /****************************************************************************
312 * 名称:GUI_Point()
313 * 功能:在指定位置上画点。
314 * 入口参数:x 指定点所在列的位置
315 * y 指定点所在行的位置
316 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
317 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
318 * 说明:操作失败原因是指定地址超出缓冲区范围。
319 ****************************************************************************/
320 uint8 GUI_Point(uint8 x, uint8 y, TCOLOR color)
321 { uint8 bak;
322 1
323 1 // 参数过滤
324 1 if(x>=GUI_LCM_XMAX) return(0);
325 1 if(y>=GUI_LCM_YMAX) return(0);
326 1
327 1 // 设置相应的点为1或0
328 1 bak = LCM_ReadByte(x,y);
329 1 if(0==color)
330 1 { bak &= (~DEC_HEX_TAB[y&0x07]);
331 2 }
332 1 else
333 1 { bak |= DEC_HEX_TAB[y&0x07];
334 2 }
335 1
336 1 // 刷新显示
337 1 LCM_WriteByte(x, y, bak);
338 1 return(1);
339 1 }
340
341
342 /****************************************************************************
343 * 名称:GUI_ReadPoint()
344 * 功能:读取指定点的颜色。
345 * 入口参数:x 指定点所在列的位置
346 * y 指定点所在行的位置
347 * ret 保存颜色值的指针
348 * 出口参数:返回0表示指定地址超出缓冲区范围
349 * 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效,
350 * RGB结构则R、G、B变量有效。
351 ****************************************************************************/
352 /*uint8 GUI_ReadPoint(uint8 x, uint8 y, TCOLOR *ret)
353 { uint8 bak;
354
355 // 参数过滤
356 if(x>=GUI_LCM_XMAX) return(0);
357 if(y>=GUI_LCM_YMAX) return(0);
358
359 bak = LCM_ReadByte(x,y);
360 if( (bak & (DEC_HEX_TAB[y&0x07])) == 0 ) *ret = 0x00;
361 else *ret = 0x01;
362
363 return(1);
364 }
C51 COMPILER V7.50 LCMDRV 09/11/2007 21:56:41 PAGE 7
365
366
367 /****************************************************************************
368 * 名称:GUI_HLine()
369 * 功能:画水平线。
370 * 入口参数:x0 水平线起点所在列的位置
371 * y0 水平线起点所在行的位置
372 * x1 水平线终点所在列的位置
373 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
374 * 出口参数:无
375 * 说明:操作失败原因是指定地址超出缓冲区范围。
376 ****************************************************************************/
377 void GUI_HLine(uint8 x0, uint8 y0, uint8 x1, TCOLOR color)
378 { uint8 bak;
379 1
380 1 if(x0>x1) // 对x0、x1大小进行排列,以便画图
381 1 { bak = x1;
382 2 x1 = x0;
383 2 x0 = bak;
384 2 }
385 1
386 1 do
387 1 { GUI_Point(x0, y0, color); // 逐点显示,描出垂直线
388 2 x0++;
389 2 }while(x1>=x0);
390 1 }
391
392
393 /***********************************************************************
394 * 名称:GUI_RLine()
395 * 功能:画竖直线。根据硬件特点,实现加速。
396 * 入口参数:x0 垂直线起点所在列的位置
397 * y0 垂直线起点所在行的位置
398 * y1 垂直线终点所在行的位置
399 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
400 * 出口参数: 无
401 * 说明:操作失败原因是指定地址超出缓冲区范围。
402 ***********************************************************************/
403 void GUI_RLine(uint8 x0, uint8 y0, uint8 y1, TCOLOR color)
404 { uint8 bak;
405 1 uint8 wr_dat;
406 1
407 1 if(y0>y1) // 对y0、y1大小进行排列,以便画图
408 1 { bak = y1;
409 2 y1 = y0;
410 2 y0 = bak;
411 2 }
412 1
413 1 do
414 1 { // 先读取当前点的字节数据
415 2 bak = LCM_ReadByte(x0,y0);
416 2
417 2 // 进行'与'/'或'操作后,将正确的数据写回LCM
418 2 // 若y0和y1不是同一字节,则y0--当前字节结束,即(y0+8)&0x38,全写1,或者0。
419 2 // 若y0和y1是同一字节,则y0--y1,要全写1,或者0。
420 2 // 方法:dat=0xff,然后按y0清零dat低位,按y1清零高位。
421 2 if((y0>>3) != (y1>>3)) // 竖直线是否跨越两个字节(或以上)
422 2 { wr_dat = 0xFF << (y0&0x07);// 清0低位
423 3
424 3 if(color)
425 3 { wr_dat = bak | wr_dat; // 若color不为0,则显示
426 4 }
C51 COMPILER V7.50 LCMDRV 09/11/2007 21:56:41 PAGE 8
427 3 else
428 3 { wr_dat = ~wr_dat; // 若color为0,则清除显示
429 4 wr_dat = bak & wr_dat;
430 4 }
431 3 LCM_WriteByte(x0,y0, wr_dat);
432 3 y0 = (y0+8)&0x38;
433 3 }
434 2 else
435 2 { wr_dat = 0xFF << (y0&0x07);
436 3 wr_dat = wr_dat & ( 0xFF >> (7-(y1&0x07)) );
437 3
438 3 if(color)
439 3 { wr_dat = bak | wr_dat; // 若color不为0,则显示
440 4 }
441 3 else
442 3 { wr_dat = ~wr_dat; // 若color为0,则清除显示
443 4 wr_dat = bak & wr_dat;
444 4 }
445 3 LCM_WriteByte(x0,y0, wr_dat);
446 3 return;
447 3 } // end of if((y0>>3) != (y1>>3))... else...
448 2 }while(y1>=y0);
449 1
450 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 736 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1032 13
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?