📄 12232.src
字号:
MOV R7,#0AFH
LCALL _send_mi
; send_si(disp_on);
; SOURCE LINE # 414
MOV R7,#0AFH
LJMP _send_si
; END OF lcd_init
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void lcd_clr(void)
; //函数说明:清屏
; ////////////////////////////////////////////////////////////////////////////////
; void lcd_clr(void)
RSEG ?PR?lcd_clr?12232
lcd_clr:
USING 0
; SOURCE LINE # 421
; {
; SOURCE LINE # 422
; uchar i, page;
; for (page=0;page<4;page++)
; SOURCE LINE # 424
CLR A
MOV page?747,A
?C0015:
; {
; SOURCE LINE # 425
; send_mi(page_addr_set+page);
; SOURCE LINE # 426
MOV A,page?747
ADD A,#0B8H
MOV R7,A
LCALL _send_mi
; send_si(page_addr_set+page);
; SOURCE LINE # 427
MOV A,page?747
ADD A,#0B8H
MOV R7,A
LCALL _send_si
;
; for (i=0;i<122;i++) //若为62则中间可能有条竖线
; SOURCE LINE # 429
CLR A
MOV i?746,A
?C0018:
; { send_mi(i); //主窗口设置为0列
; SOURCE LINE # 430
MOV R7,i?746
LCALL _send_mi
; send_si(i); //从窗口设置为0列
; SOURCE LINE # 431
MOV R7,i?746
LCALL _send_si
; send_md(0);
; SOURCE LINE # 432
CLR A
MOV R7,A
LCALL _send_md
; send_sd(0);
; SOURCE LINE # 433
CLR A
MOV R7,A
LCALL _send_sd
; }
; SOURCE LINE # 434
INC i?746
MOV A,i?746
CLR C
SUBB A,#07AH
JC ?C0018
; }
; SOURCE LINE # 435
?C0017:
INC page?747
MOV A,page?747
CLR C
SUBB A,#04H
JC ?C0015
; }
; SOURCE LINE # 436
?C0021:
RET
; END OF lcd_clr
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void set_page(uchar page)
; //函数说明:同时设置主(右)从(左)显示页为0-3页
; ////////////////////////////////////////////////////////////////////////////////
; void set_page(uchar page)
RSEG ?PR?_set_page?12232
_set_page:
USING 0
MOV page?848,R7
; SOURCE LINE # 442
; {
; SOURCE LINE # 443
; send_mi(page_addr_set|page);
; SOURCE LINE # 444
MOV A,page?848
ORL A,#0B8H
MOV R7,A
LCALL _send_mi
; send_si(page_addr_set|page);
; SOURCE LINE # 445
MOV A,page?848
ORL A,#0B8H
MOV R7,A
LJMP _send_si
; END OF _set_page
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void SetAddress(uchar address)
; //函数说明:同时设置主(右)从(左)列地址为0-61列
; ////////////////////////////////////////////////////////////////////////////////
; void set_address(uchar address)
RSEG ?PR?_set_address?12232
_set_address:
USING 0
MOV address?949,R7
; SOURCE LINE # 452
; {
; SOURCE LINE # 453
; send_mi(address&0x7F); //&0x7F,考虑到防止越限
; SOURCE LINE # 454
MOV A,address?949
ANL A,#07FH
MOV R7,A
LCALL _send_mi
; send_si(address&0x7F);
; SOURCE LINE # 455
MOV A,address?949
ANL A,#07FH
MOV R7,A
LJMP _send_si
; END OF _set_address
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void putchar_l(uchar c)
; //函数说明:在右页(从窗口)当前地址画一个字节(8点)
; ////////////////////////////////////////////////////////////////////////////////
; void putchar_l(uchar c)
RSEG ?PR?_putchar_l?12232
_putchar_l:
USING 0
;---- Variable 'c?1050' assigned to Register 'R7' ----
; SOURCE LINE # 462
; {
; SOURCE LINE # 463
; send_md(c);
; SOURCE LINE # 464
LJMP _send_md
; END OF _putchar_l
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void putchar_r(uchar c)
; //函数说明:在左页(主窗口)当前地址画一个字节(8点)
; ////////////////////////////////////////////////////////////////////////////////
; void putchar_r(uchar c)
RSEG ?PR?_putchar_r?12232
_putchar_r:
USING 0
;---- Variable 'c?1151' assigned to Register 'R7' ----
; SOURCE LINE # 471
; {
; SOURCE LINE # 472
; send_sd(c);
; SOURCE LINE # 473
LJMP _send_sd
; END OF _putchar_r
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //调用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
; //函数说明:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
; // bmp是图形指针
; // 使用zimo21软件,采用纵向取模下高位得到bmp数据。
; // col 图型的起始位置0~121
; // layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
; // width 图形宽度8,16可选
; // bmp 图形数据指针
; ////////////////////////////////////////////////////////////////////////////////
; void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
RSEG ?PR?_draw_bmp?12232
_draw_bmp:
USING 0
MOV col?1252,R7
MOV width?1254,R3
;---- Variable 'layer?1253' assigned to Register 'R5' ----
; SOURCE LINE # 486
; {
; SOURCE LINE # 487
; uchar x;
; uchar address; //address表示显存的物理地址
; uchar p=0;
; SOURCE LINE # 490
CLR A
MOV p?1258,A
; uchar page=0;
; SOURCE LINE # 491
MOV page?1259,A
; uchar window=0; //page表示上下两页,window表示左右窗口(0左,1右)
; SOURCE LINE # 492
MOV window?1260,A
; if (layer) page=2; //左-主窗口,右-从窗口
; SOURCE LINE # 493
MOV A,R5
JZ ?C0026
MOV page?1259,#02H
?C0026:
;
; for (x=col; x<col+width; x++)
; SOURCE LINE # 495
MOV x?1256,col?1252
?C0027:
MOV A,col?1252
ADD A,width?1254
MOV R7,A
CLR A
RLC A
MOV R6,A
CLR C
MOV A,x?1256
SUBB A,R7
MOV A,R6
XRL A,#080H
MOV R0,A
MOV A,#080H
SUBB A,R0
JC $ + 5H
LJMP ?C0031
; {
; SOURCE LINE # 496
; if (x>121)return; //防止显示乱码
; SOURCE LINE # 497
MOV A,x?1256
SUBB A,#079H
JC $ + 5H
LJMP ?C0031
?C0030:
; if (x>60) //左右窗口定位
; SOURCE LINE # 498
MOV A,x?1256
SETB C
SUBB A,#03CH
JC ?C0032
; {
; SOURCE LINE # 499
; window=1; //右-从窗口
; SOURCE LINE # 500
MOV window?1260,#01H
; address=x%61;
; SOURCE LINE # 501
MOV A,x?1256
MOV B,#03DH
DIV AB
MOV address?1257,B
; }
; SOURCE LINE # 502
SJMP ?C0033
?C0032:
; else
; address=x; //主窗口输出
; SOURCE LINE # 504
MOV address?1257,x?1256
?C0033:
;
; set_page(page); //上层数据输出
; SOURCE LINE # 506
MOV R7,page?1259
LCALL _set_page
; set_address(address);
; SOURCE LINE # 507
MOV R7,address?1257
LCALL _set_address
;
; if (window)
; SOURCE LINE # 509
MOV A,window?1260
JZ ?C0034
; putchar_r(bmp[p]);
; SOURCE LINE # 510
MOV R3,bmp?1255
MOV R2,bmp?1255+01H
MOV R1,bmp?1255+02H
MOV DPL,p?1258
MOV DPH,#00H
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _putchar_r
SJMP ?C0035
?C0034:
; else
; putchar_l(bmp[p]);
; SOURCE LINE # 512
MOV R3,bmp?1255
MOV R2,bmp?1255+01H
MOV R1,bmp?1255+02H
MOV DPL,p?1258
MOV DPH,#00H
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _putchar_l
?C0035:
;
; set_page(page+1); //下层数据输出
; SOURCE LINE # 514
MOV A,page?1259
INC A
MOV R7,A
LCALL _set_page
; set_address(address); //列保持不变
; SOURCE LINE # 515
MOV R7,address?1257
LCALL _set_address
;
; if (window)
; SOURCE LINE # 517
MOV A,window?1260
JZ ?C0036
; putchar_r(bmp[p+width]);
; SOURCE LINE # 518
MOV A,width?1254
ADD A,p?1258
MOV DPL,A
CLR A
RLC A
MOV DPH,A
MOV R3,bmp?1255
MOV R2,bmp?1255+01H
MOV R1,bmp?1255+02H
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _putchar_r
SJMP ?C0037
?C0036:
; else
; putchar_l(bmp[p+width]);
; SOURCE LINE # 520
MOV A,width?1254
ADD A,p?1258
MOV DPL,A
CLR A
RLC A
MOV DPH,A
MOV R3,bmp?1255
MOV R2,bmp?1255+01H
MOV R1,bmp?1255+02H
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _putchar_l
?C0037:
;
; p++;
; SOURCE LINE # 522
INC p?1258
; }
; SOURCE LINE # 523
INC x?1256
LJMP ?C0027
; }
; SOURCE LINE # 524
?C0031:
RET
; END OF _draw_bmp
;
; ////////////////////////////////////////////////////////////////////////////////
; //函数:void disp_one_ascii(uchar col,uchar layer,uchar ascii_code)
; //说明:显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
; ////////////////////////////////////////////////////////////////////////////////
; void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
RSEG ?PR?_disp_one_ascii?12232
L?0068:
USING 0
MOV R3,c1?1574
MOV R5,ulayer?1581
MOV R7,ucol?1580
_disp_one_ascii:
USING 0
;---- Variable 'col?1361' assigned to Register 'R7' ----
;---- Variable 'layer?1362' assigned to Register 'R5' ----
;---- Variable 'ascii_code?1363' assigned to Register 'R3' ----
; SOURCE LINE # 530
; {
; SOURCE LINE # 531
; uchar i;
; for(i=0;i<16;i++) //ASCII码显示占用16个字节
; SOURCE LINE # 533
;---- Variable 'i?1365' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0038:
; {
; SOURCE LINE # 534
; if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
; SOURCE LINE # 535
MOV A,mode?1364
JZ ?C0041
MOV B,#010H
MOV A,R3
MUL AB
ADD A,R6
MOV DPL,A
CLR A
ADDC A,B
MOV DPH,A
MOV A,DPL
ADD A,#LOW (ascii+0FE00H)
MOV DPL,A
MOV A,DPH
ADDC A,#HIGH (ascii+0FE00H)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
CPL A
MOV R4,A
MOV A,#LOW (dot_buffer)
ADD A,R6
MOV R0,A
MOV @R0,AR4
SJMP ?C0040
?C0041:
; else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
; SOURCE LINE # 536
MOV B,#010H
MOV A,R3
MUL AB
ADD A,R6
MOV DPL,A
CLR A
ADDC A,B
MOV DPH,A
MOV A,DPL
ADD A,#LOW (ascii+0FE00H)
MOV DPL,A
MOV A,DPH
ADDC A,#HIGH (ascii+0FE00H)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R4,A
MOV A,#LOW (dot_buffer)
ADD A,R6
MOV R0,A
MOV @R0,AR4
; }
; SOURCE LINE # 537
?C0040:
INC R6
CJNE R6,#010H,?C0038
?C0039:
; draw_bmp(col,layer,8,dot_buffer);
; SOURCE LINE # 538
MOV ?_draw_bmp?BYTE+03H,#00H
MOV ?_draw_bmp?BYTE+04H,#HIGH (dot_buffer)
MOV ?_draw_bmp?BYTE+05H,#LOW (dot_buffer)
MOV R3,#08H
LJMP _draw_bmp
; END OF _disp_one_ascii
; }
;
; ////////////////////////////////////////////////////////////////////////////////
; //函数:void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
; //说明:显示小于4个的十进制数字//修改缓冲区的大小可以扩展显示
; ////////////////////////////////////////////////////////////////////////////////
; void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
RSEG ?PR?_disp_ram_data?12232
_disp_ram_data:
USING 0
MOV col?1466,R7
MOV layer?1467,R5
MOV n?1468,R3
; SOURCE LINE # 545
; {
; SOURCE LINE # 546
?C0044:
; while(n--)
; SOURCE LINE # 547
MOV R7,n?1468
DEC n?1468
MOV A,R7
JZ ?C0048
; {
; SOURCE LINE # 548
; if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
; SOURCE LINE # 549
MOV A,mode?1469
JZ ?C0046
MOV A,#LOW (disp_buffer)
ADD A,n?1468
MOV R0,A
MOV A,@R0
ADD A,#030H
MOV R3,A
MOV ?_disp_one_ascii?BYTE+03H,#01H
MOV R5,layer?1467
MOV R7,col?1466
LCALL _disp_one_ascii
SJMP ?C0047
?C0046:
; else disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
; SOURCE LINE # 550
MOV A,#LOW (disp_buffer)
ADD A,n?1468
MOV R0,A
MOV A,@R0
ADD A,#030H
MOV R3,A
CLR A
MOV ?_disp_one_ascii?BYTE+03H,A
MOV R5,layer?1467
MOV R7,col?1466
LCALL _disp_one_ascii
?C0047:
; col += 8;
; SOURCE LINE # 551
MOV A,#08H
ADD A,col?1466
MOV col?1466,A
; }
; SOURCE LINE # 552
SJMP ?C0044
; }
; SOURCE LINE # 553
?C0048:
RET
; END OF _disp_ram_data
;
; ////////////////////////////////////////////////////////////////////////////////
; //函数:void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
; //说明:ASCII(8*16) 和 汉字(16*16)显示函数
; ////////////////////////////////////////////////////////////////////////////////
; void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
RSEG ?PR?_dprintf?12232
_dprintf:
USING 0
MOV ptr?1572,R3
MOV ptr?1572+01H,R2
MOV ptr?1572+02H,R1
;---- Variable 'col?1570' assigned to Register 'R7' ----
;---- Variable 'layer?1571' assigned to Register 'R5' ----
; SOURCE LINE # 559
; {
; SOURCE LINE # 560
; uchar c1,c2;
; uchar i,j,k;
; uchar ulen;
; //uchar ucol,ulayer,umode;
; uchar ucol,ulayer;
; ulen = 0;
; SOURCE LINE # 566
CLR A
MOV ulen?1579,A
; ucol = col;
; SOURCE LINE # 567
MOV ucol?1580,R7
; ulayer = layer;
; SOURCE LINE # 568
MOV ulayer?1581,R5
?C0049:
;
; while (ptr[ulen]!= 0)ulen++; //探测字串长度
; SOURCE LINE # 570
MOV R3,ptr?1572
MOV R2,ptr?1572+01H
MOV R1,ptr?1572+02H
MOV DPL,ulen?1579
MOV DPH,#00H
LCALL ?C?CLDOPTR
JZ ?C0050
INC ulen?1579
SJMP ?C0049
?C0050:
; i=0;
; SOURCE LINE # 571
CLR A
MOV i?1576,A
?C0051:
; while(i<ulen)
; SOURCE LINE # 572
MOV A,i?1576
CLR C
SUBB A,ulen?1579
JC $ + 5H
LJMP ?C0066
; {
; SOURCE LINE # 573
; c1 = ptr[i];
; SOURCE LINE # 574
MOV R3,ptr?1572
MOV R2,ptr?1572+01H
MOV R1,ptr?1572+02H
MOV DPL,i?1576
MOV DPH,#00H
LCALL ?C?CLDOPTR
MOV c1?1574,A
; c2 = ptr[i+1];
; SOURCE LINE # 575
MOV DPL,i?1576
MOV DPH,#00H
INC DPTR
LCALL ?C?CLDOPTR
MOV c2?1575,A
; //ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码
; if(c1 <=128) //ASCII
; SOURCE LINE # 577
MOV A,c1?1574
SETB C
SUBB A,#080H
JNC ?C0053
; {
; SOURCE LINE # 578
; if(mode)disp_one_ascii(ucol,ulayer,c1,1);
; SOURCE LINE # 579
MOV A,mode?1573
JZ ?C0054
MOV ?_disp_one_ascii?BYTE+03H,#01H
LCALL L?0068
SJMP ?C0055
?C0054:
; else disp_one_ascii(ucol,ulayer,c1,0);
; SOURCE LINE # 580
CLR A
MOV ?_disp_one_ascii?BYTE+03H,A
LCALL L?0068
?C0055:
; ucol+=8;
; SOURCE LINE # 581
MOV A,#08H
ADD A,ucol?1580
MOV ucol?1580,A
; i++; //ASCII码的处理
; SOURCE LINE # 582
INC i?1576
; }
; SOURCE LINE # 583
SJMP ?C0051
?C0053:
; else //中文
; {
; SOURCE LINE # 585
; for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
; SOURCE LINE # 586
;---- Variable 'j?1577' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0057:
; { //查找定位当前汉字的点阵区
; SOURCE LINE # 587
; if((c1 == GB_16[j].Index[0]) && (c2 == GB_16[j].Index[1]))
; SOURCE LINE # 588
MOV B,#022H
MOV A,R7
MUL AB
ADD A,#LOW (GB_16)
MOV DPL,A
MOV A,B
ADDC A,#HIGH (GB_16)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
CJNE A,c1?1574,?C0059
MOV B,#022H
MOV A,R7
MUL AB
ADD A,#LOW (GB_16+01H)
MOV DPL,A
MOV A,B
ADDC A,#HIGH (GB_16+01H)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
XRL A,c2?1575
JZ ?C0058
; break;
; SOURCE LINE # 589
; }
; SOURCE LINE # 590
?C0059:
INC R7
CJNE R7,#012H,?C0057
?C0058:
; for(k=0;k<32;k++)
; SOURCE LINE # 591
;---- Variable 'k?1578' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0061:
; { if(mode)dot_buffer[k]=~GB_16[j].Msk[k];
; SOURCE LINE # 592
MOV A,mode?1573
JZ ?C0064
MOV B,#022H
MOV A,R7
MUL AB
ADD A,#LOW (GB_16+02H)
MOV DPL,A
MOV A,B
ADDC A,#HIGH (GB_16+02H)
MOV DPH,A
MOV A,DPL
ADD A,R6
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
CPL A
MOV R5,A
MOV A,#LOW (dot_buffer)
ADD A,R6
MOV R0,A
MOV @R0,AR5
SJMP ?C0063
?C0064:
; else dot_buffer[k]= GB_16[j].Msk[k];
; SOURCE LINE # 593
MOV B,#022H
MOV A,R7
MUL AB
ADD A,#LOW (GB_16+02H)
MOV DPL,A
MOV A,B
ADDC A,#HIGH (GB_16+02H)
MOV DPH,A
MOV A,DPL
ADD A,R6
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R5,A
MOV A,#LOW (dot_buffer)
ADD A,R6
MOV R0,A
MOV @R0,AR5
; }
; SOURCE LINE # 594
?C0063:
INC R6
CJNE R6,#020H,?C0061
?C0062:
; draw_bmp(ucol,ulayer,16,dot_buffer);
; SOURCE LINE # 595
MOV ?_draw_bmp?BYTE+03H,#00H
MOV ?_draw_bmp?BYTE+04H,#HIGH (dot_buffer)
MOV ?_draw_bmp?BYTE+05H,#LOW (dot_buffer)
MOV R3,#010H
MOV R5,ulayer?1581
MOV R7,ucol?1580
LCALL _draw_bmp
; ucol+=16;
; SOURCE LINE # 596
MOV A,#010H
ADD A,ucol?1580
MOV ucol?1580,A
; i+=2; //中文的处理
; SOURCE LINE # 597
INC i?1576
INC i?1576
; }
; SOURCE LINE # 598
; }
; SOURCE LINE # 599
LJMP ?C0051
; }
; SOURCE LINE # 600
?C0066:
RET
; END OF _dprintf
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -