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