📄 rt240128.lst
字号:
193 /***********************************************************************
194 * 名称:LCD_TestStaBit03()
195 * 功能:数据自动写状态是否允许。
196 * 入口参数:无
197 * 出口参数:返回0表示禁止,否则表示允许
198 ***********************************************************************/
199 bit LCD_TestStaBit03(void)
200 {
201 1 uint8 i;
202 1
203 1 for(i=100; i>0; i--)
204 1 {
205 2 if( (LCD_ReadState() & 0x08) == 0x08 )
206 2 break;
207 2 }
208 1 if(i>0)
209 1 return 1;
210 1 else
211 1 return 0;
212 1 }
213
214 /***********************************************************************
215 * 名称:LCD_WriteTCommand1()
216 * 功能:写无参数命令子程序。会先判断LCM状态字。
217 * 入口参数:ucCMD (要写入LCM的命令字)
218 * 出口参数: (操作出错返回0,否则返回)
C51 COMPILER V7.05 RT240128 08/27/2006 23:31:34 PAGE 5
219 ***********************************************************************/
220 bit LCD_WriteTCommand1(uint8 ucCMD)
221 {
222 1 if( LCD_TestStaBit01()==0 )
223 1 return 0;
224 1 LCD_WriteCommand(ucCMD); // 发送命令字
225 1 return 1;
226 1 }
227
228 /***********************************************************************
229 * 名称:LCD_WriteTCommand2()
230 * 功能:写单参数命令子程序。会先判断LCM状态字。
231 * 入口参数:ucCMD (要写入LCM的命令字)
232 * ucDATA1 (参数1)
233 * 出口参数:操作出错返回0,否则返回1
234 * 说明:先发送参数据数据,再发送命令字
235 ***********************************************************************/
236 bit LCD_WriteTCommand2(uint8 ucCMD, uint8 ucDATA1)
237 {
238 1 if( LCD_TestStaBit01()==0 )
239 1 return 0;
240 1 LCD_WriteData(ucDATA1); // 发送数据1
241 1
242 1 if( LCD_TestStaBit01()==0 )
243 1 return 0;
244 1 LCD_WriteCommand(ucCMD); // 发送命令字
245 1
246 1 return 1;
247 1 }
248
249 /***********************************************************************
250 * 名称:LCD_WriteTCommand3()
251 * 功能:写双参数命令子程序。会先判断LCM状态字。
252 * 入口参数:ucCMD (要写入LCM的命令字)
253 * ucDATA1 (参数1)
254 * ucDATA2 (参数2)
255 * 出口参数:操作出错返回0,否则返回1
256 * 说明:先发送两字节参数据数据,再发送命令字
257 ***********************************************************************/
258 bit LCD_WriteTCommand3(uint8 ucCMD, uint8 ucDATA1, uint8 ucDATA2)
259 {
260 1 if( LCD_TestStaBit01()==0 )
261 1 return 0;
262 1 LCD_WriteData(ucDATA1); // 发送数据1
263 1
264 1 if( LCD_TestStaBit01()==0 )
265 1 return 0;
266 1 LCD_WriteData(ucDATA2); // 发送数据2
267 1
268 1 if( LCD_TestStaBit01()==0 )
269 1 return 0;
270 1 LCD_WriteCommand(ucCMD); // 发送命令字
271 1
272 1 return 1;
273 1 }
274
275 /***********************************************************************
276 * 名称:LCD_WriteTData1()
277 * 功能:写1字节数据子程序。先判断状态字。
278 * 入口参数:ucDATA 要写入LCM的数据
279 * 出口参数:操作出错返回0,否则返回1
280 ***********************************************************************/
C51 COMPILER V7.05 RT240128 08/27/2006 23:31:34 PAGE 6
281 bit LCD_WriteTData1(uint8 ucDATA)
282 {
283 1 if( LCD_TestStaBit03()==0 )
284 1 return 0;
285 1 LCD_WriteData(ucDATA); // 发送命令字
286 1
287 1 return 1;
288 1 }
289
290 /***********************************************************************
291 * 名称:LCD_ClearAll()
292 * 功能:LCD填充。以图形方式进行填充,起始地址为0x0000。
293 * 入口参数:ucDATA 要填充的数据
294 * 出口参数:无
295 ***********************************************************************/
296 void LCD_ClearAll(void)
297 {
298 1 uint16 i;
299 1
300 1 LCD_WriteTCommand3(LCD_ADR_POS, 0x00, 0x00); // 置地址指针
301 1 LCD_WriteTCommand1(LCD_AUT_WR); // 自动写
302 1 for(i=0; i<128 * 30; i++)
303 1 LCD_WriteTData1(0x00); // 白底黑字.
304 1 LCD_WriteTCommand1(LCD_AUT_OVR); // 自动写结束
305 1 LCD_WriteTCommand3(LCD_ADR_POS,0x00,0x00); // 重置地址指针
306 1 }
307
308 /***********************************************************************
309 * 名称:LCD_Initialize()
310 * 功能:LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0x0000,。
311 * 入口参数:无
312 * 出口参数:无
313 * 说明:函数会设置LCM数据总线为输出方式
314 ***********************************************************************/
315 void LCD_Initialize(void)
316 {
317 1 LCD_WriteTCommand3(LCD_TXT_STP, 0x00, 0x00); // 设置文本方式RAM起始地址
318 1 LCD_WriteTCommand3(LCD_TXT_WID, 30, 0x00); // 设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
319 1 LCD_WriteTCommand3(LCD_GRH_STP, 0x00, 0x00); // 设置图形方式RAM起始地址
320 1 LCD_WriteTCommand3(LCD_GRH_WID, 30, 0x00); // 设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
321 1 LCD_WriteTCommand1(LCD_MOD_OR); // 设置显示方式为"或"
322 1 LCD_WriteTCommand1(LCD_DIS_SW|0x08); // 设置纯图形显示模式
323 1 }
324
325 /****************************************************************************
326 * 名称:LCD_UpdateDate()
327 * 功能:在指定位置上更新8个点。
328 * 入口参数:x 指定点所在列的位置
329 * y 指定点所在行的位置
330 * 出口参数:
331 * 说明:
332 ****************************************************************************/
333 void LCD_UpdateByte(uint8 x, uint8 y, uint8 ucDATA)
334 {
335 1 uint16 addr;
336 1
337 1 addr = (GUI_LCM_XMAX>>3) * y + (x>>3); /* 找出目标地址 */
338 1 LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8 ); /* 置地址指针 */
339 1 LCD_WriteTCommand2(LCD_INC_WR, ucDATA); /* 输出数据 */
340 1 }
341
342 /****************************************************************************
C51 COMPILER V7.05 RT240128 08/27/2006 23:31:34 PAGE 7
343 * 名称:LCD_UpdatePoint()
344 * 功能:在指定位置上画点,刷新某一点。
345 * 入口参数:x 指定点所在列的位置
346 * y 指定点所在行的位置
347 * bCOLOR 0/1 显示/不显示
348 * 出口参数:
349 * 说明:
350 ****************************************************************************/
351 void LCD_UpdatePoint(uint8 x, uint8 y, bit bCOLOR)
352 {
353 1 uint16 addr;
354 1 uint8 ucTMP;
355 1
356 1 ucTMP = x % 8;
357 1 ucTMP = 7 - ucTMP;
358 1
359 1 if( bCOLOR == 1 )
360 1 ucTMP = 0x01 << ucTMP;
361 1 else
362 1 ucTMP = 0x00;
363 1
364 1 addr = (GUI_LCM_XMAX>>3) * y + (x>>3); /* 找出目标地址 */
365 1 LCD_WriteTCommand3(LCD_ADR_POS, addr&0xFF, addr>>8); /* 置地址指针 */
366 1 LCD_WriteTCommand2(LCD_INC_WR, ucTMP); /* 输出数据 */
367 1 }
368
369
370 /****************************************************************************
371 * 名称:LCD_DispAsciiCh16x8()
372 * 功能:显示ASCII 16×8字符。
373 * 入口参数:x 指定显示位置,x坐标
374 * y 指定显示位置,y坐标
375 * ch 要显示的ASCII字符对应的数组的地址。
376 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
377 * 说明:操作失败原因是指定地址超出有效范围。
378 ****************************************************************************/
379 bit LCD_DispAsciiCh16x8(uint8 xx, uint8 yy, uint8 ucASCII)
380 {
381 1 uint8 x, y;
382 1 uint8 i;
383 1 uint16 AddrOffSet;
384 1
385 1 x = xx;
386 1 y = yy;
387 1 if( x >= (GUI_LCM_XMAX-8) ) /* 参数过滤 */
388 1 return(0);
389 1 if( y >= (GUI_LCM_YMAX-8) ) /* 参数过滤 */
390 1 return(0);
391 1
392 1 AddrOffSet = ( ucASCII - 32) * 16; //
393 1 for(i=0; i<16; i++) // 显示共16行
394 1 {
395 2 LCD_UpdateByte(x, y, FONT16x8ASII[AddrOffSet + i]);
396 2 y++; // 指向下一行
397 2 }
398 1 return(1);
399 1 }
400
401
402 /****************************************************************************
403 * 名称:LCD_DispAsciiStr16x8()
404 * 功能:输出显示字符串,16*8字体
C51 COMPILER V7.05 RT240128 08/27/2006 23:31:34 PAGE 8
405 * 入口参数:x 指定显示位置,x坐标
406 * y 指定显示位置,y坐标
407 * str 要显示的ASCII码字符串
408 * 出口参数:无
409 * 说明:
410 ****************************************************************************/
411 void LCD_DispAsciiStr16x8(uint8 xx, uint8 yy, const char *str)
412 {
413 1 uint8 x, y;
414 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -