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

📄 3x3key.lis

📁 protues_atmeg8学习之:按键篇源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _3X3Key.C
                        .area text(rom, con, rel)
 0000                   .dbfile F:\Learn\AVR\Pro_Mega8\KEY\3X3Key/Delay.h
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              i -> R20,R21
 0000           ;              n -> R16,R17
                        .even
 0000           _delay_us::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 3
 0002           ; /******************************************/
 0002           ; //文件名:3X3Key.c
 0002           ; //功能: 键盘扫描的应用
 0002                   .dbline 5
 0002 A801              movw R20,R16
 0004 02C0              rjmp L5
 0006           L2:
 0006                   .dbline 5
 0006           L3:
 0006                   .dbline 5
 0006 4150              subi R20,1
 0008 5040              sbci R21,0
 000A           L5:
 000A                   .dbline 5
 000A           ; //作者:  young
 000A           ; //时间: 2006.11.6
 000A 4030              cpi R20,0
 000C 4507              cpc R20,R21
 000E D9F7              brne L2
 0010           X0:
 0010                   .dbline -2
 0010                   .dbline 6
 0010           ; //目标MCU:ATmega8   
 0010           L1:
 0010 00D0              rcall pop_gset1
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbsym r i 20 i
 0014                   .dbsym r n 16 i
 0014                   .dbend
 0014                   .dbfunc e delay_1ms _delay_1ms fV
 0014           ;              i -> R16,R17
                        .even
 0014           _delay_1ms::
 0014                   .dbline -1
 0014                   .dbline 10
 0014           ; //晶振:  8MHZ
 0014           ; /******************************************/
 0014           ; #include <iom8v.h>
 0014           ; #include "Delay.h"
 0014                   .dbline 12
 0014           ; 
 0014           ; //按键扫描函数,返回按键的值
 0014 01E0              ldi R16,1
 0016 10E0              ldi R17,0
 0018 02C0              rjmp L10
 001A           L7:
 001A                   .dbline 13
 001A           L8:
 001A                   .dbline 12
 001A 0F5F              subi R16,255  ; offset = 1
 001C 1F4F              sbci R17,255
 001E           L10:
 001E                   .dbline 12
 001E 0637              cpi R16,118
 0020 E4E0              ldi R30,4
 0022 1E07              cpc R17,R30
 0024 D0F3              brlo L7
 0026                   .dbline -2
 0026                   .dbline 14
 0026           ; unsigned char ScanKey(void)
 0026           ; {
 0026           L6:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 16 i
 0028                   .dbend
 0028                   .dbfunc e delay_ms _delay_ms fV
 0028           ;              i -> R20,R21
 0028           ;              n -> R22,R23
                        .even
 0028           _delay_ms::
 0028 00D0              rcall push_gset2
 002A B801              movw R22,R16
 002C                   .dbline -1
 002C                   .dbline 18
 002C           ;     unsigned char temp,temp1,key;
 002C           ;     temp=PINC;
 002C           ;     temp&=0x07;
 002C           ;     switch(temp) //判断行中哪条线有低电平
 002C                   .dbline 19
 002C           ;     {
 002C 4427              clr R20
 002E 5527              clr R21
 0030 03C0              rjmp L13
 0032           L12:
 0032                   .dbline 21
 0032                   .dbline 22
 0032 F0DF              rcall _delay_1ms
 0034                   .dbline 23
 0034 4F5F              subi R20,255  ; offset = 1
 0036 5F4F              sbci R21,255
 0038                   .dbline 24
 0038           L13:
 0038                   .dbline 20
 0038           ;       case 0x06:  
 0038 4617              cp R20,R22
 003A 5707              cpc R21,R23
 003C D0F3              brlo L12
 003E                   .dbline -2
 003E                   .dbline 25
 003E           ;         DDRC=0X07;
 003E           ;         PORTC=0X38;
 003E           ;           delay_us(1);
 003E           ;         temp1=PINC;
 003E           ;               temp1&=0x38;
 003E           L11:
 003E 00D0              rcall pop_gset2
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbsym r i 20 i
 0042                   .dbsym r n 22 i
 0042                   .dbend
 0042                   .dbfile F:\Learn\AVR\Pro_Mega8\KEY\3X3Key\3X3Key.C
 0042                   .dbfunc e ScanKey _ScanKey fc
 0042           ;          temp1 -> R22
 0042           ;            key -> R20
 0042           ;           temp -> R20
                        .even
 0042           _ScanKey::
 0042 00D0              rcall push_gset3
 0044                   .dbline -1
 0044                   .dbline 14
 0044                   .dbline 16
 0044 43B3              in R20,0x13
 0046                   .dbline 17
 0046 4770              andi R20,7
 0048                   .dbline 18
 0048 5527              clr R21
 004A 4330              cpi R20,3
 004C E0E0              ldi R30,0
 004E 5E07              cpc R21,R30
 0050 09F4              brne X5
 0052 5FC0              rjmp L37
 0054           X5:
 0054 4530              cpi R20,5
 0056 E0E0              ldi R30,0
 0058 5E07              cpc R21,R30
 005A 79F1              breq L28
 005C 4630              cpi R20,6
 005E E0E0              ldi R30,0
 0060 5E07              cpc R21,R30
 0062 09F0              breq L19
 0064 7FC0              rjmp L16
 0066           X1:
 0066                   .dbline 19
 0066           L19:
 0066                   .dbline 21
 0066 87E0              ldi R24,7
 0068 84BB              out 0x14,R24
 006A                   .dbline 22
 006A 88E3              ldi R24,56
 006C 85BB              out 0x15,R24
 006E                   .dbline 23
 006E 01E0              ldi R16,1
 0070 10E0              ldi R17,0
 0072 C6DF              rcall _delay_us
 0074                   .dbline 24
 0074 63B3              in R22,0x13
 0076                   .dbline 25
 0076 6873              andi R22,56
 0078                   .dbline 26
 0078           ;         switch(temp1) //判断列中哪条线有低电平
 0078 462F              mov R20,R22
 007A 5527              clr R21
 007C 4832              cpi R20,40
 007E E0E0              ldi R30,0
 0080 5E07              cpc R21,R30
 0082 89F0              breq L24
 0084 88E2              ldi R24,40
 0086 90E0              ldi R25,0
 0088 8417              cp R24,R20
 008A 9507              cpc R25,R21
 008C 2CF0              brlt L27
 008E           L26:
 008E 4831              cpi R20,24
 0090 E0E0              ldi R30,0
 0092 5E07              cpc R21,R30
 0094 51F0              breq L25
 0096 0BC0              rjmp L20
 0098           L27:
 0098 4033              cpi R20,48
 009A E0E0              ldi R30,0
 009C 5E07              cpc R21,R30
 009E 09F0              breq L23
 00A0 06C0              rjmp L20
 00A2           X2:
 00A2                   .dbline 27
 00A2           ;               {
 00A2           L23:
 00A2                   .dbline 28
 00A2           ;                   case 0x30: key=0x01;  //得到键值
 00A2 41E0              ldi R20,1
 00A4                   .dbline 29
 00A4           ;                       break;
 00A4 05C0              rjmp L21
 00A6           L24:
 00A6                   .dbline 30
 00A6           ;                   case 0x28: key=0x02; 
 00A6 42E0              ldi R20,2
 00A8                   .dbline 31
 00A8           ;                       break;
 00A8 03C0              rjmp L21
 00AA           L25:
 00AA                   .dbline 32
 00AA           ;                       case 0x18: key=0x03; 
 00AA 43E0              ldi R20,3
 00AC                   .dbline 33
 00AC           ;                       break;                                                  
 00AC 01C0              rjmp L21
 00AE           L20:
 00AE                   .dbline 34
 00AE           ;                       default:   key=0;
 00AE 4427              clr R20
 00B0                   .dbline 35
 00B0           ;                       break;
 00B0           L21:
 00B0                   .dbline 37
 00B0           ;               }
 00B0           ;               DDRC=0X38;
 00B0 88E3              ldi R24,56
 00B2 84BB              out 0x14,R24
 00B4                   .dbline 38
 00B4           ;               PORTC=0X07;
 00B4 87E0              ldi R24,7
 00B6 85BB              out 0x15,R24
 00B8                   .dbline 39
 00B8           ;         break;
 00B8 56C0              rjmp L17
 00BA           L28:
 00BA                   .dbline 42
 00BA           ;                          
 00BA           ;     case 0x05:
 00BA           ;           DDRC=0X07;
 00BA 87E0              ldi R24,7
 00BC 84BB              out 0x14,R24
 00BE                   .dbline 43
 00BE           ;         PORTC=0X38;
 00BE 88E3              ldi R24,56
 00C0 85BB              out 0x15,R24
 00C2                   .dbline 44
 00C2           ;           delay_us(1);
 00C2 01E0              ldi R16,1
 00C4 10E0              ldi R17,0
 00C6 9CDF              rcall _delay_us
 00C8                   .dbline 45
 00C8           ;         temp1=PINC;
 00C8 63B3              in R22,0x13
 00CA                   .dbline 46
 00CA           ;               temp1&=0x38;
 00CA 6873              andi R22,56
 00CC                   .dbline 47
 00CC           ;               switch(temp1)
 00CC A62E              mov R10,R22
 00CE BB24              clr R11
 00D0 C501              movw R24,R10
 00D2 8832              cpi R24,40
 00D4 E0E0              ldi R30,0
 00D6 9E07              cpc R25,R30
 00D8 91F0              breq L33
 00DA 88E2              ldi R24,40
 00DC 8A15              cp R24,R10
 00DE 9B05              cpc R25,R11
 00E0 34F0              brlt L36
 00E2           L35:
 00E2 C501              movw R24,R10
 00E4 8831              cpi R24,24
 00E6 E0E0              ldi R30,0
 00E8 9E07              cpc R25,R30
 00EA 59F0              breq L34
 00EC 0CC0              rjmp L29
 00EE           L36:
 00EE C501              movw R24,R10
 00F0 8033              cpi R24,48
 00F2 E0E0              ldi R30,0
 00F4 9E07              cpc R25,R30
 00F6 09F0              breq L32
 00F8 06C0              rjmp L29
 00FA           X3:
 00FA                   .dbline 48
 00FA           ;               {
 00FA           L32:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -