📄 ra8835.lst
字号:
207 1 test_read=ReadData();
208 1 }
209
210 /*============================================================================
211 ** 函数名称: Locatexy
212 ** 功能描述: LCD的光标定位
213 ** 输入参数: Uchar x 水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标
214 Uchar y 垂直方向以行线定位的坐标,可以定位到点单位
215 注:屏左上角为(0,0)
216 **
217 ** 输出参数: 无
218 **
219 ** 全局变量: 无
220 ** 调用模块:
221 **---------------------------------------------------------------------------
222 ** 作 者: wjf
223 ** 日 期: 2008/08/01
224 ============================================================================*/
225 void Locatexy(Uchar x,Uchar y, Uchar attribs) {
226 1 Uint temp;
227 1 temp = (Uint)y*paraP9+x;
228 1 if(attribs) temp += BasePart2*256; // 如果需要就指向第二区,加上第二区首地址
229 1 WriteCommand( CsrW ); // 光标Locate,定位
230 1 WriteData( (Uchar)(temp &0xff) ); // 写入参数CSRL设置参数光标指针低8位
231 1 WriteData( (Uchar)(temp /256 ) ); // 写入参数CSRH设置参数光标指针高8位
232 1 }
233
234
235
236 /*============================================================================
237 ** 函数名称: dprintf
238 ** 功能描述: ASCII(8*16) 及 汉字(16*16) 混合字符串显示
239 ** 输入参数: Uchar x 显示字符串的横坐标 8点一字节位置
240 Uchar y 显示字符串的纵坐标 一条扫描线定位
241 **
C51 COMPILER V7.20 RA8835 08/19/2008 11:47:52 PAGE 5
242 ** 输出参数: Uchar 字符串的长度(汉字为两个字节)
243 **
244 ** 全局变量: 无
245 ** 调用模块:
246
247 说明:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
248 **---------------------------------------------------------------------------
249 ** 作 者: wjf
250 ** 日 期: 2008/08/01
251 ============================================================================*/
252
253 Uchar dprintf(Uchar x,Uchar y, Uchar *ptr, Uchar att)
254 {
255 1
256 1 Uchar c1,c2;
257 1 Uchar i,j,uLen,uRow,uCol,temp;
258 1 Uint k;
259 1 uRow = x;
260 1 uCol = y;
261 1 uLen=0;
262 1 WriteCommand( CsrDirD ); // 光标移动方向定义:自动下移
263 1 Locatexy(uRow,uCol,att); //起点定位
264 1 while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;}; //探测字串长度
265 1 i=0;
266 1 while(i<uLen)
267 1 {
268 2 c1 = ptr[i];
269 2 c2 = ptr[i+1];
270 2
271 2 //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
272 2 if(c1 <=128) // ASCII
273 2 {
274 3 if (c1 >= 0x10) {
275 4 WriteCommand( mWrite ); // 写数据(命令)
276 4 for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]);
277 4 }
278 3 uRow++; // 列数加1
279 3 }
280 2 else // 中文
281 2 {
282 3 for(j=0;j<sizeof(Cdotlib)/sizeof(Cdotlib[0]);j++) // 查找定位
283 3 {
284 4 if((c1 == Cdotlib[j].Index[0]) && (c2 == Cdotlib[j].Index[1]))
285 4 break;
286 4 }
287 3 for(k=0;k<2;k++) // 分16行输出
288 3 {
289 4 Locatexy(uRow+k,uCol,att);
290 4 WriteCommand( mWrite ); // 写数据(命令)
291 4
292 4 for(temp=0;temp<16;temp++) WriteData( Cdotlib[j].Msk[temp*2 + k]);
293 4 }
294 3 uRow +=2; // 光标右移一大格
295 3 i++;
296 3 }
297 2 if(uRow >= 40) // 光标后移
298 2 {
299 3 uCol += 16; // Y坐标
300 3 uRow = 0; // X坐标
301 3 if( uCol >= 240 ) uCol = 0;
302 3 }
303 2
C51 COMPILER V7.20 RA8835 08/19/2008 11:47:52 PAGE 6
304 2 Locatexy(uRow,uCol,att);
305 2 i++;
306 2 }
307 1 return uLen; //返回字串长度,汉字按2字节计算
308 1 }
309
310
311 /*============================================================================
312 ** 函数名称: hprintf
313 ** 功能描述:汉字(24*16) 混合字符串显示
314 ** 输入参数: Uchar x 显示字符串的横坐标 8点一字节位置
315 Uchar y 显示字符串的纵坐标 一条扫描线定位
316 **
317 ** 输出参数: Uchar 字符串的长度(汉字为两个字节)
318 **
319 ** 全局变量: 无
320 ** 调用模块:
321
322 说明:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
323 **---------------------------------------------------------------------------
324 ** 作 者: wjf
325 ** 日 期: 2008/08/08
326 ============================================================================*/
327
328 Uchar hprintf(Uchar x,Uchar y, Uchar *ptr, Uchar att)
329 {
330 1
331 1
332 1 Uchar c1,c2;
333 1 Uchar i,j,uLen,uRow,uCol,temp;
334 1 Uint k;
335 1 uRow = x;
336 1 uCol = y;
337 1 uLen=0;
338 1 WriteCommand( CsrDirD ); // 光标移动方向定义:自动下移
339 1 Locatexy(uRow,uCol,att); //起点定位
340 1 while ( (Uchar)ptr[uLen] >= 0x10 ){uLen++;}; //探测字串长度
341 1 i=0;
342 1 while(i<uLen)
343 1 {
344 2 c1 = ptr[i];
345 2 c2 = ptr[i+1];
346 2
347 2 //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
348 2 if(c1 <=128) // ASCII
349 2 {
350 3 if (c1 >= 0x10) {
351 4 WriteCommand( mWrite ); // 写数据(命令)
352 4 for(j=0;j<16;j++) WriteData( ASC_MSK[(c1-0x20)*16 +j ]);
353 4 }
354 3 uRow++; // 列数加1
355 3 }
356 2 else // 中文
357 2 {
358 3 for(j=0;j<sizeof(Cdotlib24)/sizeof(Cdotlib24[0]);j++) // 查找定位
359 3 {
360 4 if((c1 == Cdotlib24[j].Index[0]) && (c2 == Cdotlib24[j].Index[1]))
361 4 break;
362 4 }
363 3 for(k=0;k<3;k++) // 分16行输出
364 3 {
365 4 Locatexy(uRow+k,uCol,att);
C51 COMPILER V7.20 RA8835 08/19/2008 11:47:52 PAGE 7
366 4 WriteCommand( mWrite ); // 写数据(命令)
367 4
368 4 for(temp=0;temp<16;temp++) WriteData( Cdotlib24[j].Msk[temp*3 + k]);
369 4 }
370 3 uRow +=3; // 光标右移一大格
371 3 i++;
372 3 }
373 2 if(uRow >= 40) // 光标后移
374 2 {
375 3 uCol += 16; // Y坐标
376 3 uRow = 0; // X坐标
377 3 if( uCol >= 240 ) uCol = 0;
378 3 }
379 2
380 2 Locatexy(uRow,uCol,att);
381 2 i++;
382 2 }
383 1 return uLen; //返回字串长度,汉字按2字节计算
384 1 }
385
386
387 /*============================================================================
388 ** 函数名称: printfUpDown
389 ** 功能描述:显示 (8*16)的上下箭头
390 ** 输入参数: Uchar x 显示横坐标 8点一字节位置
391 Uchar y 显示纵坐标 一条扫描线定位
392 Uchar flag 0——上箭头 1——下箭头
393 **
394 ** 输出参数: 无
395 **
396 ** 全局变量: 无
397 ** 调用模块:
398 **---------------------------------------------------------------------------
399 ** 作 者: wjf
400 ** 日 期: 2008/08/09
401 ============================================================================*/
402
403 void printfUpDown(Uchar x,Uchar y, Uchar flag, Uchar att)
404 {
405 1
406 1 Uchar i;
407 1 WriteCommand( CsrDirD );
408 1 Locatexy(x,y,att);
409 1 WriteCommand( mWrite );
410 1 for(i=0;i<16;i++) WriteData( up_down[flag*16 +i ]);
411 1
412 1 }
413
414 /*============================================================================
415 ** 函数名称: printfLeftRight
416 ** 功能描述:显示 (16*16)的上下箭头
417 ** 输入参数: Uchar x 显示横坐标 8点一字节位置
418 Uchar y 显示纵坐标 一条扫描线定位
419 Uchar flag 0——左箭头 1——右箭头 2——℃ 3----λ 4-------光标
420 **
421 ** 输出参数: 无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -