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

📄 key5.lis

📁 本设计以ATMEL公司生产的AT90S8515作为控制核心
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module key5.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\hujie\key5.c
 0000                   .dbfunc e key_scan _key_scan fc
 0000           ;           temp -> R20
                        .even
 0000           _key_scan::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 17
 0002           ; // key_5.c
 0002           ; //
 0002           ; 
 0002           ; #include <io8515v.h>
 0002           ; #include <macros.h>
 0002           ; #include "1602LCD.h"
 0002           ; #include "key5.h"     
 0002           ; #include "init.h"
 0002           ; #include "main.h"
 0002           ; 
 0002           ; 
 0002           ; /////////////////////////////////////////////
 0002           ; // key_san()
 0002           ; // 四键扫描函数       
 0002           ; //
 0002           ; unsigned char key_scan(void)
 0002           ; {
 0002                   .dbline 18
 0002           ;     unsigned char temp=0;
 0002 4427              clr R20
 0004                   .dbline 19
 0004           ;       PORTD|=0X3B;    //高四位置高
 0004 82B3              in R24,0x12
 0006 8B63              ori R24,59
 0008 82BB              out 0x12,R24
 000A                   .dbline 20
 000A           ;       DDRD&=0XC4;     //高四位输入
 000A 81B3              in R24,0x11
 000C 847C              andi R24,196
 000E 81BB              out 0x11,R24
 0010                   .dbline 21
 0010           ;     temp=PIND&0X3B;
 0010 40B3              in R20,0x10
 0012 4B73              andi R20,59
 0014                   .dbline 22
 0014           ;       if(temp!=0x3B)
 0014 4B33              cpi R20,59
 0016 89F1              breq L2
 0018                   .dbline 23
 0018           ;       {
 0018                   .dbline 24
 0018           ;           delay_nms(15);
 0018 0FE0              ldi R16,15
 001A 10E0              ldi R17,0
 001C 00D0              rcall _delay_nms
 001E                   .dbline 25
 001E           ;               temp=PIND&0X3B;
 001E 40B3              in R20,0x10
 0020 4B73              andi R20,59
 0022                   .dbline 26
 0022           ;               if(temp!=0x3B)
 0022 4B33              cpi R20,59
 0024 51F1              breq L4
 0026                   .dbline 27
 0026           ;                   switch(temp)
 0026 642F              mov R22,R20
 0028 7727              clr R23
 002A 6B32              cpi R22,43
 002C E0E0              ldi R30,0
 002E 7E07              cpc R23,R30
 0030 09F1              breq L12
 0032 8BE2              ldi R24,43
 0034 90E0              ldi R25,0
 0036 8617              cp R24,R22
 0038 9707              cpc R25,R23
 003A 2CF0              brlt L15
 003C           L14:
 003C 6B31              cpi R22,27
 003E E0E0              ldi R30,0
 0040 7E07              cpc R23,R30
 0042 D1F0              breq L13
 0044 1AC0              rjmp L6
 0046           L15:
 0046 6333              cpi R22,51
 0048 E0E0              ldi R30,0
 004A 7E07              cpc R23,R30
 004C 89F0              breq L11
 004E 6333              cpi R22,51
 0050 E0E0              ldi R30,0
 0052 7E07              cpc R23,R30
 0054 94F0              brlt L6
 0056           L16:
 0056 6933              cpi R22,57
 0058 E0E0              ldi R30,0
 005A 7E07              cpc R23,R30
 005C 39F0              breq L10
 005E 6A33              cpi R22,58
 0060 E0E0              ldi R30,0
 0062 7E07              cpc R23,R30
 0064 09F0              breq L9
 0066 09C0              rjmp L6
 0068           X0:
 0068                   .dbline 28
 0068           ;                       {
 0068           L9:
 0068                   .dbline 29
 0068           ;                       case 0x3A:temp=1;break;
 0068 41E0              ldi R20,1
 006A                   .dbline 29
 006A 07C0              rjmp L7
 006C           L10:
 006C                   .dbline 30
 006C           ;                       case 0x39:temp=2;break;
 006C 42E0              ldi R20,2
 006E                   .dbline 30
 006E 05C0              rjmp L7
 0070           L11:
 0070                   .dbline 31
 0070           ;                       case 0x33:temp=3;break;
 0070 43E0              ldi R20,3
 0072                   .dbline 31
 0072 03C0              rjmp L7
 0074           L12:
 0074                   .dbline 32
 0074           ;                       case 0x2B:temp=4;break;
 0074 44E0              ldi R20,4
 0076                   .dbline 32
 0076 01C0              rjmp L7
 0078           L13:
 0078                   .dbline 33
 0078           ;                       case 0x1B:temp=5;break;
 0078 45E0              ldi R20,5
 007A                   .dbline 33
 007A           L6:
 007A           L7:
 007A           L4:
 007A                   .dbline 35
 007A           ;                       }
 007A           ;       }
 007A           L2:
 007A                   .dbline 36
 007A           ;     return (temp);
 007A 042F              mov R16,R20
 007C                   .dbline -2
 007C           L1:
 007C 00D0              rcall pop_gset2
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbsym r temp 20 c
 0080                   .dbend
 0080                   .dbfunc e keypad _keypad fc
 0080           ;          temp1 -> R20
 0080           ;          temp2 -> R22
                        .even
 0080           _keypad::
 0080 00D0              rcall push_gset2
 0082                   .dbline -1
 0082                   .dbline 44
 0082           ; }
 0082           ; 
 0082           ; /////////////////////////////////////////////
 0082           ; // key_san()
 0082           ; // 四键扫描函数(按键释放检查)
 0082           ; //
 0082           ; unsigned char keypad(void)
 0082           ; {
 0082                   .dbline 46
 0082           ;     unsigned char temp1,temp2;
 0082           ;       temp1=key_scan();
 0082 BEDF              rcall _key_scan
 0084 402F              mov R20,R16
 0086                   .dbline 47
 0086           ;       if (temp1==0x3B)
 0086 0B33              cpi R16,59
 0088 11F4              brne L18
 008A                   .dbline 48
 008A           ;           return 0x3B;
 008A 0BE3              ldi R16,59
 008C 05C0              rjmp L17
 008E           L18:
 008E           L20:
 008E                   .dbline 50
 008E           ;       do
 008E           ;           temp2=key_scan();
 008E B8DF              rcall _key_scan
 0090 602F              mov R22,R16
 0092           L21:
 0092                   .dbline 51
 0092           ;       while(temp1==temp2);
 0092 4617              cp R20,R22
 0094 E1F3              breq L20
 0096                   .dbline 52
 0096           ;       return temp1;
 0096 042F              mov R16,R20
 0098                   .dbline -2
 0098           L17:
 0098 00D0              rcall pop_gset2
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C                   .dbsym r temp1 20 c
 009C                   .dbsym r temp2 22 c
 009C                   .dbend
 009C                   .dbfunc e key_service _key_service fV
 009C           ;           temp -> R22
 009C           ;          value -> R20,R21
 009C           ;    data_length -> y+20
 009C           ;              y -> R22
 009C           ;              x -> R10
                        .even
 009C           _key_service::
 009C 00D0              rcall push_gset3
 009E 622F              mov R22,R18
 00A0 A02E              mov R10,R16
 00A2 2E97              sbiw R28,14
 00A4 4E89              ldd R20,y+22
 00A6 5F89              ldd R21,y+23
 00A8                   .dbline -1
 00A8                   .dbline 70
 00A8           ; }
 00A8           ; 
 00A8           ; ///////////////////////////////////////////////////
 00A8           ; // key_service
 00A8           ; // 按键服务函数:     
 00A8           ; // x ——数据显示列
 00A8           ; // y ——数据显示行
 00A8           ; // data_lentgh —— 数据长度
 00A8           ; // *value ——            数据指针
 00A8           ; //       MODE:   1          2
 00A8           ; // KEY: 1                  确定   
 00A8           ; //       2      step+        +
 00A8           ; //       3      step-        -
 00A8           ; //       4                  移动光标
 00A8           ; //       5         模式选择
 00A8           ; //
 00A8           ; void key_service(unsigned char x,unsigned char y,unsigned char data_length,unsigned int *value)
 00A8           ; {
 00A8                   .dbline 73
 00A8           ;        unsigned char temp;
 00A8           ;        
 00A8           ;        temp=keypad();
 00A8 EBDF              rcall _keypad
 00AA 602F              mov R22,R16
 00AC                   .dbline 74
 00AC           ;        value_temp=*value;
 00AC E42F              mov R30,R20
 00AE F52F              mov R31,R21
 00B0 2080              ldd R2,z+0
 00B2 3180              ldd R3,z+1
 00B4 30920100          sts _value_temp+1,R3
 00B8 20920000          sts _value_temp,R2
 00BC                   .dbline 75
 00BC           ;        if(mode==1)
 00BC 80910000          lds R24,_mode
 00C0 8130              cpi R24,1
 00C2 09F0              breq X3
 00C4 4EC1              rjmp L24
 00C6           X3:
 00C6                   .dbline 76
 00C6           ;        {
 00C6                   .dbline 77
 00C6           ;                switch (temp)
 00C6 A62E              mov R10,R22
 00C8 BB24              clr R11
 00CA 8A2D              mov R24,R10
 00CC 9B2D              mov R25,R11
 00CE 8130              cpi R24,1
 00D0 E0E0              ldi R30,0
 00D2 9E07              cpc R25,R30
 00D4 51F0              breq L29
 00D6 8330              cpi R24,3
 00D8 E0E0              ldi R30,0
 00DA 9E07              cpc R25,R30
 00DC 41F1              breq L31
 00DE 8430              cpi R24,4
 00E0 E0E0              ldi R30,0
 00E2 9E07              cpc R25,R30
 00E4 09F4              brne X4
 00E6 AFC0              rjmp L38
 00E8           X4:
 00E8 84C2              rjmp L25
 00EA           X1:
 00EA                   .dbline 78
 00EA           ;                {
 00EA           L29:
 00EA                   .dbline 80
 00EA           ;                case KEY_FN:
 00EA           ;                         mode=2;
 00EA 82E0              ldi R24,2
 00EC 80930000          sts _mode,R24
 00F0                   .dbline 81
 00F0           ;                         LCD_write_string(0,1,"  ^    seting...");
 00F0 80E0              ldi R24,<L30
 00F2 90E0              ldi R25,>L30
 00F4 9983              std y+1,R25
 00F6 8883              std y+0,R24
 00F8 21E0              ldi R18,1
 00FA 0027              clr R16
 00FC 00D0              rcall _LCD_write_string
 00FE                   .dbline 82
 00FE           ;                         j=0;
 00FE 2224              clr R2
 0100 20920000          sts _j,R2
 0104                   .dbline 83
 0104           ;                         LCD_display(2,0,4,*value);
 0104 E42F              mov R30,R20
 0106 F52F              mov R31,R21
 0108 2080              ldd R2,z+0
 010A 3180              ldd R3,z+1
 010C 4424              clr R4
 010E 5524              clr R5
 0110 2A82              std y+2,R2
 0112 3B82              std y+3,R3
 0114 4C82              std y+4,R4
 0116 5D82              std y+5,R5
 0118 84E0              ldi R24,4
 011A 8883              std y+0,R24
 011C 2227              clr R18
 011E 02E0              ldi R16,2
 0120 00D0              rcall _LCD_display
 0122                   .dbline 84
 0122           ;                         data_init(*value);   // 送缓冲
 0122 E42F              mov R30,R20
 0124 F52F              mov R31,R21
 0126 0081              ldd R16,z+0
 0128 1181              ldd R17,z+1
 012A 00D0              rcall _data_init
 012C                   .dbline 85
 012C           ;                         break;
 012C 62C2              rjmp L25
 012E           L31:
 012E                   .dbline 87
 012E           ;                case KEY_INC:
 012E           ;                         (*value)++;
 012E E42F              mov R30,R20
 0130 F52F              mov R31,R21
 0132 8081              ldd R24,z+0
 0134 9181              ldd R25,z+1
 0136 0196              adiw R24,1
 0138 9183              std z+1,R25
 013A 8083              std z+0,R24
 013C                   .dbline 88
 013C           ;                         if(*value>2000) (*value)=2000;
 013C 80ED              ldi R24,2000
 013E 97E0              ldi R25,7
 0140 2080              ldd R2,z+0
 0142 3180              ldd R3,z+1
 0144 8215              cp R24,R2
 0146 9305              cpc R25,R3
 0148 10F4              brsh L32
 014A                   .dbline 88
 014A 9183              std z+1,R25

⌨️ 快捷键说明

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