📄 main.lis
字号:
.module main.c
.area data
0000 _k::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data
0001 _l::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data
0002 _Alarm_Flag::
0002 .blkb 1
.area idata
0002 01 .byte 1
.area data
.area text
; u2 -> 0,X
; u1 -> 1,X
0000 _delay::
0000 A7FE ais #-2
0002 95 tsx
0003 6F01 clr 1,X
0005 2002 bra L5
0007 L2:
0007 L3:
0007 6C01 inc 1,X
0009 L5:
0009 ; /*-----------------------------------------------------*
0009 ; *工 程 名:
0009 ; *硬件连接:
0009 ; *程序描述: SD-HC08 模板生成
0009 ; */
0009 ; /*[头文件]*/
0009 ; #include "GP32C.h" //映像寄存器地址头文件
0009 ; #include "KB.h" //键盘中断头文件
0009 ; #define PTC1 1
0009 ; /*[函数声明]*/
0009 ; //在LCD第m行第n列显示一个字符
0009 ; extern void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
0009 ; extern void Lcd_Command(unsigned char cmd); //命令执行子程序
0009 ; extern void Lcdshowtime(void); //显示时钟
0009 ; extern void Lcdshowalarm(void); //显示闹钟
0009 ; extern unsigned char ChangeASCII(unsigned char x); //转换数值x为对应的ASCII码
0009 ; extern void Timer1init(void); //定时器1初始化
0009 ; extern void LcdInit(void); //Lcd初始化子程序
0009 ; extern unsigned char KB_Def(unsigned char KB_valve); //键值转为定义值函数
0009 ; extern void MoveCursor(unsigned char m,unsigned char n); //移到光标到第m行,第n列
0009 ; extern void LcdShowCursor(void); //开光标显示,闪烁
0009 ; extern unsigned char GetKey(void); //判断并获得按下键的定义值
0009 ; extern void LcdShowMenu(void); //显示菜单
0009 ; extern void LcdShowCursor(void); //开光标显示,闪烁
0009 ; //将输入的键值传送到相应位置的位
0009 ; void Transmission(unsigned char Keyvalue,unsigned char temp[],unsigned char m,unsigned char n);
0009 ; extern unsigned char Discriminant(unsigned char key); //判断按下的键是否数字键
0009 ; /*定义常量变量*/
0009 ; unsigned char time[14]; //存放时钟年、月、日、时、分、秒
0009 ; unsigned char alarm[14]; //存放闹钟的年、月、日、时、分、秒
0009 ; unsigned char Key; //存放按下键的定义值
0009 ; unsigned char k=0; //光标向右移动的次数
0009 ; unsigned char l=0; //光标向下移动的次数
0009 ; unsigned char t;
0009 ; unsigned char Alarm_Flag=1;
0009 ;
0009 ; void delay(void)
0009 ; {
0009 ; unsigned char u1,u2;
0009 ; for(u1=0;u1<200;u1++);
0009 E601 lda 1,X
000B A1C8 cmp #-56
000D 25F8 blo L2
000F 7F clr ,X
0010 2001 bra L9
0012 L6:
0012 L7:
0012 7C inc ,X
0013 L9:
0013 ; for(u2=0;u2<220;u2++);
0013 F6 lda ,X
0014 A1DC cmp #-36
0016 25FA blo L6
0018 L1:
0018 A702 ais #2
001A .dbline 0 ; func end
001A 81 rts
001B ; i -> 0,X
001B ; j -> 1,X
001B ; n -> 2,X
001B ; h -> 3,X
001B ; Keyvalue -> 4,X
001B _main::
001B A7FB ais #-5
001D 95 tsx
001E ; }
001E ;
001E ; /*[主函数]*/
001E ; void main()
001E ; {
001E ; unsigned char i,n,h;
001E ; unsigned char j;
001E ; unsigned char Keyvalue;
001E ;
001E ; asm("SEI"); //关总中断
001E 9B SEI
001F ; Timer1init(); //调定时器1初始化子程序
001F CD0000 jsr _Timer1init
0022 ; KB_Init();
0022 CD0000 jsr _KB_Init
0025 95 tsx
0026 ; INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)
0026 131A bclr #1,0x1a
0028 ; asm("CLI"); //开总中断
0028 9A CLI
0029 ;
0029 ; //赋时钟初始值2007年06月06日5点59分30秒;闹钟初始值2007年06月05日5时59分40秒
0029 ; time[0]=alarm[0]=2; time[1]=alarm[1]=0; time[2]=alarm[2]=0; time[3]=alarm[3]=7;
0029 A602 lda #2
002B B702 sta *_alarm
002D A602 lda #2
002F B710 sta *_time
0031 3F03 clr *_alarm+1
0033 3F11 clr *_time+1
0035 3F04 clr *_alarm+2
0037 3F12 clr *_time+2
0039 A607 lda #7
003B B705 sta *_alarm+3
003D A607 lda #7
003F B713 sta *_time+3
0041 ; time[4]=alarm[4]=0; time[5]=alarm[5]=6; time[6]=alarm[6]=0; time[7]=alarm[7]=6;
0041 3F06 clr *_alarm+4
0043 3F14 clr *_time+4
0045 A606 lda #6
0047 B707 sta *_alarm+5
0049 A606 lda #6
004B B715 sta *_time+5
004D 3F08 clr *_alarm+6
004F 3F16 clr *_time+6
0051 A606 lda #6
0053 B709 sta *_alarm+7
0055 A606 lda #6
0057 B717 sta *_time+7
0059 ; time[8]=0;alarm[8]=0; time[9]=5; alarm[9]=5;time[10]=5; alarm[10]=5;time[11]=9;
0059 3F18 clr *_time+8
005B 3F0A clr *_alarm+8
005D A605 lda #5
005F B719 sta *_time+9
0061 A605 lda #5
0063 B70B sta *_alarm+9
0065 A605 lda #5
0067 B71A sta *_time+10
0069 A605 lda #5
006B B70C sta *_alarm+10
006D A609 lda #9
006F B71B sta *_time+11
0071 ; alarm[11]=9;time[12]=3;alarm[12]=4; time[13]=0; alarm[13]=0;
0071 A609 lda #9
0073 B70D sta *_alarm+11
0075 A603 lda #3
0077 B71C sta *_time+12
0079 A604 lda #4
007B B70E sta *_alarm+12
007D 3F1D clr *_time+13
007F 3F0F clr *_alarm+13
0081 ; i=time[13];
0081 B61D lda *_time+13
0083 F7 sta ,X
0084 ; DDRC=0xFF;
0084 A6FF lda #-1
0086 B706 sta 0x6
0088 CC032C jmp L40
008B L39:
008B ;
008B ; BEGING:
008B ; while(1)
008B ; {
008B ; j=time[13];
008B B61D lda *_time+13
008D E701 sta 1,X
008F ; if (i!=j) //时间有更新
008F F6 lda ,X
0090 E101 cmp 1,X
0092 2707 beq L43
0094 ; {
0094 ; Lcdshowtime(); //显示日期时间
0094 CD0000 jsr _Lcdshowtime
0097 95 tsx
0098 ; i=j;
0098 E601 lda 1,X
009A F7 sta ,X
009B ; }
009B L43:
009B ;
009B ; if(Key=='C')
009B B601 lda *_Key
009D A143 cmp #67
009F 260C bne L45
00A1 ; {
00A1 ; Alarm_Flag++;
00A1 3C02 inc *_Alarm_Flag
00A3 ; if (Alarm_Flag=1)Alarm_Flag=0;
00A3 A601 lda #1
00A5 B702 sta *_Alarm_Flag
00A7 A601 lda #1
00A9 2702 beq L47
00AB 3F02 clr *_Alarm_Flag
00AD L47:
00AD ; }
00AD L45:
00AD ;
00AD ;
00AD ; if((time[12]==0)&&(time[11]==0)&&(time[10]==0))
00AD B61C lda *_time+12
00AF 2631 bne L49
00B1 B61B lda *_time+11
00B3 262D bne L49
00B5 B61A lda *_time+10
00B7 2629 bne L49
00B9 ; {
00B9 ;
00B9 ; n=time[9]+time[8]*10; //多少点就响多少下
00B9 B618 lda *_time+8
00BB AE0A ldx #10
00BD 42 mul
00BE 95 tsx
00BF B700 sta *__r0
00C1 B619 lda *_time+9
00C3 BB00 add *__r0
00C5 E702 sta 2,X
00C7 ;
00C7 ; //LcdshowCharacter('A', 1, 15);
00C7 ;
00C7 ;
00C7 ; for(h=0;h<n;h++)
00C7 6F03 clr 3,X
00C9 2011 bra L59
00CB L56:
00CB 1202 bset #1,0x2
00CD CD0000 jsr _delay
00D0 B602 lda 0x2
00D2 AAFD ora #-3
00D4 B702 sta 0x2
00D6 CD0000 jsr _delay
00D9 95 tsx
00DA L57:
00DA 6C03 inc 3,X
00DC L59:
00DC E603 lda 3,X
00DE E102 cmp 2,X
00E0 25E9 blo L56
00E2 ; {
00E2 ; PTC|=1<<PTC1;
00E2 ; delay();
00E2 ; PTC|=~(1<<PTC1);
00E2 ; delay();
00E2 ; }
00E2 ;
00E2 ; }
00E2 L49:
00E2 ;
00E2 ; /* if((time[11]==0)&&(time[10]==0)&&(Alarm_Flag==1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -