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

📄 main.s

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	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 + -