📄 display.lst
字号:
235 3 /**下面把一行长度扩展一倍同时变成二行显示**/
236 3 XBYTE[basex ]=double_byte[frtemp[0]][0];
237 3 XBYTE[basex+1]=double_byte[frtemp[0]][1];
238 3 XBYTE[basex+2]=double_byte[frtemp[1]][0];
239 3 XBYTE[basex+3]=double_byte[frtemp[1]][1];
240 3 XBYTE[basex+4]=double_byte[frtemp[2]][0];
241 3 XBYTE[basex+5]=double_byte[frtemp[2]][1];
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 5
242 3 basex +=SCREEN_WIDTH;
243 3 XBYTE[basex ]=double_byte[frtemp[0]][0];
244 3 XBYTE[basex+1]=double_byte[frtemp[0]][1];
245 3 XBYTE[basex+2]=double_byte[frtemp[1]][0];
246 3 XBYTE[basex+3]=double_byte[frtemp[1]][1];
247 3 XBYTE[basex+4]=double_byte[frtemp[2]][0];
248 3 XBYTE[basex+5]=double_byte[frtemp[2]][1];
249 3 basex +=SCREEN_WIDTH;
250 3 }
251 2 }
252 1 }
253 /***在屏幕上显示大数字的图片,其为112x170,每个数字被安排在没4K字节的起始空间,所以不存在跨越16K边界的问题
-**/
254 void draw_storey(unsigned char orgx,unsigned int orgy,unsigned char num){//this is 112x170
255 1 unsigned char row;
256 1 unsigned int basex;
257 1 unsigned int ladd;
258 1 union SFADD offset;
259 1 basex=0x8000+SCREEN_WIDTH*orgy+orgx;
260 1 //draw picture from flash. 4kbyte per picture
261 1 offset.l=num;
262 1 offset.l <<=12;//乘以4K,因为每个大数字图片占用4K字节的空间
263 1 offset.l +=FLASH_ADD_STORY_START;
264 1 ladd=offset.i[1];
265 1 ladd &=FLASH_ADD_MASK;
266 1 ladd |=FLASH_SPACE_START;//分离出flash的低位地址
267 1 offset.l <<=2;
268 1 FLASHADD=offset.c[1];//分离出flash的高位地址
269 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;//确定图片在屏幕上的位置
270 1 for(row=0;row<STOREY_HEIGHT;row++){
271 2 memcpy((unsigned char *)basex,(unsigned char *)ladd,STOREY_WIDTH);
272 2 ladd +=STOREY_WIDTH;
273 2 basex +=SCREEN_WIDTH;
274 2 }
275 1 }
276 /**画向下的箭头图片为96x97点阵**/
277 void draw_downarrow(unsigned char orgx,unsigned int orgy){
278 1 unsigned char row;
279 1 unsigned int temp;
280 1 unsigned int basex;
281 1 unsigned char *buf;
282 1 buf=downarrow;//12x97
283 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
284 1 /**箭头图片是存储在单片机的程序空间,可以直接寻址**/
285 1 for(row=0;row<ARROW_HEIGHT;row++){
286 2 temp=row*ARROW_WIDTH;
287 2 memcpy((unsigned char *)basex,(unsigned char *)buf+temp,ARROW_WIDTH);
288 2 basex +=SCREEN_WIDTH;
289 2 }
290 1 }
291 /**画向上的箭头图片为96x97点阵,是把向下的箭头图片上下颠倒一下就可以了**/
292 void draw_uparrow(unsigned char orgx,unsigned int orgy){
293 1 unsigned char row;
294 1 unsigned int temp;
295 1 unsigned int basex;
296 1 unsigned char *buf;
297 1 unsigned int top_num;
298 1 top_num=ARROW_WIDTH*(ARROW_HEIGHT-1);
299 1 buf=downarrow;//12x97
300 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
301 1 for(row=0;row<ARROW_HEIGHT;row++){//ARROW_HEIGHT=97
302 2 temp=top_num-row*ARROW_WIDTH;
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 6
303 2 memcpy((unsigned char *)basex,(unsigned char *)buf+temp,ARROW_WIDTH);
304 2 basex +=SCREEN_WIDTH;
305 2 }
306 1 }
307 /*画24x48的ASSCII字符,因为此字符不在汉字字库中, 存储的形式只有位码*/
308 void draw_asc24x48(unsigned char orgx,unsigned int orgy,unsigned char wh){
309 1 union SFADD offset;
310 1 unsigned int ladd;
311 1 unsigned int basex;
312 1 unsigned char i;
313 1 offset.l=wh;
314 1 offset.l *=144;//每个字符是144个字节
315 1 offset.l +=FLASH_ADD_ASC48X48_START;
316 1 ladd=offset.i[1];
317 1 ladd &=0x3fff;
318 1 ladd |=FLASH_SPACE_START;
319 1 offset.l <<=2;
320 1 FLASHADD=offset.c[1];
321 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
322 1 for(i=0;i<48;i++){
323 2 XBYTE[basex ]=XBYTE[ladd];ladd++;
324 2 XBYTE[basex+1]=XBYTE[ladd];ladd++;
325 2 XBYTE[basex+2]=XBYTE[ladd];ladd++;
326 2 basex +=SCREEN_WIDTH;
327 2 }
328 1 }
329 void draw_asc16x24(unsigned char orgx,unsigned int orgy,unsigned char wh){
330 1 union SFADD offset;
331 1 unsigned int ladd;
332 1 unsigned int basex;
333 1 unsigned char i;
334 1 offset.l=wh+32;//英文的区位码减32为ASCII的数值。
335 1 offset.l *=48;//perword is 48 bytes.
336 1 offset.l +=FLASH_ADD_ASC16X24_START;
337 1 ladd=offset.i[1];
338 1 ladd &=FLASH_ADD_MASK;
339 1 ladd |=FLASH_SPACE_START;
340 1 offset.l <<=2;
341 1 FLASHADD=offset.c[1];
342 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
343 1 for(i=0;i<24;i++){
344 2 XBYTE[basex ]=XBYTE[ladd];ladd++;
345 2 XBYTE[basex+1]=XBYTE[ladd];ladd++;
346 2 basex +=SCREEN_WIDTH;
347 2 }
348 1 }
349 /**显示从串口传输过来的信息**/
350 void show_elvinfo(struct NOTICE *info){
351 1 unsigned char orgtemp,ad_len,cnt,temp,hzqh,hzwh;
352 1 unsigned int cur_y;
353 1 ad_len=info->len;/*表示显示汉字的长度*/
354 1 ad_len >>=1;//由于一个汉字要一个区码和一个位码表示,所以整个要显示的汉字数为文字长度除2
355 1 orgtemp=POS_NOTICE_ORGX;
356 1 cur_y=POS_NOTICE_SINGEL_LINE_ORGY;
357 1 for(cnt=0;cnt<ad_len;cnt++){// draw_hz24x24
358 2 temp=cnt<<1;//第一个区码,第二个是位码
359 2 hzqh=info->buf[temp];
360 2 if(hzqh<HZK24X24_QH_START){//IT IS OUT OF HZK24X24
361 3 if(hzqh==3){//是英文和数值区域。
362 4 if((orgtemp+QW_ASSCII_SPACE)<SCREEN_WIDTH){//是空格
363 5 draw_asc24x48(orgtemp,cur_y,info->buf[temp+1]);
364 5 orgtemp +=QW_ASSCII_SPACE;
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 7
365 5 }
366 4 }
367 3 else if(hzqh==10){//是控制字符
368 4 hzwh=info->buf[temp+1];
369 4 if((hzwh&0xf0)==0x20){//是空格空格
370 5 hzwh &=0x0f;
371 5 hzwh +=1;
372 5 orgtemp +=QW_ASSCII_SPACE*hzwh;
373 5 }
374 4 else if(hzwh==0x0a){//是回车
375 5 cur_y +=POS_NOTICE_LINE_HIGH;//换到下一行
376 5 orgtemp=0;
377 5 }
378 4 }
379 3 }
380 2 else{//是汉字
381 3 if((orgtemp+QW_HZ_SPACE)<SCREEN_WIDTH){
382 4 draw_double_hz24x24(orgtemp,cur_y,hzqh,info->buf[temp+1]);//写汉字
383 4 orgtemp +=QW_HZ_SPACE;//显示位置到下一个汉字
384 4 }
385 3 }
386 2 }
387 1 }
388 /*在orgx,orgy处清除宽度为8高度为depth的区域*/
389 void clr_wordw8(unsigned char orgx,unsigned int orgy,unsigned char depth){
390 1 unsigned char row;
391 1 unsigned int basex;
392 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
393 1 for(row=0;row<depth;row++){
394 2 XBYTE[basex]=0;;
395 2 basex +=SCREEN_WIDTH;
396 2 }
397 1 }
398 /*在orgx,orgy处清除宽度为16高度为depth的区域*/
399 void clr_wordw16(unsigned char orgx,unsigned int orgy,unsigned char depth){
400 1 unsigned char row;
401 1 unsigned int basex;
402 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
403 1 for(row=0;row<depth;row++){
404 2 memcpy((unsigned char *)basex,(unsigned char *)zero_buf,2);
405 2 basex +=SCREEN_WIDTH;
406 2 }
407 1 }
408 /*在orgx,orgy处清除宽度为24高度为depth的区域*/
409 void clr_wordw24(unsigned char orgx,unsigned int orgy,unsigned char depth){
410 1 unsigned char row;
411 1 unsigned int basex;
412 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
413 1 for(row=0;row<depth;row++){
414 2 memcpy((unsigned char *)basex,(unsigned char *)zero_buf,3);
415 2 basex +=SCREEN_WIDTH;
416 2 }
417 1 }
418 /*在orgx,orgy处清除宽度为32高度为depth的区域*/
419 void clr_wordw32(unsigned char orgx,unsigned int orgy,unsigned char depth){
420 1 unsigned char row;
421 1 unsigned int basex;
422 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
423 1 for(row=0;row<depth;row++){
424 2 memcpy((unsigned char *)basex,(unsigned char *)zero_buf,4);
425 2 basex +=SCREEN_WIDTH;
426 2 }
C51 COMPILER V7.06 DISPLAY 10/13/2006 09:21:09 PAGE 8
427 1 }
428 /*在orgx,orgy处清除宽度为width高度为depth的区域,是通用的清除函数*/
429 void clr_area(unsigned char org_x,unsigned int org_y,unsigned char width,unsigned char height){
430 1 unsigned char row;
431 1 unsigned char column;
432 1 unsigned int tempa,tempb;
433 1 for(row=0;row<height;row++){
434 2 tempa=VRAM_BASE+SCREEN_WIDTH*(org_y+row)+org_x;
435 2 tempb=width*row;
436 2 for(column=0;column<width;column++){
437 3 XBYTE[tempa+column]=0x00;
438 3 }
439 2 }
440 1 }
441 /*在orgx,orgy处清除箭头*/
442 void clr_arrow(unsigned char orgx,unsigned int orgy){
443 1 unsigned char row;
444 1 unsigned int basex;
445 1 basex=VRAM_BASE+SCREEN_WIDTH*orgy+orgx;
446 1 for(row=ARROW_HEIGHT;row>0;row--){
447 2 memcpy((unsigned char *)basex,(unsigned char *)zero_buf,ARROW_WIDTH);
448 2 basex +=SCREEN_WIDTH;
449 2 }
450 1 }
451 /*清除显示信息的区域*/
452 void clr_notice(void){
453 1 unsigned int j,basex;
454 1 basex=VRAM_BASE+SCREEN_WIDTH*POS_NOTICE_TOP+POS_NOTICE_ORGX;
455 1 for(j=POS_NOTICE_TOP;j<SCREEN_HIGHT;j++){
456 2 memcpy((unsigned char *)basex,(unsigned char *)zero_buf,SCREEN_WIDTH-POS_NOTICE_ORGX);
457 2 basex +=SCREEN_WIDTH;
458 2 }
459 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4777 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 100 168
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -