?? main.lis
字號:
.module main.c
.area lit
0000 L2:
0000 312E205365742054696D6500 .byte 49,46,32,'S,'e,'t,32,'T,'i,'m,'e,0
000C L3:
000C 322E2053657420416C61726D00 .byte 50,46,32,'S,'e,'t,32,'A,'l,'a,'r,'m,0
0019 L4:
0019 312E204F70656E20416C61726D00 .byte 49,46,32,'O,'p,'e,'n,32,'A,'l,'a,'r,'m,0
0027 L5:
0027 322E20436C6F736520416C61726D00 .byte 50,46,32,'C,'l,'o,'s,'e,32,'A,'l,'a,'r,'m,0
.area text
; str2 -> 0,X
; str1 -> 13,X
; y -> 25,X
; i -> 26,X
; x -> 27,X
; j -> 28,X
; str4 -> 29,X
; str3 -> 44,X
; t -> 58,X
; Keyvalue -> 59,X
0000 _main::
0000 A7C4 ais #-60
0002 95 tsx
0003 ; /*-----------------------------------------------------*
0003 ; *工 程 名:clock
0003 ; *硬件連接:
0003 ; *程序描述:
0003 ; */
0003 ; /*[頭文件]*/
0003 ; #include "GP32C.h" //映像寄存器地址頭文件
0003 ; #include "KB.h" //鍵盤中斷頭文件
0003 ; #define Light_P PTA //蜂鳴器接在PTA口
0003 ; #define Light_D DDRA //相應的方向寄存器
0003 ; #define Light_Pin 1 //蜂鳴器所在的引腳
0003 ; /*[函數聲明]*/
0003 ; //在LCD第m行第n列顯示一個字符
0003 ; extern void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
0003 ; extern void Lcd_Command(unsigned char cmd); //命令執行子程序
0003 ; extern void Lcdshow(unsigned char temp[]) ; //顯示時間
0003 ; extern void Timer1init(void); //定時器1初始化
0003 ; extern void LcdInit(void); //Lcd初始化子程序
0003 ; extern void LcdShowCursor(unsigned char m,unsigned char n); //顯示光標在第m行,第n列
0003 ; //顯示大小為n字符數組在第m行
0003 ; extern void LcdShowString(unsigned char str[],unsigned char n,unsigned char m);
0003 ; extern void Delay(void); //延時
0003 ; //將輸入的鍵值傳送到相應位置的位
0003 ; extern void Transmission(unsigned char Keyvalue,unsigned char temp[],unsigned char m,unsigned char n);
0003 ; extern unsigned char Discriminant(unsigned char key); //判斷按下的鍵是否數字鍵
0003 ; extern void Changetime(int temp1[],unsigned char temp2[]); //將數組temp1拆分存儲到數組temp2
0003 ; extern void Change(void); //將數組time組合存儲到數組Tdate
0003 ; extern void Change2(void); //將數組alarm組合存儲到數組Tdate2
0003 ; extern void Controle(void); //控制時鐘的日期時間合法
0003 ; extern void Controle2(void); //控制鬧鐘的日期時間合法
0003 ; /*全局變量聲明*/
0003 ; unsigned char time[14]; //存放時鐘年、月、日、時、分、秒
0003 ; int Tdate[3]; //存放時鐘年、月、日
0003 ; unsigned char Ttime[3]; //存放時鐘時、分、秒
0003 ; unsigned char alarm[14]; //存放鬧鐘的年、月、日、時、分、秒
0003 ; int Tdate2[3]; //存放鬧鐘年、月、日
0003 ; unsigned char Ttime2[3]; //存放鬧鐘時、分、秒
0003 ; unsigned char Key; //存放按下鍵的定義值
0003 ; unsigned char k; //光標向右移動的次數
0003 ; unsigned char l; //光標向下移動的次數
0003 ; unsigned char o; //鬧鐘功能標志位,等于1時開,等于0時關
0003 ; /*[主函數]*/
0003 ; void main()
0003 ; {
0003 ; unsigned char i;
0003 ; unsigned char j;
0003 ; unsigned char Keyvalue;
0003 ; unsigned char x;
0003 ; unsigned char y;
0003 ; unsigned char t;
0003 ; unsigned char str1[12]="1. Set Time";
0003 AF0D aix #13
0005 3500 sthx *__r0
0007 95 tsx
0008 A60C lda #12
000A 87 psha
000B 4F clra
000C 87 psha
000D A600 lda #<L2
000F 87 psha
0010 A600 lda #>L2
0012 87 psha
0013 B600 lda *__r1
0015 87 psha
0016 B600 lda *__r0
0018 87 psha
0019 CD0000 jsr __asgnblk
001C A706 ais #6
001E ; unsigned char str2[13]="2. Set Alarm";
001E 3500 sthx *__r0
0020 A60D lda #13
0022 87 psha
0023 4F clra
0024 87 psha
0025 A60C lda #<L3
0027 87 psha
0028 A60C lda #>L3
002A 87 psha
002B B600 lda *__r1
002D 87 psha
002E B600 lda *__r0
0030 87 psha
0031 CD0000 jsr __asgnblk
0034 A706 ais #6
0036 ; unsigned char str3[14]="1. Open Alarm";
0036 AF2C aix #44
0038 3500 sthx *__r0
003A 95 tsx
003B A60E lda #14
003D 87 psha
003E 4F clra
003F 87 psha
0040 A619 lda #<L4
0042 87 psha
0043 A619 lda #>L4
0045 87 psha
0046 B600 lda *__r1
0048 87 psha
0049 B600 lda *__r0
004B 87 psha
004C CD0000 jsr __asgnblk
004F A706 ais #6
0051 ; unsigned char str4[15]="2. Close Alarm";
0051 AF1D aix #29
0053 3500 sthx *__r0
0055 A60F lda #15
0057 87 psha
0058 4F clra
0059 87 psha
005A A627 lda #<L5
005C 87 psha
005D A627 lda #>L5
005F 87 psha
0060 B600 lda *__r1
0062 87 psha
0063 B600 lda *__r0
0065 87 psha
0066 CD0000 jsr __asgnblk
0069 A706 ais #6
006B ; asm("SEI"); //關總中斷
006B 9B SEI
006C ; //[I/O初始化]
006C ; Light_D|=1<<Light_Pin; //令蜂鳴器引腳為輸出
006C 1204 bset #1,0x4
006E ; Light_P|=1<<Light_Pin; //初始時,蜂鳴器"停"
006E 1200 bset #1,0
0070 ; Timer1init(); //調定時器1初始化子程序
0070 CD0000 jsr _Timer1init
0073 ; KB_Init();
0073 CD0000 jsr _KB_Init
0076 ; INTKBSCR&= ~(1<<IntBit); //開放鍵盤中斷(IMASKk=1)
0076 131A bclr #1,0x1a
0078 ; asm("CLI"); //開總中斷
0078 9A CLI
0079 ;
0079 ; //賦初時鐘始值2007年6月1日12點0分0秒;鬧鐘初始值2007年6月1日0時0分0秒
0079 ; Tdate[0]=2007;Tdate[1]=6;Tdate[2]=1;Ttime[0]=12;Ttime[1]=0;Ttime[2]=0;
0079 6E071E mov #7,*_Tdate
007C 6ED71F mov #-41,*_Tdate+1
007F 6E0020 mov #0,*_Tdate+2
0082 6E0621 mov #6,*_Tdate+2+1
0085 6E0022 mov #0,*_Tdate+4
0088 6E0123 mov #1,*_Tdate+4+1
008B A60C lda #12
008D B71B sta *_Ttime
008F 3F1C clr *_Ttime+1
0091 3F1D clr *_Ttime+2
0093 ; Tdate2[0]=2007;Tdate2[1]=6;Tdate2[2]=1; Ttime2[0]=0;Ttime2[1]=0;Ttime2[2]=0;
0093 6E0707 mov #7,*_Tdate2
0096 6ED708 mov #-41,*_Tdate2+1
0099 6E0009 mov #0,*_Tdate2+2
009C 6E060A mov #6,*_Tdate2+2+1
009F 6E000B mov #0,*_Tdate2+4
00A2 6E010C mov #1,*_Tdate2+4+1
00A5 3F04 clr *_Ttime2
00A7 3F05 clr *_Ttime2+1
00A9 3F06 clr *_Ttime2+2
00AB ; Changetime((int *)Tdate,(unsigned char *)Ttime);
00AB A61B lda #<_Ttime
00AD 87 psha
00AE A61B lda #>_Ttime
00B0 87 psha
00B1 A61E lda #<_Tdate
00B3 87 psha
00B4 A61E lda #>_Tdate
00B6 87 psha
00B7 CD0000 jsr _Changetime
00BA A704 ais #4
00BC 95 tsx
00BD ; o=0; //初始時關鬧鐘
00BD 3F00 clr *_o
00BF ; i=Ttime[2];y=time[9];
00BF B61D lda *_Ttime+2
00C1 E71A sta 26,X
00C3 B62D lda *_time+9
00C5 E719 sta 25,X
00C7 CC043B jmp L18
00CA L17:
00CA ;
00CA ;
00CA ; BEGING:
00CA ; while(1)
00CA ; {
00CA ; j=Ttime[2];
00CA B61D lda *_Ttime+2
00CC E71C sta 28,X
00CE ; if (i!=j) //秒增1
00CE E61A lda 26,X
00D0 E11C cmp 28,X
00D2 2734 beq L21
00D4 ; {
00D4 ; Lcdshow((unsigned char *)time); //顯示日期時間
00D4 A624 lda #<_time
00D6 87 psha
00D7 A624 lda #>_time
00D9 87 psha
00DA CD0000 jsr _Lcdshow
00DD A702 ais #2
00DF 95 tsx
00E0 ; if(o==1) LcdshowCharacter('A',1,1); //左上角字符A標志開鬧鐘功能
00E0 B600 lda *_o
00E2 A101 cmp #1
00E4 260D bne L23
00E6 A601 lda #1
00E8 87 psha
00E9 87 psha
00EA A641 lda #65
00EC 87 psha
00ED CD0000 jsr _LcdshowCharacter
00F0 A703 ais #3
00F2 95 tsx
00F3 L23:
00F3 ; if(o==0) LcdshowCharacter(' ',1,1); //關鬧鐘功能時消去左上角字符A
00F3 B600 lda *_o
00F5 260D bne L25
00F7 A601 lda #1
00F9 87 psha
00FA 87 psha
00FB A620 lda #32
00FD 87 psha
00FE CD0000 jsr _LcdshowCharacter
0101 A703 ais #3
0103 95 tsx
0104 L25:
0104 ; i=j;
0104 E61C lda 28,X
0106 E71A sta 26,X
0108 ; }
0108 L21:
0108 ; x=time[9];
0108 B62D lda *_time+9
010A E71B sta 27,X
010C ; if(y!=x) //整點報時
010C E619 lda 25,X
010E E11B cmp 27,X
0110 271B beq L28
0112 ; { for(t=0;t<3;t++) //報時三響
0112 6F3A clr 58,X
0114 200D bra L33
0116 L30:
0116 1200 bset #1,0
0118 CD0000 jsr _Delay
011B 1300 bclr #1,0
011D CD0000 jsr _Delay
0120 95 tsx
0121 L31:
0121 6C3A inc 58,X
0123 L33:
0123 E63A lda 58,X
0125 A103 cmp #3
0127 25ED blo L30
0129 ; { Light_P|=1<<Light_Pin; //蜂鳴器“鳴”
0129 ; Delay(); //延時
0129 ; Light_P&=~(1<<Light_Pin); //蜂鳴器“?!? 0129 ; Delay(); //延時
0129 ; }
0129 ; y=x;
0129 E61B lda 27,X
012B E719 sta 25,X
012D ; }
012D L28:
012D ; if(Tdate[0]==Tdate2[0]&&Tdate[1]==Tdate2[1]&&Tdate[2]==Tdate2[2]&& //鬧鐘預設時間響
012D 551E ldhx *_Tdate
012F 7507 cphx *_Tdate2
0131 95 tsx
0132 2637 bne L34
0134 5520 ldhx *_Tdate+2
0136 7509 cphx *_Tdate2+2
0138 95 tsx
0139 2630 bne L34
013B 5522 ldhx *_Tdate+4
013D 750B cphx *_Tdate2+4
013F 95 tsx
0140 2629 bne L34
0142 B61B lda *_Ttime
0144 B104 cmp *_Ttime2
0146 2623 bne L34
0148 B61C lda *_Ttime+1
014A B105 cmp *_Ttime2+1
014C 261D bne L34
014E B61D lda *_Ttime+2
0150 B106 cmp *_Ttime2+2
0152 2617 bne L34
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -