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

📄 onekey.lis

📁 protues_atmeg8学习之:按键篇源代码
💻 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 + -