?? main.s
字號:
.module main.c
.area lit
L2:
.byte 49,46,32,'S,'e,'t,32,'T,'i,'m,'e,0
L3:
.byte 50,46,32,'S,'e,'t,32,'A,'l,'a,'r,'m,0
L4:
.byte 49,46,32,'O,'p,'e,'n,32,'A,'l,'a,'r,'m,0
L5:
.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
_main::
ais #-60
tsx
; /*-----------------------------------------------------*
; *工 程 名:clock
; *硬件連接:
; *程序描述:
; */
; /*[頭文件]*/
; #include "GP32C.h" //映像寄存器地址頭文件
; #include "KB.h" //鍵盤中斷頭文件
; #define Light_P PTA //蜂鳴器接在PTA口
; #define Light_D DDRA //相應(yīng)的方向寄存器
; #define Light_Pin 1 //蜂鳴器所在的引腳
; /*[函數(shù)聲明]*/
; //在LCD第m行第n列顯示一個(gè)字符
; extern void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
; extern void Lcd_Command(unsigned char cmd); //命令執(zhí)行子程序
; extern void Lcdshow(unsigned char temp[]) ; //顯示時(shí)間
; extern void Timer1init(void); //定時(shí)器1初始化
; extern void LcdInit(void); //Lcd初始化子程序
; extern void LcdShowCursor(unsigned char m,unsigned char n); //顯示光標(biāo)在第m行,第n列
; //顯示大小為n字符數(shù)組在第m行
; extern void LcdShowString(unsigned char str[],unsigned char n,unsigned char m);
; extern void Delay(void); //延時(shí)
; //將輸入的鍵值傳送到相應(yīng)位置的位
; extern void Transmission(unsigned char Keyvalue,unsigned char temp[],unsigned char m,unsigned char n);
; extern unsigned char Discriminant(unsigned char key); //判斷按下的鍵是否數(shù)字鍵
; extern void Changetime(int temp1[],unsigned char temp2[]); //將數(shù)組temp1拆分存儲到數(shù)組temp2
; extern void Change(void); //將數(shù)組time組合存儲到數(shù)組Tdate
; extern void Change2(void); //將數(shù)組alarm組合存儲到數(shù)組Tdate2
; extern void Controle(void); //控制時(shí)鐘的日期時(shí)間合法
; extern void Controle2(void); //控制鬧鐘的日期時(shí)間合法
; /*全局變量聲明*/
; unsigned char time[14]; //存放時(shí)鐘年、月、日、時(shí)、分、秒
; int Tdate[3]; //存放時(shí)鐘年、月、日
; unsigned char Ttime[3]; //存放時(shí)鐘時(shí)、分、秒
; unsigned char alarm[14]; //存放鬧鐘的年、月、日、時(shí)、分、秒
; int Tdate2[3]; //存放鬧鐘年、月、日
; unsigned char Ttime2[3]; //存放鬧鐘時(shí)、分、秒
; unsigned char Key; //存放按下鍵的定義值
; unsigned char k; //光標(biāo)向右移動(dòng)的次數(shù)
; unsigned char l; //光標(biāo)向下移動(dòng)的次數(shù)
; unsigned char o; //鬧鐘功能標(biāo)志位,等于1時(shí)開,等于0時(shí)關(guān)
; /*[主函數(shù)]*/
; void main()
; {
; unsigned char i;
; unsigned char j;
; unsigned char Keyvalue;
; unsigned char x;
; unsigned char y;
; unsigned char t;
; unsigned char str1[12]="1. Set Time";
aix #13
sthx *__r0
tsx
lda #12
psha
clra
psha
lda #<L2
psha
lda #>L2
lda *__r1
psha
lda *__r0
psha
jsr __asgnblk
ais #6
; unsigned char str2[13]="2. Set Alarm";
sthx *__r0
lda #13
psha
clra
psha
lda #<L3
psha
lda #>L3
psha
lda *__r1
psha
lda *__r0
psha
jsr __asgnblk
ais #6
; unsigned char str3[14]="1. Open Alarm";
aix #44
sthx *__r0
tsx
lda #14
psha
clra
psha
lda #<L4
psha
lda #>L4
psha
lda *__r1
psha
lda *__r0
psha
jsr __asgnblk
ais #6
; unsigned char str4[15]="2. Close Alarm";
aix #29
sthx *__r0
lda #15
psha
clra
psha
lda #<L5
psha
lda #>L5
psha
lda *__r1
psha
lda *__r0
psha
jsr __asgnblk
ais #6
; asm("SEI"); //關(guān)總中斷
SEI
; //[I/O初始化]
; Light_D|=1<<Light_Pin; //令蜂鳴器引腳為輸出
bset #1,0x4
; Light_P|=1<<Light_Pin; //初始時(shí),蜂鳴器"停"
bset #1,0
; Timer1init(); //調(diào)定時(shí)器1初始化子程序
jsr _Timer1init
; KB_Init();
jsr _KB_Init
; INTKBSCR&= ~(1<<IntBit); //開放鍵盤中斷(IMASKk=1)
bclr #1,0x1a
; asm("CLI"); //開總中斷
CLI
;
; //賦初時(shí)鐘始值2007年6月1日12點(diǎn)0分0秒;鬧鐘初始值2007年6月1日0時(shí)0分0秒
; Tdate[0]=2007;Tdate[1]=6;Tdate[2]=1;Ttime[0]=12;Ttime[1]=0;Ttime[2]=0;
mov #7,*_Tdate
mov #-41,*_Tdate+1
mov #0,*_Tdate+2
mov #6,*_Tdate+2+1
mov #0,*_Tdate+4
mov #1,*_Tdate+4+1
lda #12
sta *_Ttime
clr *_Ttime+1
clr *_Ttime+2
; Tdate2[0]=2007;Tdate2[1]=6;Tdate2[2]=1; Ttime2[0]=0;Ttime2[1]=0;Ttime2[2]=0;
mov #7,*_Tdate2
mov #-41,*_Tdate2+1
mov #0,*_Tdate2+2
mov #6,*_Tdate2+2+1
mov #0,*_Tdate2+4
mov #1,*_Tdate2+4+1
clr *_Ttime2
clr *_Ttime2+1
clr *_Ttime2+2
; Changetime((int *)Tdate,(unsigned char *)Ttime);
lda #<_Ttime
psha
lda #>_Ttime
psha
lda #<_Tdate
psha
lda #>_Tdate
psha
jsr _Changetime
ais #4
tsx
; o=0; //初始時(shí)關(guān)鬧鐘
clr *_o
; i=Ttime[2];y=time[9];
lda *_Ttime+2
sta 26,X
lda *_time+9
sta 25,X
jmp L18
L17:
;
;
; BEGING:
; while(1)
; {
; j=Ttime[2];
lda *_Ttime+2
sta 28,X
; if (i!=j) //秒增1
lda 26,X
cmp 28,X
beq L21
; {
; Lcdshow((unsigned char *)time); //顯示日期時(shí)間
lda #<_time
psha
lda #>_time
psha
jsr _Lcdshow
ais #2
tsx
; if(o==1) LcdshowCharacter('A',1,1); //左上角字符A標(biāo)志開鬧鐘功能
lda *_o
cmp #1
bne L23
lda #1
psha
psha
lda #65
psha
jsr _LcdshowCharacter
ais #3
tsx
L23:
; if(o==0) LcdshowCharacter(' ',1,1); //關(guān)鬧鐘功能時(shí)消去左上角字符A
lda *_o
bne L25
lda #1
psha
psha
lda #32
psha
jsr _LcdshowCharacter
ais #3
tsx
L25:
; i=j;
lda 28,X
sta 26,X
; }
L21:
; x=time[9];
lda *_time+9
sta 27,X
; if(y!=x) //整點(diǎn)報(bào)時(shí)
lda 25,X
cmp 27,X
beq L28
; { for(t=0;t<3;t++) //報(bào)時(shí)三響
clr 58,X
bra L33
L30:
bset #1,0
jsr _Delay
bclr #1,0
jsr _Delay
tsx
L31:
inc 58,X
L33:
lda 58,X
cmp #3
blo L30
; { Light_P|=1<<Light_Pin; //蜂鳴器“鳴”
; Delay(); //延時(shí)
; Light_P&=~(1<<Light_Pin); //蜂鳴器“停”
; Delay(); //延時(shí)
; }
; y=x;
lda 27,X
sta 25,X
; }
L28:
; if(Tdate[0]==Tdate2[0]&&Tdate[1]==Tdate2[1]&&Tdate[2]==Tdate2[2]&& //鬧鐘預(yù)設(shè)時(shí)間響
ldhx *_Tdate
cphx *_Tdate2
tsx
bne L34
ldhx *_Tdate+2
cphx *_Tdate2+2
tsx
bne L34
ldhx *_Tdate+4
cphx *_Tdate2+4
tsx
bne L34
lda *_Ttime
cmp *_Ttime2
bne L34
lda *_Ttime+1
cmp *_Ttime2+1
bne L34
lda *_Ttime+2
cmp *_Ttime2+2
bne L34
; Ttime[0]==Ttime2[0]&&Ttime[1]==Ttime2[1]&&Ttime[2]==Ttime2[2])
; { for(t=0;t<15;t++) //鬧鐘
clr 58,X
bra L47
L44:
bset #1,0
jsr _Delay
bclr #1,0
jsr _Delay
tsx
L45:
inc 58,X
L47:
lda 58,X
cmp #15
blo L44
; { Light_P|=1<<Light_Pin; //蜂鳴器“鳴”
; Delay(); //延時(shí)
; Light_P&=~(1<<Light_Pin); //蜂鳴器“停”
; Delay(); //延時(shí)
; }
; }
L34:
; if(Key=='A') //彈出菜單
lda *_Key
cmp #65
beq X4
jmp L48
X4:
; {
L50:
; MENU: LcdShowString((unsigned char *)str1,11,1); //顯示菜單:1. Set Time;
lda #1
psha
lda #11
psha
aix #13
pshx
pshh
jsr _LcdShowString
ais #4
tsx
; LcdShowString((unsigned char *)str2,12,2); // 2. Set Alarm
lda #2
psha
lda #12
psha
pshx
pshh
jsr _LcdShowString
ais #4
tsx
; Key=0;
clr *_Key
jmp L52
L51:
; while(1)
; { if(Key=='B') //返回
lda *_Key
cmp #66
bne L54
; { Key=0;
clr *_Key
; goto BEGING;
jmp L18
L54:
; }
; if(Key=='1') //選擇子菜單1
lda *_Key
cmp #49
beq X5
jmp L56
X5:
; { Lcdshow((unsigned char *)time);
lda #<_time
psha
lda #>_time
psha
jsr _Lcdshow
ais #2
; LcdShowCursor(1,4); //光標(biāo)初始位置(1,4),第一行第四列
lda #4
psha
lda #1
psha
jsr _LcdShowCursor
ais #2
tsx
; k=1;l=1;
lda #1
sta *_k
lda #1
sta *_l
; Key=0;
clr *_Key
jmp L59
L58:
; while(1)
; { if(Key=='#') //光標(biāo)右移
lda *_Key
cmp #35
bne L61
; { ++k;
inc *_k
; if(l%2==0) //現(xiàn)在光標(biāo)在第一行
lda *_l
ldx #2
clrh
div
pshh
pula
tsx
tsta
bne L63
lda *_k
cmp #4
beq L67
lda *_k
cmp #7
bne L65
L67:
; { if(k==4||k==7) ++k;
inc *_k
L65:
; if(k>9) k=0; //現(xiàn)在光標(biāo)在末端
lda *_k
cmp #9
bls L68
clr *_k
L68:
; LcdShowCursor((1+l),(4+k));
lda *_k
add #4
psha
lda *_l
add #1
psha
jsr _LcdShowCursor
ais #2
tsx
; }
bra L64
L63:
lda *_k
cmp #3
beq L72
lda *_k
cmp #6
bne L70
L72:
; else //現(xiàn)在光標(biāo)在第二行
; { if(k==3||k==6) ++k;
inc *_k
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -