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

📄 main.lis

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area data
 0000           _ch::
 0000                   .blkb 28
                        .area idata
 0000 706C65617365207365742074696D6521  .byte 'p,'l,'e,'a,'s,'e,32,'s,'e,'t,32,'t,'i,'m,'e,33
 0010 457072657373202742274500  .byte 'E,'p,'r,'e,'s,'s,32,39,'B,39,'E,0
                        .area data
 001C           _c::
 001C                   .blkb 19
                        .area idata
 001C 74696D65206F75742145476574207570  .byte 't,'i,'m,'e,32,'o,'u,'t,33,'E,'G,'e,'t,32,'u,'p
 002C 214500            .byte 33,'E,0
                        .area data
 002F           _init::
 002F                   .blkb 21
                        .area idata
 002F 303030302D30302D30304530303A3030  .byte 48,48,48,48,45,48,48,45,48,48,'E,48,48,58,48,48
 003F 3A30304500        .byte 58,48,48,'E,0
                        .area data
 0044           _show::
 0044                   .blkb 1
                        .area idata
 0044 20                .byte 32
                        .area data
 0045                   .blkb 31
                        .area idata
 0045 00000000000000000000      .word 0,0,0,0,0
 004F 00000000000000000000      .word 0,0,0,0,0
 0059 00000000000000000000      .word 0,0,0,0,0
 0063 00                .byte 0
                        .area data
                        .area text
 0000           _main::
 0000           ; /*-----------------------------------------------------*
 0000           ; *工 程 名:	                                
 0000           ; *硬件连接:                                
 0000           ; *程序描述: SD-HC08 模板生成                            
 0000           ; */
 0000           ; /*[头文件]*/
 0000           ; #include "GP32C.h"                //映像寄存器地址头文件
 0000           ; #include "clock.h" 
 0000           ; 
 0000           ; 
 0000           ; unsigned char ch[]={"please set time!Epress 'B'E"};
 0000           ; unsigned char c[]={"time out!EGet up!E"};
 0000           ; unsigned char init[]={"0000-00-00E00:00:00E"};
 0000           ; unsigned char show[32]={' '};
 0000           ; unsigned char timer[2];
 0000           ; unsigned char time[3];
 0000           ; unsigned int date[3];
 0000           ; unsigned char out;
 0000           ; unsigned char timertem[4];
 0000           ; unsigned char timetem[4];
 0000           ; unsigned char datetem[8];
 0000           ; unsigned char showtime;
 0000           ; unsigned char istimer;
 0000           ; unsigned char issettime;
 0000           ; /*[主函数]*/
 0000           ; void main(void){
 0000           ; 	asm("SEI");
 0000 9B                SEI
 0001           ;       showtime=0x01;istimer=0x00;issettime=0;//模式初始化
 0001 A601              lda #1
 0003 B702              sta *_showtime
 0005 3F01              clr *_istimer
 0007 3F00              clr *_issettime
 0009           ;       DDRD=0x01;out=1;                                        //闹钟接口初始化
 0009 A601              lda #1
 000B B707              sta 0x7
 000D A601              lda #1
 000F B713              sta *_out
 0011           ;       timer[0]=0;timer[1]=0;                          //闹钟\时间初始化
 0011 3F1D              clr *_timer
 0013 3F1E              clr *_timer+1
 0015           ;       time[0]=0;time[1]=0;time[2]=0;
 0015 3F1A              clr *_time
 0017 3F1B              clr *_time+1
 0019 3F1C              clr *_time+2
 001B           ;       date[0]=0;date[1]=0;date[2]=0;
 001B 3F15              clr *_date+1
 001D 3F14              clr *_date
 001F 3F17              clr *_date+2+1
 0021 3F16              clr *_date+2
 0023 3F19              clr *_date+4+1
 0025 3F18              clr *_date+4
 0027           ;       LcdInit();                                                      //LCD显示初始化
 0027 CD0000            jsr _LcdInit
 002A           ;       KB_Init();                                      //键盘初始化
 002A CD0000            jsr _KB_Init
 002D           ;       INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)  
 002D 131A              bclr #1,0x1a
 002F           ;       PTD=0;
 002F 3F03              clr 0x3
 0031           ;       Timer1init();                           //定时器初始化
 0031 CD0000            jsr _Timer1init
 0034 95                tsx
 0035           ;       asm("CLI");
 0035 9A                CLI
 0036 202C              bra L8
 0038           L7:
 0038           ; 	while(1){
 0038           ; 		if(timer[0]==time[0]&&timer[1]==time[1]&&istimer==0x01){//闹钟启动//开始响铃60秒
 0038 B61D              lda *_timer
 003A B11A              cmp *_time
 003C 2626              bne L10
 003E B61E              lda *_timer+1
 0040 B11B              cmp *_time+1
 0042 2620              bne L10
 0044 B601              lda *_istimer
 0046 A101              cmp #1
 0048 261A              bne L10
 004A           ;                  showtime=0;                                                  //关闭时间显示
 004A 3F02              clr *_showtime
 004C           ;                  lcdshow((unsigned char *)c);
 004C A61C              lda #<_c
 004E 87                psha
 004F A61C              lda #>_c
 0051 87                psha
 0052 CD0000            jsr _lcdshow
 0055 A702              ais #2
 0057           ;                  beep(2);                                                
 0057 A602              lda #2
 0059 87                psha
 005A CD07BF            jsr _beep
 005D A701              ais #1
 005F 95                tsx
 0060           ;                  showtime=1;                                          //开时间表显示
 0060 A601              lda #1
 0062 B702              sta *_showtime
 0064           ;               }
 0064           L10:
 0064           L8:
 0064 20D2              bra L7
 0066           X0:
 0066           L1:
 0066                   .dbline 0 ; func end
 0066 81                rts
 0067           ;             in -> 0,X
 0067           _isadddate1::
 0067 A7FF              ais #-1
 0069 95                tsx
 006A           ;       }
 006A           ; }
 006A           ; 
 006A           ; unsigned char isadddate1(void){//每月天数不一,判断对应月加1
 006A           ;    unsigned char in=0x00;                                             
 006A 7F                clr ,X
 006B           ;       if((date[1]==1||date[1]==3||date[1]==5||date[1]==7||date[1]==8||date[1]==10||date[1]==12)&&date[2]>=32)
 006B 5516              ldhx *_date+2
 006D 650001            cphx #1
 0070 95                tsx
 0071 2730              beq L30
 0073 5516              ldhx *_date+2
 0075 650003            cphx #3
 0078 95                tsx
 0079 2728              beq L30
 007B 5516              ldhx *_date+2
 007D 650005            cphx #5
 0080 95                tsx
 0081 2720              beq L30
 0083 5516              ldhx *_date+2
 0085 650007            cphx #7
 0088 95                tsx
 0089 2718              beq L30
 008B 5516              ldhx *_date+2
 008D 650008            cphx #8
 0090 95                tsx
 0091 2710              beq L30
 0093 5516              ldhx *_date+2
 0095 65000A            cphx #10
 0098 95                tsx
 0099 2708              beq L30
 009B 5516              ldhx *_date+2
 009D 65000C            cphx #12
 00A0 95                tsx
 00A1 260E              bne L15
 00A3           L30:
 00A3 5518              ldhx *_date+4
 00A5 650020            cphx #32
 00A8 95                tsx
 00A9 2506              blo L15
 00AB           ;               in=0x01;
 00AB A601              lda #1
 00AD F7                sta ,X
 00AE CC0128            jmp L16
 00B1           L15:
 00B1           ; 	else if((date[1]==4||date[1]==6||date[1]==9||date[1]==11)&&date[2]>=31)
 00B1 5516              ldhx *_date+2
 00B3 650004            cphx #4
 00B6 95                tsx
 00B7 2718              beq L40
 00B9 5516              ldhx *_date+2
 00BB 650006            cphx #6
 00BE 95                tsx
 00BF 2710              beq L40
 00C1 5516              ldhx *_date+2
 00C3 650009            cphx #9
 00C6 95                tsx
 00C7 2708              beq L40
 00C9 5516              ldhx *_date+2
 00CB 65000B            cphx #11
 00CE 95                tsx
 00CF 260D              bne L31
 00D1           L40:
 00D1 5518              ldhx *_date+4
 00D3 65001F            cphx #31
 00D6 95                tsx
 00D7 2505              blo L31
 00D9           ;               in=0x01;
 00D9 A601              lda #1
 00DB F7                sta ,X
 00DC 204A              bra L32
 00DE           L31:
 00DE           ; 	else if((date[1]==2&&date[0]%4==0)&&date[2]==29)in=0x01;
 00DE 5516              ldhx *_date+2
 00E0 650002            cphx #2
 00E3 95                tsx
 00E4 261E              bne L41
 00E6 B615              lda *_date+1
 00E8 A403              and #3
 00EA B700              sta *__r1
 00EC 4F                clra
 00ED B700              sta *__r0
 00EF 5500              ldhx *__r0
 00F1 650000            cphx #0
 00F4 95                tsx
 00F5 260D              bne L41
 00F7 5518              ldhx *_date+4
 00F9 65001D            cphx #29
 00FC 95                tsx
 00FD 2605              bne L41
 00FF A601              lda #1
 0101 F7                sta ,X
 0102 2024              bra L42
 0104           L41:
 0104           ; 	else if((date[1]==2&&date[0]%4!=0)&&date[2]==28)in=0x01;
 0104 5516              ldhx *_date+2
 0106 650002            cphx #2
 0109 95                tsx
 010A 261C              bne L45
 010C B615              lda *_date+1
 010E A403              and #3
 0110 B700              sta *__r1
 0112 4F                clra
 0113 B700              sta *__r0
 0115 5500              ldhx *__r0
 0117 650000            cphx #0
 011A 95                tsx
 011B 270B              beq L45
 011D 5518              ldhx *_date+4
 011F 65001C            cphx #28
 0122 95                tsx
 0123 2603              bne L45
 0125 A601              lda #1
 0127 F7                sta ,X
 0128           L45:
 0128           L42:
 0128           L32:
 0128           L16:
 0128           ; 	return in;
 0128 F6                lda ,X
 0129           L14:
 0129 A701              ais #1
 012B                   .dbline 0 ; func end
 012B 81                rts
 012C           ;             in -> 0,X
 012C           _addtime::
 012C A7FF              ais #-1
 012E 95                tsx
 012F           ; }
 012F           ; void addtime(void){                           //日期,时间累加函数
 012F           ;    unsigned char in;
 012F           ;    time[2]++;             //秒数加1
 012F 3C1C              inc *_time+2
 0131           ;    if (time[2]>=60){       //秒数未增加到60,转
 0131 B61C              lda *_time+2
 0133 A13C              cmp #60
 0135 2504              blo L51
 0137           ;       time[2]=0; time[1]++;  //秒数增加到60,清0,分钟数加1
 0137 3F1C              clr *_time+2
 0139 3C1B              inc *_time+1
 013B           ;    }
 013B           L51:
 013B           ;    if (time[1]>=60){          //分钟数未增到60,转
 013B B61B              lda *_time+1
 013D A13C              cmp #60
 013F 250D              blo L56
 0141           ;       time[1]=0; time[0]++;  //分钟数增加到60,清0,小时数加1
 0141 3F1B              clr *_time+1
 0143 3C1A              inc *_time
 0145           ;       beep(1);
 0145 A601              lda #1
 0147 87                psha
 0148 CD07BF            jsr _beep
 014B A701              ais #1
 014D 95                tsx
 014E           ;    }
 014E           L56:
 014E           ;    if (time[0]>=24){          //小时数未增到24,转
 014E B61A              lda *_time
 0150 A118              cmp #24
 0152 250E              blo L60
 0154           ;       time[0]=0;             //时数增加到24,清0
 0154 3F1A              clr *_time
 0156           ;       date[2]++;
 0156 B619              lda *_date+4+1
 0158 AB01              add #1
 015A B719              sta *_date+4+1
 015C B618              lda *_date+4
 015E A900              adc #0
 0160 B718              sta *_date+4
 0162           ;    }
 0162           L60:
 0162           ;    in=isadddate1();
 0162 CD0067            jsr _isadddate1
 0165 95                tsx
 0166 B700              sta *__r1
 0168 F7                sta ,X
 0169           ;    if(in==0x01){                                              //满足月份加1
 0169 A101              cmp #1
 016B 2612              bne L63
 016D           ;       date[1]++;                                              //月份加1
 016D B617              lda *_date+2+1
 016F AB01              add #1
 0171 B717              sta *_date+2+1
 0173 B616              lda *_date+2
 0175 A900              adc #0
 0177 B716              sta *_date+2
 0179           ;       date[2]=1;                                              //天回1
 0179 6E0018            mov #0,*_date+4
 017C 6E0119            mov #1,*_date+4+1
 017F           ;    }
 017F           L63:
 017F           ;    if(date[1]>=13){					//月大于12
 017F 5516              ldhx *_date+2
 0181 65000D            cphx #13
 0184 95                tsx
 0185 2512              blo L67
 0187           ;         date[0]++;                                    //年加1,月回1
 0187 B615              lda *_date+1
 0189 AB01              add #1
 018B B715              sta *_date+1
 018D B614              lda *_date
 018F A900              adc #0
 0191 B714              sta *_date
 0193           ;         date[1]=1;
 0193 6E0016            mov #0,*_date+2
 0196 6E0117            mov #1,*_date+2+1
 0199           ;    }
 0199           L67:
 0199           L49:
 0199 A701              ais #1
 019B                   .dbline 0 ; func end
 019B 81                rts

⌨️ 快捷键说明

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