📄 t6963b.lst
字号:
}
#endif
189 /********************************************************/
190 /* 写无参数的指令 */
191 /********************************************************/
192 uchar fnPR12(uchar uCmd)
193 {
194 1 if(fnSTA01() == 0)
195 1 return 1;
196 1 LCMCW = uCmd;
197 1 return 0; // 返回0成功
198 1 }
199
200 /********************************************************/
201 /* 写数据 */
202 /********************************************************/
203 uchar fnPR13(uchar uData)
204 {
205 1 if(fnSTA3() == 0)
206 1 return 1;
207 1 LCMDW = uData;
208 1 return 0; // 返回0成功
209 1 }
210 #if 0
/********************************************************/
/* 读数据 */
/********************************************************/
uchar fnPR2(void)
{
if(fnSTA01() == 0)return 1; // 获取状态,如果状态错
return LCMDW; // 返回数据
}
#endif
220 /********************************************************/
221 /* 设置当前地址 */
222 /********************************************************/
223 void fnSetPos(uchar urow, uchar ucol)
224 {
225 1 uint iPos;
226 1
227 1 iPos = urow * 30 + ucol;
228 1 fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
229 1 gCurRow = urow;
230 1 gCurCol = ucol;
231 1 }
232
233 /********************************************************/
234 /* 设置当前显示行、列 */
235 /********************************************************/
236 void cursor(uchar uRow, uchar uCol)
237 {
238 1 fnSetPos(uCol* 16, uRow);
239 1 }
240
241 /********************************************************/
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 5
242 /* 清屏 */
243 /********************************************************/
244 void cls(void)
245 {
246 1 uint i;
247 1
248 1 fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
249 1 fnPR12(LC_AUT_WR); // 自动写
250 1 for(i=0;i<240*128/8;i++) // 清一屏
251 1 {
252 2 fnSTA3();
253 2 fnPR13(0x0); // 写数据,实际使用时请将0x55改成0x0
254 2 }
255 1 fnPR12(LC_AUT_OVR); // 自动写结束
256 1 fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
257 1 gCurRow = 0; // 置地址指针存储变量
258 1 gCurCol = 0;
259 1 }
260
261 /********************************************************/
262 /* LCM 初始化 */
263 /********************************************************/
264 char fnLCMInit(void)
265 {
266 1 if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
267 1 return (0xff);
268 1 fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
269 1 fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
270 1 fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
271 1 fnPR12(LC_CUR_SHP | 0x01); // 光标形状
272 1 fnPR12(LC_MOD_OR); // 显示方式设置
273 1 fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
274 1
275 1 return 0;
276 1 }
277
278 /********************************************************/
279 /* ASCII(8*16) 及 汉字(16*16) 显示函数 */
280 /* 其中有全局变量black表示是否反显 1: 反显 0: 正常 */
281
282 /********************************************************/
283 uchar dprintf(char *fmt,...)
284 {
285 1 va_list arg_ptr;
286 1 char c1,c2,cData;
287 1
288 1 char tmpBuf[80];// _at_ 0x40; // LCD显示数据缓冲区
289 1 uchar i=0,j,uLen,uRow,uCol;
290 1 uint k;
291 1
292 1 va_start(arg_ptr, fmt);
293 1 uLen = (uchar) vsprintf(tmpBuf, fmt,arg_ptr);
294 1 va_end(arg_ptr);
295 1
296 1 // EA=0;
297 1 while(i<uLen)
298 1 {
299 2
300 2 c1 = tmpBuf[i];
301 2 c2 = tmpBuf[i+1];
302 2 uRow = fnGetRow();
303 2 uCol = fnGetCol();
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 6
304 2 if(c1 > 0 )
305 2 { // ASCII
306 3 if(c1 < 0x20)
307 3 {
308 4 switch(c1)
309 4 {
310 5 case CR:
311 5 case LF: // 回车或换行
312 5 i++;
313 5 if(uRow < 144)
314 5 fnSetPos(uRow+16,0);
315 5 else
316 5 fnSetPos(0,0);
317 5 continue;
318 5 case BS: // 退格
319 5 if(uCol > 0)
320 5 uCol--;
321 5 fnSetPos(uRow,uCol);
322 5 cData = 0x00;
323 5 break;
324 5 default: // 其他
325 5 c1 = 0x1f;
326 5 }
327 4 }
328 3 for(j=0;j<16;j++)
329 3 {
330 4 fnPR12(LC_AUT_WR); // 写数据
331 4 if(c1 >= 0x20)
332 4 {
333 5 if( j < (16-ASC_CHR_HEIGHT) )
334 5 fnPR13(0x00); // 写数据0输出空
335 5 else
336 5 fnPR13((0xff*black)^ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
337 5 }
338 4 else
339 4 fnPR13(cData);
340 4 fnPR12(LC_AUT_OVR);
341 4 fnSetPos(uRow+j+1,uCol);
342 4 }
343 3 if(c1 != BS) // 非退格
344 3 uCol++;
345 3 }
346 2
347 2 else
348 2 { // 中文
349 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
350 3 {
351 4 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
352 4 break;
353 4 }
354 3 for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
355 3 {
356 4 fnSetPos(uRow+k,uCol);
357 4 fnPR12(LC_AUT_WR); // 写数据
358 4 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
359 4 {
360 5 fnPR13((0xff*black)^GB_16[j].Msk[k*2]);
361 5 fnPR13((0xff*black)^GB_16[j].Msk[k*2+1]);
362 5 }
363 4 else // 未找到该字
364 4 {
365 5 if(k < sizeof(GB_16[0].Msk)/4)
C51 COMPILER V7.01 T6963B 03/31/2005 21:39:13 PAGE 7
366 5 {
367 6 fnPR13(0x00);
368 6 fnPR13(0x00);
369 6 }
370 5 else
371 5 {
372 6 fnPR13(0xff);
373 6 fnPR13(0xff);
374 6 }
375 5 }
376 4 fnPR12(LC_AUT_OVR);
377 4 }
378 3 uCol += 2;
379 3 i++;
380 3 }
381 2 if(uCol >=30) // 光标后移
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -