📄 keyled.lis
字号:
.module keyled.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
0000 .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\delay.h
0000 .dbfunc e delay_1ms _delay_1ms fV
0000 ; i -> R16,R17
.even
0000 _delay_1ms::
0000 .dbline -1
0000 .dbline 7
0000 ; /* 1MHz 下延时程序*/
0000 ;
0000 ; #ifndef DELAY_H_H
0000 ; #define DELAY_H_H
0000 ;
0000 ; void delay_1ms() //1ms 延时
0000 ; {
0000 .dbline 13
0000 ; unsigned int i;
0000 ; /*
0000 ; for(i=1;i<140;i++) //1MHz
0000 ; ;
0000 ; */
0000 ; for(i=1331;i>0;i--) // 8MHz
0000 03E3 ldi R16,1331
0002 15E0 ldi R17,5
0004 02C0 xjmp L5
0006 L2:
0006 .dbline 14
0006 ; ;
0006 L3:
0006 .dbline 13
0006 0150 subi R16,1
0008 1040 sbci R17,0
000A L5:
000A .dbline 13
000A 0030 cpi R16,0
000C 0107 cpc R16,R17
000E D9F7 brne L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r i 16 i
0012 .dbend
0012 .dbfunc e delay _delay fV
0012 ; i -> R20,R21
0012 ; n -> R10,R11
.even
0012 _delay::
0012 0E940000 xcall push_xgset300C
0016 5801 movw R10,R16
0018 .dbline -1
0018 .dbline 19
0018 ;
0018 ; }
0018 ;
0018 ; void delay(unsigned int n)
0018 ; {
0018 .dbline 20
0018 ; unsigned int i=0;
0018 4427 clr R20
001A 5527 clr R21
001C .dbline 21
001C ; for(i=0;i<n;i++)
001C 03C0 xjmp L10
001E L7:
001E .dbline 22
001E ; delay_1ms();
001E F0DF xcall _delay_1ms
0020 L8:
0020 .dbline 21
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L10:
0024 .dbline 21
0024 4A15 cp R20,R10
0026 5B05 cpc R21,R11
0028 D0F3 brlo L7
002A X1:
002A .dbline -2
002A L6:
002A .dbline 0 ; func end
002A 0C940000 xjmp pop_xgset300C
002E .dbsym r i 20 i
002E .dbsym r n 10 i
002E .dbend
.area lit(rom, con, rel)
0000 _seg_table::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
0010 .dbsym e seg_table _seg_table A[16:16]kc
.area vector(rom, abs)
.org 64
0040 0C940401 jmp _timer0_com_isr
.area lit(rom, con, rel)
.area text(rom, con, rel)
002E .dbfile C:\DOCUME~1\Administrator\桌面\按键显示\keyled.c
002E .dbfunc e display _display fV
002E ; j -> <dead>
002E ; i -> R20
002E ; k -> R20
.even
002E _display::
002E 4A93 st -y,R20
0030 .dbline -1
0030 .dbline 19
0030 ; /*跑表和计时
0030 ; 8MHz */
0030 ; #include <iom128v.h>
0030 ; #include <macros.h>
0030 ; #include "delay.h"
0030 ; unsigned char temp;
0030 ; unsigned char timer2; //the num of 5ms
0030 ; unsigned int timer200; // the num of 1s
0030 ; unsigned char work_state; //to set the timer or clock,0表示计时,1表示跑表
0030 ; unsigned char time_change; //to sign the state of change
0030 ; unsigned char clock_start; // 跑表开始信号,0表示开始,1 表示暂停
0030 ; unsigned char time[4]; //array of time
0030 ; unsigned char clock[4]; //array of watch
0030 ; const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0030 ; 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
0030 ; #pragma interrupt_handler timer0_com_isr:17 //timer0 compare interrupt
0030 ;
0030 ; void display()
0030 ; {
0030 .dbline 21
0030 ; unsigned char i,j,k;
0030 ; DDRA=0xff;
0030 8FEF ldi R24,255
0032 8ABB out 0x1a,R24
0034 .dbline 22
0034 ; PORTA=0xff;
0034 8BBB out 0x1b,R24
0036 .dbline 23
0036 ; DDRC=0xff;
0036 84BB out 0x14,R24
0038 .dbline 24
0038 ; PORTC=0xff;
0038 85BB out 0x15,R24
003A .dbline 26
003A ;
003A ; if(work_state==0) //计时显示
003A 20900A00 lds R2,_work_state
003E 2220 tst R2
0040 09F0 breq X15
0042 BDC0 xjmp L12
0044 X15:
0044 X2:
0044 .dbline 27
0044 ; {
0044 .dbline 28
0044 ; if(time_change==0x00) // normal
0044 20900900 lds R2,_time_change
0048 2220 tst R2
004A 01F5 brne L14
004C X3:
004C .dbline 29
004C ; {for(i=0;i<4;i++)
004C .dbline 29
004C 4427 clr R20
004E 1BC0 xjmp L19
0050 L16:
0050 .dbline 30
0050 ; {
0050 .dbline 31
0050 ; PORTA=seg_table[time[i]];
0050 80E0 ldi R24,<_time
0052 90E0 ldi R25,>_time
0054 E42F mov R30,R20
0056 FF27 clr R31
0058 E80F add R30,R24
005A F91F adc R31,R25
005C E081 ldd R30,z+0
005E FF27 clr R31
0060 80E0 ldi R24,<_seg_table
0062 90E0 ldi R25,>_seg_table
0064 E80F add R30,R24
0066 F91F adc R31,R25
0068 2690 elpm R2,Z
006A 2BBA out 0x1b,R2
006C .dbline 32
006C ; PORTC=~(1<<(i+4));
006C 142F mov R17,R20
006E 1C5F subi R17,252 ; addi 4
0070 01E0 ldi R16,1
0072 0E940000 xcall lsl8
0076 202E mov R2,R16
0078 2094 com R2
007A 25BA out 0x15,R2
007C .dbline 33
007C ; delay_1ms();
007C C1DF xcall _delay_1ms
007E .dbline 34
007E ; PORTC|=0xf0;
007E 85B3 in R24,0x15
0080 806F ori R24,240
0082 85BB out 0x15,R24
0084 .dbline 35
0084 ; }
0084 L17:
0084 .dbline 29
0084 4395 inc R20
0086 L19:
0086 .dbline 29
0086 4430 cpi R20,4
0088 18F3 brlo L16
008A X4:
008A .dbline 36
008A ; }
008A 99C0 xjmp L15
008C L14:
008C .dbline 37
008C ; else if(time_change==0x01) // change second
008C 80910900 lds R24,_time_change
0090 8130 cpi R24,1
0092 09F0 breq X16
0094 48C0 xjmp L20
0096 X16:
0096 X5:
0096 .dbline 38
0096 ; {
0096 .dbline 39
0096 ; if(timer200<100) //正常显示
0096 80910B00 lds R24,_timer200
009A 90910C00 lds R25,_timer200+1
009E 8436 cpi R24,100
00A0 E0E0 ldi R30,0
00A2 9E07 cpc R25,R30
00A4 00F5 brsh L22
00A6 X6:
00A6 .dbline 40
00A6 ; {
00A6 .dbline 41
00A6 ; for(i=0;i<4;i++)
00A6 4427 clr R20
00A8 1BC0 xjmp L27
00AA L24:
00AA .dbline 42
00AA ; {
00AA .dbline 43
00AA ; PORTA=seg_table[time[i]];
00AA 80E0 ldi R24,<_time
00AC 90E0 ldi R25,>_time
00AE E42F mov R30,R20
00B0 FF27 clr R31
00B2 E80F add R30,R24
00B4 F91F adc R31,R25
00B6 E081 ldd R30,z+0
00B8 FF27 clr R31
00BA 80E0 ldi R24,<_seg_table
00BC 90E0 ldi R25,>_seg_table
00BE E80F add R30,R24
00C0 F91F adc R31,R25
00C2 2690 elpm R2,Z
00C4 2BBA out 0x1b,R2
00C6 .dbline 44
00C6 ; PORTC=~(1<<(i+4));
00C6 142F mov R17,R20
00C8 1C5F subi R17,252 ; addi 4
00CA 01E0 ldi R16,1
00CC 0E940000 xcall lsl8
00D0 202E mov R2,R16
00D2 2094 com R2
00D4 25BA out 0x15,R2
00D6 .dbline 45
00D6 ; delay_1ms();
00D6 94DF xcall _delay_1ms
00D8 .dbline 46
00D8 ; PORTC|=0xf0;
00D8 85B3 in R24,0x15
00DA 806F ori R24,240
00DC 85BB out 0x15,R24
00DE .dbline 47
00DE ; }
00DE L25:
00DE .dbline 41
00DE 4395 inc R20
00E0 L27:
00E0 .dbline 41
00E0 4430 cpi R20,4
00E2 18F3 brlo L24
00E4 X7:
00E4 .dbline 48
00E4 ; }
00E4 6CC0 xjmp L21
00E6 L22:
00E6 .dbline 50
00E6 ; else //只显示分
00E6 ; {for(i=2;i<4;i++)
00E6 .dbline 50
00E6 42E0 ldi R20,2
00E8 1BC0 xjmp L31
00EA L28:
00EA .dbline 51
00EA ; {
00EA .dbline 52
00EA ; PORTA=seg_table[time[i]];
00EA 80E0 ldi R24,<_time
00EC 90E0 ldi R25,>_time
00EE E42F mov R30,R20
00F0 FF27 clr R31
00F2 E80F add R30,R24
00F4 F91F adc R31,R25
00F6 E081 ldd R30,z+0
00F8 FF27 clr R31
00FA 80E0 ldi R24,<_seg_table
00FC 90E0 ldi R25,>_seg_table
00FE E80F add R30,R24
0100 F91F adc R31,R25
0102 2690 elpm R2,Z
0104 2BBA out 0x1b,R2
0106 .dbline 53
0106 ; PORTC=~(1<<(i+4));
0106 142F mov R17,R20
0108 1C5F subi R17,252 ; addi 4
010A 01E0 ldi R16,1
010C 0E940000 xcall lsl8
0110 202E mov R2,R16
0112 2094 com R2
0114 25BA out 0x15,R2
0116 .dbline 54
0116 ; delay_1ms();
0116 74DF xcall _delay_1ms
0118 .dbline 55
0118 ; PORTC|=0xc0;
0118 85B3 in R24,0x15
011A 806C ori R24,192
011C 85BB out 0x15,R24
011E .dbline 56
011E ; }
011E L29:
011E .dbline 50
011E 4395 inc R20
0120 L31:
0120 .dbline 50
0120 4430 cpi R20,4
0122 18F3 brlo L28
0124 X8:
0124 .dbline 57
0124 ; }
0124 .dbline 58
0124 ; }
0124 4CC0 xjmp L21
0126 L20:
0126 .dbline 59
0126 ; else if(time_change==0x02) //正常显示
0126 80910900 lds R24,_time_change
012A 8230 cpi R24,2
012C 09F0 breq X17
012E 47C0 xjmp L32
0130 X17:
0130 X9:
0130 .dbline 60
0130 ; { if(timer200<100)
0130 .dbline 60
0130 80910B00 lds R24,_timer200
0134 90910C00 lds R25,_timer200+1
0138 8436 cpi R24,100
013A E0E0 ldi R30,0
013C 9E07 cpc R25,R30
013E 00F5 brsh L34
0140 X10:
0140 .dbline 61
0140 ; {
0140 .dbline 62
0140 ; { for(i=0;i<4;i++)
0140 .dbline 62
0140 4427 clr R20
0142 1BC0 xjmp L39
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -