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

📄 main.lis

📁 用Freescale半导体公司HC08系列单片机制作了电子时钟,具有整点报时、闹钟、时间日期设置等功能(c语言编写)
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -