📄 showfun.lst
字号:
178 uchar fnGetRow();
179 uchar fnGetCol();
180 uchar fnST01(); // 状态位STA1,STA0判断(读写指令和读写数据)
181 uchar fnST2(); // 状态位ST2判断(数据自动读状态)
182 uchar fnST3(); // 状态位ST3判断(数据自动写状态)
183 uchar fnST6(); // 状态位ST6判断(屏读/屏拷贝状态)
184 uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2); // 写双参数的指令
185 uchar fnPR11(uchar uCmd,uchar uPar1); // 写单参数的指令
186 uchar fnPR12(uchar uCmd); // 写无参数的指令
187 uchar fnPR13(uchar uData); // 写数据
188 uchar fnPR2(); // 读数据
189 void fnSetPos(uchar urow, uchar ucol); // 设置当前地址
190 void cursor(uchar uRow, uchar uCol); //设置当前显示行、列
191 void at(unsigned char x,unsigned char y);/*设定文本x,y值*/
192 void cls(); // 清屏
193 char fnLCMInit(); // LCM 初始化
194 void charout(uchar *str); //ASCII(8*8) 显示函数
195 uchar dprintf(uchar x,uchar y,char *fmt);// ASCII(8*16) 及 汉字(16*16) 显示函数
196 void OutToLCD(uchar Dat,uchar x,uchar y);//显示辅助函数
197
198 void SetShowMode(uchar newShowModeSW);
199 void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode);
200 void Pixel(unsigned char PointX,unsigned char PointY, bit Mode);
201
202 uchar fnGetRow(void)
203 {
204 1 return gCurRow;
205 1 }
206
207 uchar fnGetCol(void)
208 {
209 1 return gCurCol;
210 1 }
C51 COMPILER V8.05a SHOWFUN 12/09/2006 18:03:03 PAGE 5
211
212 uchar fnST01(void) // 状态位STA1,STA0判断(读写指令和读写数据)
213 {
214 1 uchar i;
215 1
216 1 for(i=10;i>0;i--)
217 1 {
218 2 if((LCMCW & 0x03) == 0x03)
219 2 break;
220 2 }
221 1 return i; // 若返回零,说明错误
222 1 }
223
224 uchar fnST2(void) // 状态位ST2判断(数据自动读状态)
225 {
226 1 uchar i;
227 1
228 1 for(i=10;i>0;i--)
229 1 {
230 2 if((LCMCW & 0x04) == 0x04)
231 2 break;
232 2 }
233 1 return i; // 若返回零,说明错误
234 1 }
235
236 uchar fnST3(void) // 状态位ST3判断(数据自动写状态)
237 {
238 1 uchar i;
239 1
240 1 for(i=10;i>0;i--)
241 1 {
242 2 if((LCMCW & 0x08) == 0x08)
243 2 break;
244 2 }
245 1 return i; // 若返回零,说明错误
246 1 }
247
248 uchar fnST6(void) // 状态位ST6判断(屏读/屏拷贝状态)
249 {
250 1 uchar i;
251 1
252 1 for(i=10;i>0;i--)
253 1 {
254 2 if((LCMCW & 0x40) == 0x40)
255 2 break;
256 2 }
257 1 return i; // 若返回零,说明错误
258 1 }
259
260 uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) // 写双参数的指令
261 {
262 1 if(fnST01() == 0)
263 1 return 1;
264 1 LCMDW = uPar1;
265 1 if(fnST01() == 0)
266 1 return 2;
267 1 LCMDW = uPar2;
268 1 if(fnST01() == 0)
269 1 return 3;
270 1 LCMCW = uCmd;
271 1 return 0; // 返回0成功
272 1 }
C51 COMPILER V8.05a SHOWFUN 12/09/2006 18:03:03 PAGE 6
273
274 uchar fnPR11(uchar uCmd,uchar uPar1) // 写单参数的指令
275 {
276 1 if(fnST01() == 0)
277 1 return 1;
278 1 LCMDW = uPar1;
279 1 if(fnST01() == 0)
280 1 return 2;
281 1 LCMCW = uCmd;
282 1 return 0; // 返回0成功
283 1 }
284
285 uchar fnPR12(uchar uCmd) // 写无参数的指令
286 {
287 1 if(fnST01() == 0)
288 1 return 1;
289 1 LCMCW = uCmd;
290 1 return 0; // 返回0成功
291 1 }
292
293 uchar fnPR13(uchar uData) // 写数据
294 {
295 1 if(fnST3() == 0)
296 1 return 1;
297 1 LCMDW = uData;
298 1 return 0; // 返回0成功
299 1 }
300
301 uchar fnPR2(void) // 读数据
302 {
303 1 if(fnST01() == 0)
304 1 return 1;
305 1 return LCMDW;
306 1 }
307
308
309 void fnSetPos(uchar urow, uchar ucol) //设置当前地址
310 {
311 1 uint iPos;
312 1
313 1 iPos = urow * 20 + ucol;
314 1 fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
315 1 gCurRow = urow;
316 1 gCurCol = ucol;
317 1 }
318
319 void cursor(uchar uRow, uchar uCol) //设置当前显示行、列
320 {
321 1 fnSetPos(uRow * 16, uCol);
322 1 }
323 void at(unsigned char x,unsigned char y)/*设定文本x,y值*/
324 {
325 1 uint iPos; //地址
326 1
327 1 iPos = x + y* 20;
328 1 fnPR1(LC_ADD_POS,iPos&0xff,iPos/256);
329 1 tCurRow = x;
330 1 tCurCol = y;
331 1 }
332
333 // 清屏
334 void cls(void)
C51 COMPILER V8.05a SHOWFUN 12/09/2006 18:03:03 PAGE 7
335 {
336 1 uint i;
337 1
338 1 fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针
339 1 fnPR12(LC_AUT_WR); // 自动写
340 1 for(i=0;i<0x2000;i++)
341 1 {
342 2 fnST3();
343 2 fnPR13(0x00); // 写数据
344 2 }
345 1 fnPR12(LC_AUT_OVR); // 自动写结束
346 1 fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
347 1 gCurRow = 0; // 置地址指针存储变量
348 1 gCurCol = 0;
349 1 }
350
351 // LCM 初始化
352 char fnLCMInit(void)
353 {
354 1 reset=0;
355 1 reset=1;
356 1 fnPR1(LC_TXT_STP,0x00,0x00); // 文本显示区首地址
357 1 fnPR1(LC_TXT_WID,0x14,0x00); // 文本显示区宽度
358 1 fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
359 1 fnPR1(LC_GRH_WID,0x14,0x00); // 图形显示区宽度
360 1 fnPR11(LC_CGR_POS,CGRAMSTART >> 11);
361 1 fnPR12(LC_CUR_SHP | 0x01); // 光标形状
362 1 fnPR12(LC_MOD_OR); // 显示方式设置
363 1 fnPR12(LC_DIS_SW |0x08);
364 1 grhome = GRSTART;
365 1 txthome = TXTSTART;
366 1
367 1 return 0;
368 1 }
369 void charout(uchar *str)
370 {
371 1 uchar ch,len,i,uRow,uCol ;
372 1 len=strlen(str);
373 1 i=0;
374 1 uRow = tCurRow;
375 1 uCol = tCurRow;
376 1 at(uCol,uRow);
377 1 while(i<len)
378 1 {
379 2 ch=str[i]-0x20;
380 2 fnPR11(LC_INC_WR,ch);
381 2 i++;
382 2 }
383 1 }
384 // ASCII及汉字显示函数
385
386 uchar dprintf(uchar x,uchar y,char *fmt)
387 {
388 1 char c1,c2,cData;
389 1 uchar i=0,j,uLen;
390 1 uchar k;
391 1
392 1 uLen=strlen(fmt);
393 1
394 1 while(i<uLen)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -