📄 onekey.lis
字号:
.module OneKey.C
.area text(rom, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\KEY\OneKey/Delay.h
0000 .dbfunc e delay_1ms _delay_1ms fV
0000 ; i -> R16,R17
.even
0000 _delay_1ms::
0000 .dbline -1
0000 .dbline 3
0000 ; /******************************************/
0000 ; //文件名:Int0.c
0000 ; //功能: 外部中断的应用
0000 .dbline 5
0000 ; //作者: young
0000 ; //时间: 2006.10.1
0000 01E0 ldi R16,1
0002 10E0 ldi R17,0
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 6
0006 L3:
0006 .dbline 5
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 5
000A 0637 cpi R16,118
000C E4E0 ldi R30,4
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 .dbline -2
0012 .dbline 7
0012 ; //目标MCU:ATmega8
0012 ; //晶振: 8MHZ
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 i
0014 .dbend
0014 .dbfunc e delay_ms _delay_ms fV
0014 ; i -> R20,R21
0014 ; n -> R22,R23
.even
0014 _delay_ms::
0014 00D0 rcall push_gset2
0016 B801 movw R22,R16
0018 .dbline -1
0018 .dbline 11
0018 ; /******************************************/
0018 ; #include <iom8v.h>
0018 ; //#include <macros.h>
0018 ; #include "Delay.h"
0018 .dbline 12
0018 ;
0018 4427 clr R20
001A 5527 clr R21
001C 03C0 rjmp L8
001E L7:
001E .dbline 14
001E .dbline 15
001E F0DF rcall _delay_1ms
0020 .dbline 16
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 .dbline 17
0024 L8:
0024 .dbline 13
0024 ; unsigned char CountNum; //全局变量,用来计数
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D0F3 brlo L7
002A .dbline -2
002A .dbline 18
002A ;
002A ; //按键扫描函数
002A ; void ScanKey(void)
002A ; {
002A ; unsigned char key;
002A L6:
002A 00D0 rcall pop_gset2
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r i 20 i
002E .dbsym r n 22 i
002E .dbend
002E .dbfile F:\Learn\AVR\Pro_Mega8\KEY\OneKey\OneKey.C
002E .dbfunc e ScanKey _ScanKey fV
002E ; key -> R20
.even
002E _ScanKey::
002E 00D0 rcall push_gset2
0030 .dbline -1
0030 .dbline 17
0030 .dbline 19
0030 ; key=PINC;
0030 43B3 in R20,0x13
0032 .dbline 20
0032 ; if(1==key&0x01)
0032 4130 cpi R20,1
0034 19F4 brne L13
0036 61E0 ldi R22,1
0038 70E0 ldi R23,0
003A 02C0 rjmp L14
003C L13:
003C 6627 clr R22
003E 7727 clr R23
0040 L14:
0040 60FF sbrs R22,0
0042 01C0 rjmp L11
0044 .dbline 21
0044 ; return;
0044 1EC0 rjmp L10
0046 L11:
0046 .dbline 22
0046 ; delay_ms(10);
0046 0AE0 ldi R16,10
0048 10E0 ldi R17,0
004A E4DF rcall _delay_ms
004C .dbline 24
004C ;
004C ; key=PINC;
004C 43B3 in R20,0x13
004E .dbline 25
004E ; if(1==key&0x01)
004E 4130 cpi R20,1
0050 19F4 brne L17
0052 61E0 ldi R22,1
0054 70E0 ldi R23,0
0056 02C0 rjmp L18
0058 L17:
0058 6627 clr R22
005A 7727 clr R23
005C L18:
005C 60FF sbrs R22,0
005E 01C0 rjmp L15
0060 .dbline 26
0060 ; return;
0060 10C0 rjmp L10
0062 L15:
0062 .dbline 27
0062 ; CountNum++;
0062 80910000 lds R24,_CountNum
0066 8F5F subi R24,255 ; addi 1
0068 80930000 sts _CountNum,R24
006C 01C0 rjmp L20
006E L19:
006E .dbline 29
006E 43B3 in R20,0x13
0070 L20:
0070 .dbline 28
0070 ; while(0==key&0x01)
0070 4423 tst R20
0072 19F4 brne L22
0074 61E0 ldi R22,1
0076 70E0 ldi R23,0
0078 02C0 rjmp L23
007A L22:
007A 6627 clr R22
007C 7727 clr R23
007E L23:
007E 60FD sbrc R22,0
0080 F6CF rjmp L19
0082 .dbline -2
0082 .dbline 30
0082 ; key=PINC;
0082 ; }
0082 L10:
0082 00D0 rcall pop_gset2
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym r key 20 c
0086 .dbend
.area lit(rom, con, rel)
0000 L25:
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
.area text(rom, con, rel)
0086 .dbfile F:\Learn\AVR\Pro_Mega8\KEY\OneKey\OneKey.C
0086 .dbfunc e main _main fV
0086 ; temp -> <dead>
0086 ; num -> y+0
.even
0086 _main::
0086 2A97 sbiw R28,10
0088 .dbline -1
0088 .dbline 34
0088 ;
0088 ; //主函数,显示数据时先关中断,然后再打开
0088 ; void main()
0088 ; {
0088 .dbline 36
0088 ; unsigned char temp;
0088 ; unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
0088 80E0 ldi R24,<L25
008A 90E0 ldi R25,>L25
008C FE01 movw R30,R28
008E 0AE0 ldi R16,10
0090 10E0 ldi R17,0
0092 FA93 st -y,R31
0094 EA93 st -y,R30
0096 9A93 st -y,R25
0098 8A93 st -y,R24
009A 00D0 rcall asgncblk
009C .dbline 39
009C ; 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
009C ; //初始化端口
009C ; DDRB=0xFF; //设置B口为输出模式
009C 8FEF ldi R24,255
009E 87BB out 0x17,R24
00A0 .dbline 40
00A0 ; PORTB=0xFF; //置高电平
00A0 88BB out 0x18,R24
00A2 .dbline 41
00A2 ; DDRC=0x00;
00A2 2224 clr R2
00A4 24BA out 0x14,R2
00A6 .dbline 44
00A6 ; //PORTC=0xFF;
00A6 ;
00A6 ; CountNum=0; //初始化全局变量
00A6 20920000 sts _CountNum,R2
00AA 10C0 rjmp L27
00AC L26:
00AC .dbline 46
00AC ; while (1)
00AC ; {
00AC .dbline 47
00AC ; ScanKey();//扫描按键
00AC C0DF rcall _ScanKey
00AE .dbline 48
00AE ; if(CountNum>=10)
00AE 80910000 lds R24,_CountNum
00B2 8A30 cpi R24,10
00B4 18F0 brlo L29
00B6 .dbline 49
00B6 ; CountNum-=10;
00B6 8A50 subi R24,10
00B8 80930000 sts _CountNum,R24
00BC L29:
00BC .dbline 50
00BC CE01 movw R24,R28
00BE E0910000 lds R30,_CountNum
00C2 FF27 clr R31
00C4 E80F add R30,R24
00C6 F91F adc R31,R25
00C8 2080 ldd R2,z+0
00CA 28BA out 0x18,R2
00CC .dbline 51
00CC L27:
00CC .dbline 45
00CC EFCF rjmp L26
00CE X0:
00CE .dbline -2
00CE .dbline 52
00CE ; PORTB=num[CountNum];
00CE ; }
00CE ; }
00CE L24:
00CE 2A96 adiw R28,10
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbsym l temp 1 c
00D2 .dbsym l num 0 A[10:10]c
00D2 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\KEY\OneKey\OneKey.C
0000 _CountNum::
0000 .blkb 1
0001 .dbsym e CountNum _CountNum c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -