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

📄 main.s

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	lda ,X
	bne X14
	lda 1,X
	cmp #8
	bne X34
	jmp L228
X34:
X14:
	lda ,X
	bne X15
	lda 1,X
	cmp #9
	bne X35
	jmp L232
X35:
X15:
	lda 1,X
	sta *__r1
	lda ,X
	sta *__r0
	ldhx *__r0
	cphx #0
	tsx
	bge X36
	jmp L208
X36:
L250:
	lda ,X
	bne X16
	lda 1,X
	cmp #64
	bne X37
	jmp L237
X37:
X16:
	lda ,X
	bne X17
	lda 1,X
	cmp #65
	bne X38
	jmp L240
X38:
X17:
	lda ,X
	bne X18
	lda 1,X
	cmp #67
	bne X39
	jmp L244
X39:
X18:
	lda ,X
	bne X19
	lda 1,X
	cmp #68
	bne X40
	jmp L248
X40:
X19:
	jmp L208
X20:
L212:
; 	  			case 0x00:
; 	  				datetem[0]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem
; 	  				lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L213:
; 	  			case 0x01:
; 	  				datetem[1]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+1
; 	  				lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L215:
; 	  			case 0x02:
; 	  				datetem[2]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+2
; 	  				lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L217:
; 	  			case 0x03:
; 	  				datetem[3]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+3
; 	  				lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L219:
; 	  			case 0x05:
; 	  				if((KB_valve-0x30)<=1){
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #1
	tsx
	ble X41
	jmp L208
X41:
; 		  				datetem[4]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+4
; 		  				lcdshow1(KB_valve,data);}
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L223:
; 	  			case 0x06:
; 	  				if(datetem[4]==1&&(KB_valve-0x30)>2)break;
	lda *_datetem+4
	cmp #1
	bne L224
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #2
	tsx
	ble L224
	jmp L208
L224:
; 	  				datetem[5]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+5
; 	  				lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L228:
; 	  			case 0x08:
; 	  				if(KB_valve-0x30<=3){
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #3
	tsx
	ble X42
	jmp L208
X42:
; 		  				datetem[6]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+6
; 		  				lcdshow1(KB_valve,data);}
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L232:
; 	  			case 0x09:
; 	  				if(datetem[6]==3&&(KB_valve-0x30)>1)break;
	lda *_datetem+6
	cmp #3
	bne L233
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #1
	tsx
	ble L233
	jmp L208
L233:
; 	  				datetem[7]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_datetem+7
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L237:
; 	  			case 0x40:
; 	  				if((KB_valve-0x30)>2)break;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #2
	tsx
	ble L238
	jmp L208
L238:
; 	  				timetem[0]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timetem
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L240:
; 	  			case 0x41:
; 	  				if(timetem[0]==2&&(KB_valve-0x30)>3)break;
	lda *_timetem
	cmp #2
	bne L241
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #3
	tsx
	ble L241
	jmp L208
L241:
; 	  				timetem[1]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timetem+1
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L244:
; 	  			case 0x43:
; 	  				if((KB_valve-0x30)>5)break;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #5
	tsx
	ble L245
	jmp L208
L245:
; 	  				timetem[2]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timetem+2
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L208
L248:
; 	  			case 0x44:
; 	  				timetem[3]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timetem+3
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  			default:break;
; 	  		}
; 		}
	jmp L208
L207:
; 		else {						//不是时间设置则是闹钟设置
; 			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;//获取AC的值
	and #127
	sta 2,X
	clr ,X
	sta 1,X
	lda ,X
	bne X21
	lda 1,X
	cmp #64
	beq L254
X21:
	lda ,X
	bne X22
	lda 1,X
	cmp #65
	beq L257
X22:
	lda ,X
	bne X23
	lda 1,X
	cmp #67
	bne X43
	jmp L261
X43:
X23:
	lda ,X
	bne X24
	lda 1,X
	cmp #68
	bne X44
	jmp L265
X44:
X24:
	jmp L252
X25:
; 	  		switch(data){			//按AC值不同分别赋给不同的闹钟计时临时单元
L254:
; 	  			case 0x40:
; 	  				if((KB_valve-0x30)>2)break;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #2
	tsx
	ble L255
	jmp L252
L255:
; 	  				timertem[0]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timertem
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	jmp L252
L257:
; 	  			case 0x41:
; 	  				if(timertem[0]==2&&(KB_valve-0x30)>3)break;
	lda *_timertem
	cmp #2
	bne L258
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #3
	tsx
	ble L258
	bra L252
L258:
; 	  				timertem[1]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timertem+1
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	bra L252
L261:
; 	  			case 0x43:
; 	  				if((KB_valve-0x30)>5)break;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	sta *__r0
	ldhx *__r0
	cphx #5
	tsx
	ble L262
	bra L252
L262:
; 	  				timertem[2]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timertem+2
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  				break;
	bra L252
L265:
; 	  			case 0x44:
; 	  				timertem[3]=KB_valve-0x30;
	lda 6,X
	sub #48
	sta *__r1
	lda 5,X
	sbc #0
	mov *__r1,*_timertem+3
; 		  			lcdshow1(KB_valve,data);
	lda 2,X
	psha
	lda 6,X
	psha
	jsr _lcdshow1
	ais #2
	tsx
; 	  			default:break;
L252:
; 	  		}
; 	  	}
L208:
; 	}
L205:
L204:
	ais #3
	.dbline 0 ; func end
	rts
_cancel::
; }
; 
; void cancel(void){				//取消设置
; 	if(showtime==0){
	lda *_showtime
	bne L268
; 		showtime=1;issettime=0;	//模式为显示时间,退出时间设置
	lda #1
	sta *_showtime
	clr *_issettime
; 		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
; 	}
L268:
L267:
	.dbline 0 ; func end
	rts
_reset::
; }
; 
; void reset(void){					//时钟复位,全部从零开始
; 	asm("SEI");
	SEI
; 	showtime=0x01;istimer=0x00;issettime=0;//模式初始化
	lda #1
	sta *_showtime
	clr *_istimer
	clr *_issettime
; 	DDRD=0x01;out=1;					//闹钟接口初始化
	lda #1
	sta 0x7
	lda #1
	sta *_out
; 	timer[0]=0;timer[1]=0;				//闹钟\时间初始化
	clr *_timer
	clr *_timer+1
; 	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
; 	LcdInit();							//LCD显示初始化
	jsr _LcdInit
; 	lcdshow((unsigned char *)ch);
	lda #<_ch
	psha
	lda #>_ch
	psha
	jsr _lcdshow
	ais #2
; 	KB_Init();					//键盘初始化
	jsr _KB_Init
; 	INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)  
	bclr #1,0x1a
; 	Timer1init();				//定时器初始化
	jsr _Timer1init
	tsx
; 	asm("CLI");					//复位
	CLI
L270:
	.dbline 0 ; func end
	rts
;       KB_valve -> 4,X
_set::
	ais #-2
	tsx
; }
; 
; void set(unsigned char KB_valve){		//按键功能选择
; 	switch(KB_valve){
	clr ,X
	lda 4,X
	sta 1,X
	lda ,X
	bne X45
	lda 1,X
	cmp #42
	bne X54
	jmp L285
X54:
X45:
	lda 1,X
	sta *__r1
	lda ,X
	sta *__r0
	ldhx *__r0
	cphx #42
	tsx
	bgt L293
L292:
	lda ,X
	bne X46
	lda 1,X
	cmp #35
	beq L284
X46:
	jmp L277
L293:
	lda ,X
	bne X47
	lda 1,X
	cmp #48
	beq L286
X47:
	lda ,X
	bne X48
	lda 1,X
	cmp #49
	beq L289
X48:
	lda 1,X
	sta *__r1
	lda ,X
	sta *__r0
	ldhx *__r0
	cphx #48
	tsx
	blt L277
L294:
	lda ,X
	bne X49
	lda 1,X
	cmp #65
	beq L280
X49:
	lda ,X
	bne X50
	lda 1,X
	cmp #66
	beq L281
X50:
	lda ,X
	bne X51
	lda 1,X
	cmp #67
	beq L282
X51:
	lda ,X
	bne X52
	lda 1,X
	cmp #68
	beq L283
X52:
	bra L277
X53:
L280:
; 		case 'A':shilfL();		//A:设置模式下的光标左移
	jsr _shilfL
	tsx
; 			break;
	bra L278
L281:
; 		case 'B':shilfR();//B:设置模式下的光标右移
	jsr _shilfR
	tsx
; 			break;
	bra L278
L282:
; 		case 'C':sastimer();	//C:闹钟开关
	jsr _sastimer
	tsx
; 			break;
	bra L278
L283:
; 		case 'D':settimer();//D:进入闹钟设置	
	jsr _settimer
	tsx
; 			break;
	bra L278
L284:
; 		case '#':ok();	//#:确定并退出设置
	jsr _ok
	tsx
; 			break;
	bra L278
L285:
; 		case '*':cancel();//*:取消并退出设置
	jsr _cancel
	tsx
; 			break;
	bra L278
L286:
; 		case '0':if(showtime==1){settime();break;}//0:非设置模式下的进入时间设置
	lda *_showtime
	cmp #1
	bne L287
	jsr _settime
	tsx
	bra L278
L287:
L289:
; 		case '1':if(showtime==1){reset();break;}//1:非设置模式下的复位
	lda *_showtime
	cmp #1
	bne L290
	jsr _reset
	tsx
	bra L278
L290:
L277:
; 		default:input(KB_valve);//设置模式下的数字输入
	clr *__r0
	lda 4,X
	psha
	lda *__r0
	psha
	jsr _input
	ais #2
	tsx
; 			break;
L278:
L276:
	ais #2
	.dbline 0 ; func end
	rts
	.area bss
_issettime::
	.blkb 1
_istimer::
	.blkb 1
_showtime::
	.blkb 1
_datetem::
	.blkb 8
_timetem::
	.blkb 4
_timertem::
	.blkb 4
_out::
	.blkb 1
_date::
	.blkb 6
_time::
	.blkb 3
_timer::
	.blkb 2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -