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

📄 main.lis

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03D3 95                tsx
 03D4           ;                if(istimer==0x01)lcdshow1('*',0x4C);           //闹钟开关标志
 03D4 B601              lda *_istimer
 03D6 A101              cmp #1
 03D8 260C              bne L94
 03DA A64C              lda #76
 03DC 87                psha
 03DD A62A              lda #42
 03DF 87                psha
 03E0 CD0000            jsr _lcdshow1
 03E3 A702              ais #2
 03E5 95                tsx
 03E6           L94:
 03E6           ; 	}
 03E6           L72:
 03E6           L71:
 03E6 A708              ais #8
 03E8                   .dbline 0 ; func end
 03E8 81                rts
 03E9           ;           data -> 0,X
 03E9           _shilfL::
 03E9 A7FF              ais #-1
 03EB 95                tsx
 03EC           ; }
 03EC           ; void shilfL(void){                                            //在设置状态下光标左移
 03EC           ;       if(showtime==0x00){     
 03EC B602              lda *_showtime
 03EE 263E              bne L97
 03F0           ;               unsigned char data;
 03F0           ;               LcdCtrl&=~(1<<LcdRS);    //RS、R/W=01,读指令
 03F0 1102              bclr #0,0x2
 03F2           ;               LcdCtrl|=(1<<LcdRW);    
 03F2 1202              bset #1,0x2
 03F4           ;               LcdCtrl|=(1<<LcdE);       //E=1
 03F4 1402              bset #2,0x2
 03F6           ;               data=LcdData;
 03F6 B601              lda 0x1
 03F8 F7                sta ,X
 03F9           ;               data&=0b01111111;
 03F9 A47F              and #127
 03FB F7                sta ,X
 03FC           ;               data--; 
 03FC 7A                dec ,X
 03FD F6                lda ,X
 03FE A104              cmp #4
 0400 270C              beq L103
 0402 A107              cmp #7
 0404 2708              beq L103
 0406 A142              cmp #66
 0408 2704              beq L103
 040A A145              cmp #69
 040C 2601              bne L99
 040E           L103:
 040E           ; 	  	if(data==0x04||data==0x07||data==0x42||data==0x45)data--;
 040E 7A                dec ,X
 040F           L99:
 040F           ; 	  	if(data==0x3f)data=0x09;
 040F F6                lda ,X
 0410 A13F              cmp #63
 0412 2603              bne L104
 0414 A609              lda #9
 0416 F7                sta ,X
 0417           L104:
 0417           ; 	  	if(data==0xff)data=0x47;
 0417 F6                lda ,X
 0418 A1FF              cmp #-1
 041A 2603              bne L106
 041C A647              lda #71
 041E F7                sta ,X
 041F           L106:
 041F           ; 	  	data|=0b10000000;		//写AC地址指令
 041F F6                lda ,X
 0420 AA80              ora #-128
 0422 F7                sta ,X
 0423           ;               LcdCtrl&=~(1<<LcdRS);    //RS、R/W=00,写指令
 0423 1102              bclr #0,0x2
 0425           ;               LcdCtrl&=~(1<<LcdRW);    
 0425 1302              bclr #1,0x2
 0427           ;               Lcd_Command(data);              //AC地址减1后写AC地址
 0427 87                psha
 0428 CD0000            jsr _Lcd_Command
 042B A701              ais #1
 042D 95                tsx
 042E           ;       }       
 042E           L97:
 042E           L96:
 042E A701              ais #1
 0430                   .dbline 0 ; func end
 0430 81                rts
 0431           ;           data -> 0,X
 0431           _shilfR::
 0431 A7FF              ais #-1
 0433 95                tsx
 0434           ; }
 0434           ; 
 0434           ; void shilfR(void){                                    //在设置状态下光标右移
 0434           ;       if(showtime==0x00){
 0434 B602              lda *_showtime
 0436 263C              bne L109
 0438           ;               unsigned char data;
 0438           ;               LcdCtrl&=~(1<<LcdRS);    //RS、R/W=01,读指令
 0438 1102              bclr #0,0x2
 043A           ;               LcdCtrl|=(1<<LcdRW);    
 043A 1202              bset #1,0x2
 043C           ;               LcdCtrl|=(1<<LcdE);       //E=1
 043C 1402              bset #2,0x2
 043E           ;               data=LcdData;
 043E B601              lda 0x1
 0440 F7                sta ,X
 0441           ;               data&=0b01111111;
 0441 A47F              and #127
 0443 F7                sta ,X
 0444           ;               data++; 
 0444 7C                inc ,X
 0445 F6                lda ,X
 0446 A104              cmp #4
 0448 270C              beq L115
 044A A107              cmp #7
 044C 2708              beq L115
 044E A142              cmp #66
 0450 2704              beq L115
 0452 A145              cmp #69
 0454 2601              bne L111
 0456           L115:
 0456           ; 	  	if(data==0x04||data==0x07||data==0x42||data==0x45)data++;
 0456 7C                inc ,X
 0457           L111:
 0457           ; 	  	if(data==0x0A)data=0x40;
 0457 F6                lda ,X
 0458 A10A              cmp #10
 045A 2603              bne L116
 045C A640              lda #64
 045E F7                sta ,X
 045F           L116:
 045F           ; 	  	if(data==0x48)data=0x00;
 045F F6                lda ,X
 0460 A148              cmp #72
 0462 2601              bne L118
 0464 7F                clr ,X
 0465           L118:
 0465           ; 	  	data|=0b10000000;		//写AC地址指令
 0465 F6                lda ,X
 0466 AA80              ora #-128
 0468 F7                sta ,X
 0469           ;               LcdCtrl&=~(1<<LcdRS);    //RS、R/W=00,写指令
 0469 1102              bclr #0,0x2
 046B           ;               LcdCtrl&=~(1<<LcdRW);    
 046B 1302              bclr #1,0x2
 046D           ;               Lcd_Command(data);              //AC地址减1后写AC地址
 046D 87                psha
 046E CD0000            jsr _Lcd_Command
 0471 A701              ais #1
 0473 95                tsx
 0474           ;       }
 0474           L109:
 0474           L108:
 0474 A701              ais #1
 0476                   .dbline 0 ; func end
 0476 81                rts
 0477           ;              i -> 0,X
 0477           _settime::
 0477 A7FF              ais #-1
 0479 95                tsx
 047A           ; }
 047A           ; 
 047A           ; void settime(void){                           //进入时间设置
 047A 7F                clr ,X
 047B 2013              bra L124
 047D           L121:
 047D 3F00              clr *__r0
 047F F6                lda ,X
 0480 AB03              add #<_datetem
 0482 B700              sta *__r1
 0484 B600              lda *__r0
 0486 A903              adc #>_datetem
 0488 B700              sta *__r0
 048A 4F                clra
 048B 5500              ldhx *__r0
 048D F7                sta ,x
 048E 95                tsx
 048F           L122:
 048F 7C                inc ,X
 0490           L124:
 0490           ; 	unsigned char i;
 0490           ; 	for(i=0;i<8;i++)datetem[i]=0;
 0490 F6                lda ,X
 0491 A108              cmp #8
 0493 25E8              blo L121
 0495 7F                clr ,X
 0496 2013              bra L128
 0498           L125:
 0498 3F00              clr *__r0
 049A F6                lda ,X
 049B AB0B              add #<_timetem
 049D B700              sta *__r1
 049F B600              lda *__r0
 04A1 A90B              adc #>_timetem
 04A3 B700              sta *__r0
 04A5 4F                clra
 04A6 5500              ldhx *__r0
 04A8 F7                sta ,x
 04A9 95                tsx
 04AA           L126:
 04AA 7C                inc ,X
 04AB           L128:
 04AB           ; 	for(i=0;i<4;i++)timetem[i]=0;
 04AB F6                lda ,X
 04AC A104              cmp #4
 04AE 25E8              blo L125
 04B0           ;       issettime=0x01;                         //时间设置位置1
 04B0 A601              lda #1
 04B2 B700              sta *_issettime
 04B4           ;       showtime=0x00;                          //时间显示位置0,不显示时间
 04B4 3F02              clr *_showtime
 04B6           ;       lcdshow((unsigned char *)init);
 04B6 A62F              lda #<_init
 04B8 87                psha
 04B9 A62F              lda #>_init
 04BB 87                psha
 04BC CD0000            jsr _lcdshow
 04BF A702              ais #2
 04C1           ;       LcdCtrl&=~(1<<LcdRS);      //RS、R/W=00,写指令
 04C1 1102              bclr #0,0x2
 04C3           ;       LcdCtrl&=~(1<<LcdRW);    
 04C3 1302              bclr #1,0x2
 04C5           ;       Lcd_Command(0b00001111);        //开显示,开光标,闪烁
 04C5 A60F              lda #15
 04C7 87                psha
 04C8 CD0000            jsr _Lcd_Command
 04CB A701              ais #1
 04CD           ;       Lcd_Command(0b10000000); //后7位为DDRAM地址0x00 
 04CD A680              lda #-128
 04CF 87                psha
 04D0 CD0000            jsr _Lcd_Command
 04D3 A701              ais #1
 04D5 95                tsx
 04D6           L120:
 04D6 A701              ais #1
 04D8                   .dbline 0 ; func end
 04D8 81                rts
 04D9           ;              i -> 0,X
 04D9           _sastimer::
 04D9 A7FF              ais #-1
 04DB 95                tsx
 04DC           ; }
 04DC           ; 
 04DC           ; 
 04DC           ; void sastimer(void){            //开始或关闭闹钟标志
 04DC 7F                clr ,X
 04DD 2013              bra L133
 04DF           L130:
 04DF 3F00              clr *__r0
 04E1 F6                lda ,X
 04E2 AB0F              add #<_timertem
 04E4 B700              sta *__r1
 04E6 B600              lda *__r0
 04E8 A90F              adc #>_timertem
 04EA B700              sta *__r0
 04EC 4F                clra
 04ED 5500              ldhx *__r0
 04EF F7                sta ,x
 04F0 95                tsx
 04F1           L131:
 04F1 7C                inc ,X
 04F2           L133:
 04F2           ; 	unsigned char i;
 04F2           ; 	for(i=0;i<4;i++)timertem[i]=0;
 04F2 F6                lda ,X
 04F3 A104              cmp #4
 04F5 25E8              blo L130
 04F7           ;       if(istimer==0x00){                //若关则开
 04F7 B601              lda *_istimer
 04F9 2612              bne L134
 04FB           ;               istimer=0x01;                   //标志开
 04FB A601              lda #1
 04FD B701              sta *_istimer
 04FF           ;               lcdshow1('*',0x4C);             //显示'*'
 04FF A64C              lda #76
 0501 87                psha
 0502 A62A              lda #42
 0504 87                psha
 0505 CD0000            jsr _lcdshow1
 0508 A702              ais #2
 050A 95                tsx
 050B           ;       }
 050B 2014              bra L135
 050D           L134:
 050D           ; 	else if(istimer==0x01){						//若开则关
 050D B601              lda *_istimer
 050F A101              cmp #1
 0511 260E              bne L136
 0513           ;               istimer=0x00;                   //标志关
 0513 3F01              clr *_istimer
 0515           ;               lcdshow1(' ',0x4C);             //无显示
 0515 A64C              lda #76
 0517 87                psha
 0518 A620              lda #32
 051A 87                psha
 051B CD0000            jsr _lcdshow1
 051E A702              ais #2
 0520 95                tsx
 0521           ;       }
 0521           L136:
 0521           L135:
 0521           L129:
 0521 A701              ais #1
 0523                   .dbline 0 ; func end
 0523 81                rts
 0524           ;              j -> 0,X
 0524           ;              i -> 1,X
 0524           _settimer::
 0524 A7FE              ais #-2
 0526 95                tsx
 0527           ; }
 0527           ; 
 0527           ; void settimer(void){                  //进入闹钟设置
 0527           ;       if(issettime==0){
 0527 B600              lda *_issettime
 0529 2703              beq X4
 052B CC0615            jmp L139
 052E           X4:
 052E           ; 		unsigned char i=0,j;
 052E 6F01              clr 1,X
 0530           ;               showtime=0x00;                          //时间显示位置0,不显示时间
 0530 3F02              clr *_showtime
 0532           ;               istimer=0x01;                           //开闹钟设置标志
 0532 A601              lda #1
 0534 B701              sta *_istimer
 0536           ;               lcdshow1('*',0x4C);                     //显示'*'
 0536 A64C              lda #76
 0538 87                psha
 0539 A62A              lda #42
 053B 87                psha
 053C CD0000            jsr _lcdshow1
 053F A702              ais #2
 0541 95                tsx
 0542           ;               show[i]='E';i++;                        //第一行不显示          
 0542 3F00              clr *__r0
 0544 E601              lda 1,X
 0546 AB44              add #<_show
 0548 B700              sta *__r1
 054A B600              lda *__r0
 054C A944              adc #>_show
 054E B700              sta *__r0
 0550 A645              lda #69
 0552 5500              ldhx *__r0
 0554 F7                sta ,x
 0555 95                tsx
 0556 6C01              inc 1,X
 0558 7F                clr ,X
 0559 CC05DA            jmp L144
 055C           L141:
 055C           ; 	 	for(j=0;j<3;j++){			
 055C           ; 		   show[i]=0x30+(timer[j]/10);i++;
 055C 3F00              clr *__r0

⌨️ 快捷键说明

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