📄 show.s
字号:
.module Show.c
.area text
.dbfile Show.c
.dbfunc e InBuff _InBuff fV
; i -> 0,X
; p -> 1,X
; Buff -> 13,X
; time2 -> 11,X
; time1 -> 9,X
; tmp2 -> 7,X
; tmp1 -> 5,X
_InBuff::
.dbline -1
ais #-3
tsx
.dbline 20
; #include "Show.h"
;
; //内部函数声明
; void NumFormatChange(INT8U * ReP,INT8U * Data);
; void Show1Data(INT16U showdata,INT8U showline,INT8U fbflag,INT8U *Buff);
;
; //InBuff:LCD显示数据合并子函数---------------------------------------------*
; //功 能:将需要显示的4行数据按LCD显示位置放入一个64字节的缓冲区 *
; //参 数: *
; // tmp1:第2行左对齐显示的数据 *
; // tmp2:第2行右对齐显示的数据 *
; // time1:第3行左对齐显示的数据 *
; // time2:第3行右对齐显示的数据 *
; // Buff:存放显示64字节数据的缓冲区 *
; //返 回:内存Buff开始连续的64个地址内即为转换后要显示的数据 *
; //调 用:Show1Data *
; //说 明:第4行显示“青星科技有限公司” *
; //-------------------------------------------------------------------------*
; void InBuff(INT16U tmp1,INT16U tmp2,INT16U time1,INT16U time2,INT8U *Buff)
; {
.dbline 29
; INT8U *p;
; INT8U i;
;
; //1 显示当前温度和设定温度
; //1.1空1格,因为汉字要从奇数位开始显示,否则为乱码
; // Buff[16]=' ';
; //1.2在第2行左对齐显示当前温度及其单位,共占用7字节
; // Show1Data(tmp1,2,0,Buff+1);
; p="℃"; //当1个汉字(2字节)显示
lda #>L2
sta 1,X
lda #<L2
sta 2,X
.dbline 30
; Buff[22]=*p;
lda 1,X
ldx 2,X
psha
pulh
lda ,x
tsx
sta *__r1
lda 14,X
add #22
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 31
; Buff[23]=*(p+1);
lda 2,X
add #1
sta *__r1
lda 1,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda 14,X
add #23
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 33
; //1.3中间用1个空格分开左右的显示
; Buff[24]=' ';
lda 14,X
add #24
sta *__r1
lda 13,X
adc #0
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
.dbline 35
; //1.4在第2行右对齐显示设定温度及其单位,也占用7字节
; Show1Data(tmp2,2,1,Buff);
lda 14,X
psha
lda 13,X
psha
lda #1
psha
lda #2
psha
lda 8,X
psha
lda 7,X
psha
jsr _Show1Data
ais #6
tsx
.dbline 36
; Buff[30]=*p;
lda 1,X
ldx 2,X
psha
pulh
lda ,x
tsx
sta *__r1
lda 14,X
add #30
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 37
; Buff[31]=*(p+1);
lda 2,X
add #1
sta *__r1
lda 1,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda 14,X
add #31
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 40
;
; //2 同样显示当前温度和设定温度
; Buff[32]=' ';
lda 14,X
add #32
sta *__r1
lda 13,X
adc #0
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
.dbline 41
; Show1Data(time1,3,0,Buff+1);
lda 14,X
add #1
sta *__r1
lda 13,X
adc #0
sta *__r0
lda *__r1
psha
lda *__r0
psha
clra
psha
lda #3
psha
lda 10,X
psha
lda 9,X
psha
jsr _Show1Data
ais #6
tsx
.dbline 42
; p="分";
lda #>L3
sta 1,X
lda #<L3
sta 2,X
.dbline 43
; Buff[38]=*p;
lda 1,X
ldx 2,X
psha
pulh
lda ,x
tsx
sta *__r1
lda 14,X
add #38
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 44
; Buff[39]=*(p+1);
lda 2,X
add #1
sta *__r1
lda 1,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda 14,X
add #39
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 45
; Buff[40]=' ';
lda 14,X
add #40
sta *__r1
lda 13,X
adc #0
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
.dbline 46
; Show1Data(time2,3,1,Buff);
lda 14,X
psha
lda 13,X
psha
lda #1
psha
lda #3
psha
lda 12,X
psha
lda 11,X
psha
jsr _Show1Data
ais #6
tsx
.dbline 47
; Buff[46]=*p;
lda 1,X
ldx 2,X
psha
pulh
lda ,x
tsx
sta *__r1
lda 14,X
add #46
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 48
; Buff[47]=*(p+1);
lda 2,X
add #1
sta *__r1
lda 1,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
lda 14,X
add #47
sta *__r3
lda 13,X
adc #0
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline -2
L1:
ais #3
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbsym l p 1 pc
.dbsym l Buff 13 pc
.dbsym l time2 11 i
.dbsym l time1 9 i
.dbsym l tmp2 7 i
.dbsym l tmp1 5 i
.dbend
.dbfunc e Show1Data _Show1Data fV
; j -> 0,X
; p -> 1,X
; data -> 3,X
; line -> 6,X
; redata -> 7,X
; i -> 12,X
; Buff -> 19,X
; lrflag -> 18,X
; showline -> 17,X
; showdata -> 15,X
_Show1Data::
.dbline -1
ais #-13
tsx
.dbline 74
; /*
; //3 在第4行显示“青星科技有限公司”
; p="青星科技有限公司";
; for(i=48;i<65;i++)
; {
; Buff[i]=*p;
; p++;
; }*/
; }
;
;
;
; //Show1Data:LCD单个数据显示子函数------------------------------------------*
; //功 能:将需要显示的showdata按LCD显示位置放入一个64字节的缓冲区 *
; // 在LCD第showline行左对齐或右对齐显示1个整型数据showdata *
; //参 数: *
; // showdata:需要显示的1个整型数据 *
; // showline:数据显示在LCD上的行数 *
; // lrflag:左对齐或右对齐的标志 *
; // Buff:存放显示64字节数据的缓冲区 *
; //返 回:将数据放入内存Buff[(showline-1)*16]开始连续的5个地址内 *
; // 或将数据放入内存Buff[(showline-1)*16+9]开始连续的5个地址内 *
; //调 用:NumFormatChange *
; //-------------------------------------------------------------------------*
; void Show1Data(INT16U showdata,INT8U showline,INT8U lrflag,INT8U *Buff)
; {
.dbline 82
; INT8U *p;
; INT8U data[3];
; INT8U redata[5];
; INT8U line;
; INT8U i,j;
;
; //数据的格式转换
; p=(INT8U *)&showdata;
aix #15
sthx *__r0
tsx
lda *__r0
sta 1,X
lda *__r1
sta 2,X
.dbline 83
; data[0]=*p;
lda 1,X
ldx 2,X
psha
pulh
lda ,x
tsx
sta 3,X
.dbline 84
; data[1]=*(p+1);
lda 2,X
add #1
sta *__r1
lda 1,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 4,X
.dbline 85
; data[2]=0;
clr 5,X
.dbline 86
; NumFormatChange(redata,data);
aix #3
pshx
pshh
tsx
aix #9
pshx
pshh
jsr _NumFormatChange
ais #4
tsx
.dbline 88
; //根据showline和lrflag把转换后的数据放入缓冲区的相应位置
; if(lrflag==0)
lda 18,X
bne L7
.dbline 89
; line=(showline-1)*16;
lda 17,X
sub #1
nsa
and #-16
sta 6,X
bra L8
L7:
.dbline 91
; else
; line=(showline-1)*16+9;
lda 17,X
sub #1
nsa
and #-16
add #9
sta 6,X
L8:
.dbline 92
; for(i=0;i<5;i++)
clr 12,X
bra L12
L9:
.dbline 93
aix #7
sthx *__r0
tsx
clr *__r2
lda 12,X
add *__r1
sta *__r1
lda *__r2
adc *__r0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda 6,X
sta *__r3
clr *__r4
lda 12,X
add *__r3
sta *__r3
lda *__r4
adc *__r2
sta *__r2
lda *__r3
add 20,X
sta *__r3
lda *__r2
adc 19,X
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
L10:
.dbline 92
inc 12,X
L12:
.dbline 92
lda 12,X
cmp #5
blo L9
.dbline -2
L4:
ais #13
.dbline 0 ; func end
rts
.dbsym l j 0 c
.dbsym l p 1 pc
.dbsym l data 3 A[3:3]c
.dbsym l line 6 c
.dbsym l redata 7 A[5:5]c
.dbsym l i 12 c
.dbsym l Buff 19 pc
.dbsym l lrflag 18 c
.dbsym l showline 17 c
.dbsym l showdata 15 i
.dbend
.dbfunc e NumFormatChange _NumFormatChange fV
; IntDataP -> 0,X
; k -> 2,X
; j -> 3,X
; i -> 4,X
; Data -> 9,X
; ReP -> 7,X
_NumFormatChange::
.dbline -1
ais #-5
tsx
.dbline 107
; Buff[i+line]=redata[i];
; }
; //NumFormatChange:数据格式转换子程序---------------------------------------*
; //功能:将3个字节的压缩BCD码数据转换为5个字节可显示的ASCII码数据 *
; //参数:Data[0--2]三个字节的数据:前两个字节压缩BCD码(00 00 - 99 99) *
; // 第三字节为小数点位数(0-2) *
; // ReP[0--4]存放5个字节的转换结果(注意:实际是ASCII码) *
; //举例:Data[0--2]:99 88 1 ->ReP[0--4]:9 9 8 . 8 *
; // Data[0--2]:00 87 0 ->ReP[0--4]: 8 7 *
; // Data[0--2]:02 36 2 ->ReP[0--4]: 2 . 3 6 *
; //返回:无 *
; //说明:步骤4表示若有2个及以上空格就将数据居中存放 (ZY 07.04.27) *
; //-------------------------------------------------------------------------*
; void NumFormatChange(INT8U *ReP,INT8U *Data)
; {
.dbline 117
; INT8U i,j,k; //循环控制变量
; INT16U * IntDataP;
; /*
; //0.处理汉字显示
; if(Data[2]>=200)
; {ReP[0]=' ';ReP[1]=Data[1];ReP[2]=' ';
; ReP[3]=' ';ReP[4]=' ';goto NumFormatChange_End;}
; */
; //1:得到可以显示的数据
; IntDataP=(INT16U *)Data;
lda 9,X
sta ,X
lda 10,X
sta 1,X
.dbline 118
; ReP[3]=(*IntDataP)%10+'0';
lda ,X
ldx 1,X
psha
pulh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -