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

📄 main.lis

📁 摩托罗拉的时钟的原代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -