📄 memu.s
字号:
.module memu.c
.area text
.dbfile memu.c
.dbfunc e Print _Print fV
; StartPos -> 0,X
; i -> 1,X
; Num -> 8,X
; SringP -> 6,X
; RowNO -> 5,X
; LineNo -> 4,X
_Print::
.dbline -1
ais #-2
tsx
.dbline 15
;
; #include "Includes.h"
; /*Print:把需要显示的字符串传送给显示缓冲区---------------------------------*
; *功能:把需要显示的字符串传送给显示缓冲区从(行号LineNo,列号RowNO)开始的区域 *
; *参数:全局变量LcdShowBuff:64字节显示缓冲区(4行*16列) *
; * LineNo:在Lcd上显示的起始行号(1--4) *
; * RowNO:在Lcd上显示的起始列号(1--16) *
; * SringP:指向需在Lcd上显示的字符串的指针 *
; * Num:字符串长度 *
; *调用实例:Print(2,3,"苏州大学",8) *
; * 在第2行第3列开始显示"苏州大学"4个汉字(共8个字符) *
; *返回:无 *
; *-------------------------------------------------------------------------*/
; void Print(INT8U LineNo,INT8U RowNO,INT8U * SringP,INT8U Num)
; {
.dbline 18
; INT8U i; //循环控制变量
; INT8U StartPos; //在显示缓冲区(0--63)中的起始位置
; StartPos = (LineNo-1)*16+(RowNO-1);
lda 5,X
sub #1
sta *__r0
lda 4,X
sub #1
nsa
and #-16
add *__r0
sta ,X
.dbline 19
; for(i=0;i<Num;i++)
clr 1,X
bra L5
L2:
.dbline 20
; {
.dbline 22
; //已超出Lcd显示缓冲区的边界,退出
; if((StartPos+i)>63) break;
lda ,X
add 1,X
cmp #63
bls L6
.dbline 22
bra L4
L6:
.dbline 23
clr *__r0
lda 1,X
sta *__r1
clr *__r2
lda ,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
lda *__r1
add #<_LcdShowBuff
sta *__r1
lda *__r0
adc #>_LcdShowBuff
sta *__r0
clr *__r2
lda 1,X
add 7,X
sta *__r3
lda *__r2
adc 6,X
sta *__r2
ldhx *__r2
lda ,x
ldhx *__r0
sta ,x
tsx
.dbline 24
L3:
.dbline 19
inc 1,X
L5:
.dbline 19
lda 1,X
cmp 8,X
blo L2
L4:
.dbline -2
L1:
ais #2
.dbline 0 ; func end
rts
.dbsym l StartPos 0 c
.dbsym l i 1 c
.dbsym l Num 8 c
.dbsym l SringP 6 pc
.dbsym l RowNO 5 c
.dbsym l LineNo 4 c
.dbend
.dbfunc e Clear _Clear fV
; i -> 0,X
_Clear::
.dbline -1
ais #-1
tsx
.dbline 32
; LcdShowBuff[StartPos+i]=SringP[i];
; }
; }
; /*Clear:清空显示缓冲区-----------------------------------------------------*
; *功能:清空显示缓冲区,把显示缓冲区的内容全部赋为空格 *
; *参数:全局变量LcdShowBuff:64字节显示缓冲区(4行*16列) *
; *返回:无 *
; *-------------------------------------------------------------------------*/
; void Clear(void)
; {
.dbline 34
; INT8U i; //循环控制变量
; for(i=0;i<64;i++)
clr ,X
bra L12
L9:
.dbline 35
clr *__r0
lda ,X
add #<_LcdShowBuff
sta *__r1
lda *__r0
adc #>_LcdShowBuff
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
L10:
.dbline 34
inc ,X
L12:
.dbline 34
lda ,X
cmp #64
blo L9
.dbline -2
L8:
ais #1
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbend
.dbfunc e NumFormatChange _NumFormatChange fV
; k -> 0,X
; j -> 1,X
; sign -> 2,X
; IntDataP -> 3,X
; i -> 5,X
; flag -> 12,X
; Data -> 10,X
; ReP -> 8,X
_NumFormatChange::
.dbline -1
ais #-6
tsx
.dbline 48
; LcdShowBuff[i]=' ';
; }
; /*NumFormatChange:数据格式转换子程序---------------------------------------*
; *功能:将3个字节的压缩BCD码数据转换为5个字节可显示的ASCII码数据 *
; *参数:Data[0--2]三个字节的数据:前两个字节压缩BCD码(00 00 - 99 99) *
; * 第三字节为符号位(-、+) *
; * ReP[0--4]存放5个字节的转换结果(注意:实际是ASCII码) *
; * flag:0-设定值调整,无小数位;1-显示值调整,有一位小数位 *
; *举例:Data[0--2]:12 35 + ->ReP[0--5]:+ 1 2 3 . 5 *
; * Data[0--2]:01 92 - ->ReP[0--5]:- 1 9 . 2 *
; *返回:无 *
; *-------------------------------------------------------------------------*/
; void NumFormatChange(INT8U * ReP,INT8U * Data,INT8U flag)
; {
.dbline 53
; INT8U i,j,k; //循环控制变量
; INT16U * IntDataP; //数据
; INT8U sign; //符号
; //1:得到可以显示的数据
; IntDataP=(INT16U *)Data;
lda 10,X
sta 3,X
lda 11,X
sta 4,X
.dbline 54
; sign=Data[2];
lda 11,X
add #2
sta *__r1
lda 10,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
.dbline 56
;
; ReP[4]=(*IntDataP)%10+'0';
lda 3,X
ldx 4,X
psha
pulh
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16u
pula
sta *__r0
pula
add #48
sta *__r1
lda *__r0
adc #0
lda 9,X
add #4
sta *__r3
lda 8,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 57
; ReP[3]=((*IntDataP)/10)%10+'0';
lda 3,X
ldx 4,X
psha
pulh
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16u
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16u
pula
sta *__r0
pula
add #48
sta *__r1
lda *__r0
adc #0
lda 9,X
add #3
sta *__r3
lda 8,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 58
; ReP[2]=((*IntDataP)/100)%10+'0';
lda 3,X
ldx 4,X
psha
pulh
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #100
psha
clra
psha
jsr __divmod16u
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16u
pula
sta *__r0
pula
add #48
sta *__r1
lda *__r0
adc #0
lda 9,X
add #2
sta *__r3
lda 8,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 59
; ReP[1]=(*IntDataP)/1000+'0';
lda 3,X
ldx 4,X
psha
pulh
lda 1,x
sta *__r1
lda ,x
tsx
sta *__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #-24
psha
lda #3
psha
jsr __divmod16u
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
lda *__r1
add #48
sta *__r1
lda *__r0
adc #0
lda 9,X
add #1
sta *__r3
lda 8,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 62
;
; //2:显示数据调整,有一位小数
; ReP[5]=ReP[4];ReP[4]='.';
lda 9,X
add #4
sta *__r1
lda 8,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda 9,X
add #5
sta *__r3
lda 8,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 62
lda 9,X
add #4
sta *__r1
lda 8,X
adc #0
sta *__r0
lda #46
ldhx *__r0
sta ,x
tsx
.dbline 64
; //3:调整前导的0为空格
; if(ReP[1]=='0')
lda 9,X
add #1
sta *__r1
lda 8,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #48
bne L14
.dbline 65
; ReP[1]=0x20;
lda 9,X
add #1
sta *__r1
lda 8,X
adc #0
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
L14:
.dbline 66
; for(i=2;i<5;i++)
lda #2
sta 5,X
bra L19
L16:
.dbline 67
; {if((ReP[i-1]==0x20)&&(ReP[i]=='0')&&(ReP[i+1]!='.'))
.dbline 67
clr *__r0
lda 5,X
sub #1
sta *__r1
lda *__r0
sbc #0
sta *__r0
lda *__r1
add 9,X
sta *__r1
lda *__r0
adc 8,X
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #32
bne L20
clr *__r0
lda 5,X
add 9,X
sta *__r1
lda *__r0
adc 8,X
sta *__r0
ldhx *__r0
lda ,x
tsx
cmp #48
bne L20
ldhx *__r0
aix #1
lda ,x
tsx
cmp #46
beq L20
.dbline 68
clr *__r0
lda 5,X
add 9,X
sta *__r1
lda *__r0
adc 8,X
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
L20:
.dbline 68
L17:
.dbline 66
inc 5,X
L19:
.dbline 66
lda 5,X
cmp #5
blo L16
.dbline 70
; ReP[i]=0x20;}
; //4: 若为负数,添加负号
; if(sign=='-')
lda 2,X
cmp #45
bne L22
.dbline 71
; {for(i=1;i<3;i++)
.dbline 71
lda #1
sta 5,X
bra L27
L24:
.dbline 72
; if(ReP[i+1]!=0x20) break;
clr *__r0
lda 5,X
add 9,X
sta *__r1
lda *__r0
adc 8,X
sta *__r0
ldhx *__r0
aix #1
lda ,x
tsx
cmp #32
beq L28
.dbline 72
bra L26
L28:
L25:
.dbline 71
inc 5,X
L27:
.dbline 71
lda 5,X
cmp #3
blo L24
L26:
.dbline 73
; ReP[i]=sign;}
clr *__r0
lda 5,X
add 9,X
sta *__r1
lda *__r0
adc 8,X
sta *__r0
lda 2,X
ldhx *__r0
sta ,x
tsx
.dbline 73
L22:
L30:
.dbline 77
; //SCISend1('A');
; //for(i=1;i<=5;i++) SCISend1(ReP[i]);
; //SCISend1('B');
; NumFormatChange_End:;
.dbline -2
L13:
ais #6
.dbline 0 ; func end
rts
.dbsym l k 0 c
.dbsym l j 1 c
.dbsym l sign 2 c
.dbsym l IntDataP 3 ps
.dbsym l i 5 c
.dbsym l flag 12 c
.dbsym l Data 10 pc
.dbsym l ReP 8 pc
.dbend
.dbfunc e PackShowBuf _PackShowBuf fV
; data -> 0,X
; buf -> 3,X
; i -> 9,X
; LcdShowBuff -> 12,X
_PackShowBuf::
.dbline -1
ais #-10
tsx
.dbline 87
; }
; /*PackShowBuf:封装LCD的显示缓冲区------------------------------------------*
; *功能:将在LCD上显示的当前温度CurrentT、设定温度BasicT *
; 当前湿度CurrentH、设定湿度BasicH风机情况和时间进行封包*
; *参数:当前温度CurrentT、设定温度BasicT、当前温度符号SignCT *
; 设定温度符号SignBT、当前湿度CurrentH、设定湿度BasicH *
; *返回:LCD的显示缓冲区LcdShowBuff *
; *-------------------------------------------------------------------------*/
; void PackShowBuf(INT8U * LcdShowBuff)
; {
.dbline 91
; INT8U i;
; INT8U data[3],buf[6];
; //1:当前温度
; data[0]=CurrentT>>8;data[1]=CurrentT; data[2]=SignCT;
lda *_CurrentT
sta ,X
.dbline 91
lda *_CurrentT+1
sta 1,X
.dbline 91
lda *_SignCT
sta 2,X
.dbline 92
; NumFormatChange(buf,data,1);
lda #1
psha
pshx
pshh
aix #3
pshx
pshh
jsr _NumFormatChange
ais #5
tsx
.dbline 93
lda #1
sta 9,X
bra L37
L34:
.dbline 93
aix #3
sthx *__r0
tsx
clr *__r2
lda 9,X
add *__r1
sta *__r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -