lcd.lis
来自「为日本瑞萨苏州分公司做的一个温控系统」· LIS 代码 · 共 1,488 行 · 第 1/4 页
LIS
1,488 行
044A CD0451 jsr _DelayTimes
044D A702 ais #2
044F 95 tsx
0450 .dbline -2
0450 L57:
0450 .dbline 0 ; func end
0450 81 rts
0451 .dbsym l data 2 c
0451 .dbend
0451 .dbfunc e DelayTimes _DelayTimes fV
0451 ; i -> 0,X
0451 ; tn -> 4,X
0451 _DelayTimes::
0451 .dbline -1
0451 A7FE ais #-2
0453 95 tsx
0454 .dbline 229
0454 ; }
0454 ;
0454 ; /*DelayTimes:延时指定时间--------------------------------------------------*
0454 ; *功 能:延时指定的时间 *
0454 ; *入 口:tn为延时时间数(0到65535) *
0454 ; *出 口:无 *
0454 ; *-------------------------------------------------------------------------*/
0454 ; void DelayTimes(INT16U tn)
0454 ; {
0454 .dbline 231
0454 6F01 clr 1,X
0456 7F clr ,X
0457 200A bra L62
0459 L59:
0459 .dbline 231
0459 L60:
0459 .dbline 231
0459 E601 lda 1,X
045B AB01 add #1
045D E701 sta 1,X
045F F6 lda ,X
0460 A900 adc #0
0462 F7 sta ,X
0463 L62:
0463 .dbline 231
0463 ; INT16U i; //循环变量
0463 ; for(i=0;i<tn;i++);
0463 E605 lda 5,X
0465 B700 sta *__r1
0467 E604 lda 4,X
0469 B700 sta *__r0
046B E601 lda 1,X
046D B700 sta *__r3
046F F6 lda ,X
0470 B700 sta *__r2
0472 5500 ldhx *__r2
0474 7500 cphx *__r0
0476 95 tsx
0477 25E0 blo L59
0479 .dbline -2
0479 L58:
0479 A702 ais #2
047B .dbline 0 ; func end
047B 81 rts
047C .dbsym l i 0 i
047C .dbsym l tn 4 i
047C .dbend
047C .dbfunc e LcdShBigNum _LcdShBigNum fV
047C ; GBit -> 0,X
047C ; BBit -> 1,X
047C ; SBit -> 2,X
047C ; Yi -> 3,X
047C ; Num -> 10,X
047C ; BigNumCodeAdrr -> 8,X
047C ; X -> 7,X
047C ; Y -> 6,X
047C _LcdShBigNum::
047C .dbline -1
047C A7FC ais #-4
047E 95 tsx
047F .dbline 244
047F ; }
047F ;
047F ; //其他特殊功能函数
047F ; /*LcdShBigNum:在Lcd上显示自定义32*16点阵的数字(0--999)---------------------*
047F ; *功 能:在Lcd上显示自定义32*16点阵的数字(0--999) *
047F ; *参 数:X表示Lcd上显示字符的横坐标(0--5),Y为显示字符的纵坐标(0--1) *
047F ; * BigNumCodeAdrr为32*16点阵数字编码首地址,Num为当前的数据值(0--999) *
047F ; *返 回:无 *
047F ; *内部调用:LcdShGr16P:在Lcd指定位置上设置线型16个点的显示 *
047F ; * Wtite_Command:执行参数中的给定命令 *
047F ; *-------------------------------------------------------------------------*/
047F ; void LcdShBigNum(INT8U Y,INT8U X,INT16U * BigNumCodeAdrr,INT16U Num)
047F ; {
047F .dbline 247
047F E606 lda 6,X
0481 A101 cmp #1
0483 2216 bhi L67
0485 E607 lda 7,X
0487 A105 cmp #5
0489 2210 bhi L67
048B E60B lda 11,X
048D B700 sta *__r1
048F E60A lda 10,X
0491 B700 sta *__r0
0493 5500 ldhx *__r0
0495 6503E7 cphx #999
0498 95 tsx
0499 2303 bls L64
049B L67:
049B .dbline 247
049B ; INT8U GBit,SBit,BBit; //存放个位,十位,百位数据
049B ; INT8U Yi; //Y坐标方向的循环控制变量
049B ; if(Y>1||X>5||Num>999) goto LcdShBigNum_End; //参数值范围检测
049B CC0619 jmp L68
049E L64:
049E .dbline 248
049E ; GBit=Num%10; BBit=Num/100; SBit=(Num%100)/10;
049E E60B lda 11,X
04A0 B700 sta *__rlo
04A2 E60A lda 10,X
04A4 B700 sta *__rhi
04A6 A60A lda #10
04A8 87 psha
04A9 4F clra
04AA 87 psha
04AB CD0000 jsr __divmod16u
04AE 86 pula
04AF 86 pula
04B0 F7 sta ,X
04B1 .dbline 248
04B1 E60B lda 11,X
04B3 B700 sta *__rlo
04B5 E60A lda 10,X
04B7 B700 sta *__rhi
04B9 A664 lda #100
04BB 87 psha
04BC 4F clra
04BD 87 psha
04BE CD0000 jsr __divmod16u
04C1 A702 ais #2
04C3 4E0000 mov *__rlo,*__r1
04C6 B600 lda *__r1
04C8 E701 sta 1,X
04CA .dbline 248
04CA E60B lda 11,X
04CC B700 sta *__rlo
04CE E60A lda 10,X
04D0 B700 sta *__rhi
04D2 A664 lda #100
04D4 87 psha
04D5 4F clra
04D6 87 psha
04D7 CD0000 jsr __divmod16u
04DA 86 pula
04DB B700 sta *__r0
04DD 86 pula
04DE B700 sta *__rlo
04E0 4E0000 mov *__r0,*__rhi
04E3 A60A lda #10
04E5 87 psha
04E6 4F clra
04E7 87 psha
04E8 CD0000 jsr __divmod16u
04EB A702 ais #2
04ED 4E0000 mov *__rlo,*__r1
04F0 B600 lda *__r1
04F2 E702 sta 2,X
04F4 .dbline 249
04F4 ; Wtite_Command(0b00110110); //扩展指令,绘图开
04F4 A636 lda #54
04F6 87 psha
04F7 CD041B jsr _Wtite_Command
04FA A701 ais #1
04FC 95 tsx
04FD .dbline 250
04FD ; if(Y==1) X+=8; //参数调整
04FD E606 lda 6,X
04FF A101 cmp #1
0501 2606 bne L69
0503 .dbline 250
0503 E607 lda 7,X
0505 AB08 add #8
0507 E707 sta 7,X
0509 L69:
0509 .dbline 251
0509 ; for(Yi=0;Yi<32;Yi++)
0509 6F03 clr 3,X
050B CC0607 jmp L74
050E L71:
050E .dbline 252
050E ; {
050E .dbline 253
050E ; if(BBit!=0) LcdShGr16P(Yi,X,*(BigNumCodeAdrr+BBit*32+Yi));
050E E601 lda 1,X
0510 274E beq L75
0512 .dbline 253
0512 3F00 clr *__r0
0514 B700 sta *__r1
0516 A605 lda #5
0518 X9:
0518 3800 lsl *__r1
051A 3900 rol *__r0
051C 4BFA dbnza X9
051E 3800 lsl *__r1
0520 3900 rol *__r0
0522 B600 lda *__r1
0524 EB09 add 9,X
0526 B700 sta *__r1
0528 B600 lda *__r0
052A E908 adc 8,X
052C B700 sta *__r0
052E 3F00 clr *__r2
0530 E603 lda 3,X
0532 B700 sta *__r3
0534 3800 lsl *__r3
0536 3900 rol *__r2
0538 B600 lda *__r3
053A BB00 add *__r1
053C B700 sta *__r1
053E B600 lda *__r2
0540 B900 adc *__r0
0542 B700 sta *__r0
0544 5500 ldhx *__r0
0546 E601 lda 1,x
0548 B700 sta *__r1
054A F6 lda ,x
054B 95 tsx
054C B700 sta *__r0
054E B600 lda *__r1
0550 87 psha
0551 B600 lda *__r0
0553 87 psha
0554 E607 lda 7,X
0556 87 psha
0557 E603 lda 3,X
0559 87 psha
055A CD03E5 jsr _LcdShGr16P
055D A704 ais #4
055F 95 tsx
0560 L75:
0560 .dbline 254
0560 ; if(SBit!=0) LcdShGr16P(Yi,X+1,*(BigNumCodeAdrr+SBit*32+Yi));
0560 E602 lda 2,X
0562 2750 beq L77
0564 .dbline 254
0564 3F00 clr *__r0
0566 B700 sta *__r1
0568 A605 lda #5
056A X10:
056A 3800 lsl *__r1
056C 3900 rol *__r0
056E 4BFA dbnza X10
0570 3800 lsl *__r1
0572 3900 rol *__r0
0574 B600 lda *__r1
0576 EB09 add 9,X
0578 B700 sta *__r1
057A B600 lda *__r0
057C E908 adc 8,X
057E B700 sta *__r0
0580 3F00 clr *__r2
0582 E603 lda 3,X
0584 B700 sta *__r3
0586 3800 lsl *__r3
0588 3900 rol *__r2
058A B600 lda *__r3
058C BB00 add *__r1
058E B700 sta *__r1
0590 B600 lda *__r2
0592 B900 adc *__r0
0594 B700 sta *__r0
0596 5500 ldhx *__r0
0598 E601 lda 1,x
059A B700 sta *__r1
059C F6 lda ,x
059D 95 tsx
059E B700 sta *__r0
05A0 B600 lda *__r1
05A2 87 psha
05A3 B600 lda *__r0
05A5 87 psha
05A6 E607 lda 7,X
05A8 AB01 add #1
05AA 87 psha
05AB E603 lda 3,X
05AD 87 psha
05AE CD03E5 jsr _LcdShGr16P
05B1 A704 ais #4
05B3 95 tsx
05B4 L77:
05B4 .dbline 255
05B4 3F00 clr *__r0
05B6 F6 lda ,X
05B7 B700 sta *__r1
05B9 A605 lda #5
05BB X11:
05BB 3800 lsl *__r1
05BD 3900 rol *__r0
05BF 4BFA dbnza X11
05C1 3800 lsl *__r1
05C3 3900 rol *__r0
05C5 B600 lda *__r1
05C7 EB09 add 9,X
05C9 B700 sta *__r1
05CB B600 lda *__r0
05CD E908 adc 8,X
05CF B700 sta *__r0
05D1 3F00 clr *__r2
05D3 E603 lda 3,X
05D5 B700 sta *__r3
05D7 3800 lsl *__r3
05D9 3900 rol *__r2
05DB B600 lda *__r3
05DD BB00 add *__r1
05DF B700 sta *__r1
05E1 B600 lda *__r2
05E3 B900 adc *__r0
05E5 B700 sta *__r0
05E7 5500 ldhx *__r0
05E9 E601 lda 1,x
05EB B700 sta *__r1
05ED F6 lda ,x
05EE 95 tsx
05EF B700 sta *__r0
05F1 B600 lda *__r1
05F3 87 psha
05F4 B600 lda *__r0
05F6 87 psha
05F7 E607 lda 7,X
05F9 AB02 add #2
05FB 87 psha
05FC E603 lda 3,X
05FE 87 psha
05FF CD03E5 jsr _LcdShGr16P
0602 A704 ais #4
0604 95 tsx
0605 .dbline 256
0605 L72:
0605 .dbline 251
0605 6C03 inc 3,X
0607 L74:
0607 .dbline 251
0607 E603 lda 3,X
0609 A120 cmp #32
060B 2403 bhs X12
060D CC050E jmp L71
0610 X12:
0610 .dbline 257
0610 ; LcdShGr16P(Yi,X+2,*(BigNumCodeAdrr+GBit*32+Yi));
0610 ; }
0610 ; Wtite_Command(0b00110000); //基本指令
0610 A630 lda #48
0612 87 psha
0613 CD041B jsr _Wtite_Command
0616 A701 ais #1
0618 95 tsx
0619 L68:
0619 .dbline 258
0619 ; LcdShBigNum_End:;
0619 .dbline -2
0619 L63:
0619 A704 ais #4
061B .dbline 0 ; func end
061B 81 rts
061C .dbsym l GBit 0 c
061C .dbsym l BBit 1 c
061C .dbsym l SBit 2 c
061C .dbsym l Yi 3 c
061C .dbsym l Num 10 i
061C .dbsym l BigNumCodeAdrr 8 pi
061C .dbsym l X 7 c
061C .dbsym l Y 6 c
061C .dbend
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?