📄 main.s
字号:
sta ,X
; data&=0b01111111;
and #127
sta ,X
; data++;
inc ,X
lda ,X
cmp #4
beq L115
cmp #7
beq L115
cmp #66
beq L115
cmp #69
bne L111
L115:
; if(data==0x04||data==0x07||data==0x42||data==0x45)data++;
inc ,X
L111:
; if(data==0x0A)data=0x40;
lda ,X
cmp #10
bne L116
lda #64
sta ,X
L116:
; if(data==0x48)data=0x00;
lda ,X
cmp #72
bne L118
clr ,X
L118:
; data|=0b10000000; //写AC地址指令
lda ,X
ora #-128
sta ,X
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(data); //AC地址减1后写AC地址
psha
jsr _Lcd_Command
ais #1
tsx
; }
L109:
L108:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
_settime::
ais #-1
tsx
; }
;
; void settime(void){ //进入时间设置
clr ,X
bra L124
L121:
clr *__r0
lda ,X
add #<_datetem
sta *__r1
lda *__r0
adc #>_datetem
sta *__r0
clra
ldhx *__r0
sta ,x
tsx
L122:
inc ,X
L124:
; unsigned char i;
; for(i=0;i<8;i++)datetem[i]=0;
lda ,X
cmp #8
blo L121
clr ,X
bra L128
L125:
clr *__r0
lda ,X
add #<_timetem
sta *__r1
lda *__r0
adc #>_timetem
sta *__r0
clra
ldhx *__r0
sta ,x
tsx
L126:
inc ,X
L128:
; for(i=0;i<4;i++)timetem[i]=0;
lda ,X
cmp #4
blo L125
; issettime=0x01; //时间设置位置1
lda #1
sta *_issettime
; showtime=0x00; //时间显示位置0,不显示时间
clr *_showtime
; lcdshow((unsigned char *)init);
lda #<_init
psha
lda #>_init
psha
jsr _lcdshow
ais #2
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00001111); //开显示,开光标,闪烁
lda #15
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
lda #-128
psha
jsr _Lcd_Command
ais #1
tsx
L120:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
_sastimer::
ais #-1
tsx
; }
;
;
; void sastimer(void){ //开始或关闭闹钟标志
clr ,X
bra L133
L130:
clr *__r0
lda ,X
add #<_timertem
sta *__r1
lda *__r0
adc #>_timertem
sta *__r0
clra
ldhx *__r0
sta ,x
tsx
L131:
inc ,X
L133:
; unsigned char i;
; for(i=0;i<4;i++)timertem[i]=0;
lda ,X
cmp #4
blo L130
; if(istimer==0x00){ //若关则开
lda *_istimer
bne L134
; istimer=0x01; //标志开
lda #1
sta *_istimer
; lcdshow1('*',0x4C); //显示'*'
lda #76
psha
lda #42
psha
jsr _lcdshow1
ais #2
tsx
; }
bra L135
L134:
; else if(istimer==0x01){ //若开则关
lda *_istimer
cmp #1
bne L136
; istimer=0x00; //标志关
clr *_istimer
; lcdshow1(' ',0x4C); //无显示
lda #76
psha
lda #32
psha
jsr _lcdshow1
ais #2
tsx
; }
L136:
L135:
L129:
ais #1
.dbline 0 ; func end
rts
; j -> 0,X
; i -> 1,X
_settimer::
ais #-2
tsx
; }
;
; void settimer(void){ //进入闹钟设置
; if(issettime==0){
lda *_issettime
beq X4
jmp L139
X4:
; unsigned char i=0,j;
clr 1,X
; showtime=0x00; //时间显示位置0,不显示时间
clr *_showtime
; istimer=0x01; //开闹钟设置标志
lda #1
sta *_istimer
; lcdshow1('*',0x4C); //显示'*'
lda #76
psha
lda #42
psha
jsr _lcdshow1
ais #2
tsx
; show[i]='E';i++; //第一行不显示
clr *__r0
lda 1,X
add #<_show
sta *__r1
lda *__r0
adc #>_show
sta *__r0
lda #69
ldhx *__r0
sta ,x
tsx
inc 1,X
clr ,X
jmp L144
L141:
; for(j=0;j<3;j++){
; show[i]=0x30+(timer[j]/10);i++;
clr *__r0
lda ,X
add #<_timer
sta *__r1
lda *__r0
adc #>_timer
sta *__r0
ldhx *__r0
lda ,x
ldx #10
clrh
div
tsx
add #48
sta *__r1
clr *__r2
lda 1,X
add #<_show
sta *__r3
lda *__r2
adc #>_show
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
inc 1,X
; show[i]=0x30+(timer[j]%10);i++;
clr *__r0
lda ,X
add #<_timer
sta *__r1
lda *__r0
adc #>_timer
sta *__r0
ldhx *__r0
lda ,x
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 1,X
add #<_show
sta *__r3
lda *__r2
adc #>_show
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
inc 1,X
; if(j==2)break;
lda ,X
cmp #2
bne L145
bra L143
L145:
clr *__r0
lda 1,X
add #<_show
sta *__r1
lda *__r0
adc #>_show
sta *__r0
lda #58
ldhx *__r0
sta ,x
tsx
inc 1,X
L142:
inc ,X
L144:
lda ,X
cmp #3
bhs X5
jmp L141
X5:
L143:
; show[i]=':';i++;
; }
; show[i]='E';
clr *__r0
lda 1,X
add #<_show
sta *__r1
lda *__r0
adc #>_show
sta *__r0
lda #69
ldhx *__r0
sta ,x
; lcdshow((unsigned char *)show);//显示原设置的时间
lda #<_show
psha
lda #>_show
psha
jsr _lcdshow
ais #2
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00001111); //开显示,开光标,闪烁
lda #15
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b11000000); //后7位为DDRAM地址0x40
lda #-64
psha
jsr _Lcd_Command
ais #1
tsx
; }
L139:
L138:
ais #2
.dbline 0 ; func end
rts
; i -> 0,X
_ok::
ais #-1
tsx
; }
;
; void ok(void){ //在设置模式下的确定,
; unsigned char i;
; if(showtime==0x00&&issettime==0x01){ //在时间设置模式下的确定,
lda *_showtime
beq X6
jmp L148
X6:
lda *_issettime
cmp #1
beq X7
jmp L148
X7:
; T1SC|=(1<<TSTOPBit); //停止计数,进行时间修改
bset #5,0x20
; time[0]=0;time[1]=0;time[2]=0; //时间清零,键盘输入的临时时间写入时间
clr *_time
clr *_time+1
clr *_time+2
; date[0]=0;date[1]=0;date[2]=0;
clr *_date+1
clr *_date
clr *_date+2+1
clr *_date+2
clr *_date+4+1
clr *_date+4
clr ,X
bra L157
L154:
clr *__r0
lda ,X
add #<_datetem
sta *__r1
lda *__r0
adc #>_datetem
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r0
ldhx *_date
pshx
pshh
tsx
aix #2
lda #10
psha
clra
psha
jsr __mul16
ais #4
mov *__rlo,*__r3
mov *__rhi,*__r2
lda *__r3
add *__r1
sta *_date+1
lda *__r2
adc *__r0
sta *_date
L155:
inc ,X
L157:
; for(i=0;i<4;i++){
lda ,X
cmp #4
blo L154
bra L161
L158:
clr *__r0
lda ,X
add #<_datetem
sta *__r1
lda *__r0
adc #>_datetem
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r0
ldhx *_date+2
pshx
pshh
tsx
aix #2
lda #10
psha
clra
psha
jsr __mul16
ais #4
mov *__rlo,*__r3
mov *__rhi,*__r2
lda *__r3
add *__r1
sta *_date+2+1
lda *__r2
adc *__r0
sta *_date+2
clr *__r0
lda ,X
add #<_timetem-4
sta *__r1
lda *__r0
adc #>_timetem-4
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
lda *_time
ldx #10
mul
tsx
add *__r1
sta *_time
L159:
inc ,X
L161:
; date[0]=(int)(date[0]*10+datetem[i]);
; }
; for(;i<6;i++){
lda ,X
cmp #6
blo L158
bra L168
L165:
clr *__r0
lda ,X
add #<_datetem
sta *__r1
lda *__r0
adc #>_datetem
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
clr *__r0
ldhx *_date+4
pshx
pshh
tsx
aix #2
lda #10
psha
clra
psha
jsr __mul16
ais #4
mov *__rlo,*__r3
mov *__rhi,*__r2
lda *__r3
add *__r1
sta *_date+4+1
lda *__r2
adc *__r0
sta *_date+4
clr *__r0
lda ,X
add #<_timetem-4
sta *__r1
lda *__r0
adc #>_timetem-4
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
lda *_time+1
ldx #10
mul
tsx
add *__r1
sta *_time+1
L166:
inc ,X
L168:
; date[1]=date[1]*10+datetem[i];
; time[0]=time[0]*10+timetem[i-4];
; }
; for(;i<8;i++){
lda ,X
cmp #8
blo L165
; date[2]=date[2]*10+datetem[i];
; time[1]=time[1]*10+timetem[i-4];
; }
; issettime=0x00;
clr *_issettime
; T1SC&=~(1<<TSTOPBit); //开始计数
bclr #5,0x20
; }
L148:
; if(showtime==0x00&&issettime==0x00){ //在闹钟设置模式下的确定,
lda *_showtime
bne L174
lda *_issettime
bne L174
; timer[0]=0;timer[1]=0;timer[2]=0; //时间清零,键盘输入的临时定时时间写入定时时间
clr *_timer
clr *_timer+1
clr *_timer+2
clr ,X
bra L181
L178:
clr *__r0
lda ,X
add #<_timertem
sta *__r1
lda *__r0
adc #>_timertem
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
lda *_timer
ldx #10
mul
tsx
add *__r1
sta *_timer
L179:
inc ,X
L181:
; for(i=0;i<2;i++){
lda ,X
cmp #2
blo L178
bra L185
L182:
clr *__r0
lda ,X
add #<_timertem
sta *__r1
lda *__r0
adc #>_timertem
sta *__r0
ldhx *__r0
lda ,x
sta *__r1
lda *_timer+1
ldx #10
mul
tsx
add *__r1
sta *_timer+1
L183:
inc ,X
L185:
; timer[0]=timer[0]*10+timertem[i];
; }
; for(;i<4;i++){
lda ,X
cmp #4
blo L182
; timer[1]=timer[1]*10+timertem[i];
; }
; }
L174:
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
lda #12
psha
jsr _Lcd_Command
ais #1
tsx
; showtime=0x01; //开时间显示
lda #1
sta *_showtime
L147:
ais #1
.dbline 0 ; func end
rts
; j -> 0,X
; u -> 1,X
; i -> 4,X
_Delay_ms::
ais #-2
tsx
; }
;
; void Delay_ms(unsigned char i)
; { unsigned char j;
; unsigned char u;
; for(j=0;j<i;j++)
clr ,X
bra L192
L189:
clr 1,X
bra L196
L193:
L194:
inc 1,X
L196:
lda 1,X
cmp #-6
bls L193
L190:
inc ,X
L192:
lda ,X
cmp 4,X
blo L189
L188:
ais #2
.dbline 0 ; func end
rts
; j -> 0,X
; p -> 3,X
_beep::
ais #-1
tsx
; for(u=0;u<=250;u++) ;
; }
;
;
; void beep(unsigned char p){ //锋鸣器启动,时间持续p秒
clr ,X
bra L201
L198:
; unsigned char j;
; for(j=0;j<p;j++){//延时p秒
; PTD=1;
lda #1
sta 0x3
; Delay_ms(50);
lda #50
psha
jsr _Delay_ms
ais #1
; PTD=0;
clr 0x3
; Delay_ms(200);
lda #-56
psha
jsr _Delay_ms
ais #1
; Delay_ms(200);
lda #-56
psha
jsr _Delay_ms
ais #1
tsx
; if(istimer==0)break; //如果关闹钟则退出延时
lda *_istimer
bne L202
bra L200
L202:
L199:
inc ,X
L201:
lda ,X
cmp 3,X
blo L198
L200:
L197:
ais #1
.dbline 0 ; func end
rts
; data -> 2,X
; KB_valve -> 5,X
_input::
ais #-3
tsx
; }
; }
;
; void input(KB_valve){ //数字输入
; if(showtime==0x00){
lda *_showtime
beq X26
jmp L205
X26:
; unsigned char data;
; if(issettime==0x01){ //若是时间设置
lda *_issettime
cmp #1
beq X27
jmp L207
X27:
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=01,读指令
bclr #0,0x2
; LcdCtrl|=(1<<LcdRW);
bset #1,0x2
; LcdCtrl|=(1<<LcdE); //E=1
bset #2,0x2
; data=LcdData; //获取AC的值
lda 0x1
sta 2,X
; data&=0b01111111;
and #127
sta 2,X
; switch(data){ //按AC值不同分别赋给不同的时间临时单元
clr ,X
sta 1,X
lda ,X
bne X8
lda 1,X
bne X28
jmp L212
X28:
X8:
lda ,X
bne X9
lda 1,X
cmp #1
bne X29
jmp L213
X29:
X9:
lda ,X
bne X10
lda 1,X
cmp #2
bne X30
jmp L215
X30:
X10:
lda ,X
bne X11
lda 1,X
cmp #3
bne X31
jmp L217
X31:
X11:
lda ,X
bne X12
lda 1,X
cmp #5
bne X32
jmp L219
X32:
X12:
lda ,X
bne X13
lda 1,X
cmp #6
bne X33
jmp L223
X33:
X13:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -