⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memu.s

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -