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

📄 16按键.lis

📁 AVR之ATMega16
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0054           ; }
 0054           ; 
 0054           ; 
 0054           ; void init_devices(void)
 0054           ; {
 0054                   .dbline 35
 0054           ;  CLI(); //禁止所有中断
 0054 F894              cli
 0056                   .dbline 36
 0056           ;  MCUCR  = 0x00;//外部中断触发方式
 0056 2224              clr R2
 0058 25BE              out 0x35,R2
 005A                   .dbline 37
 005A           ;  MCUCSR = 0x80;//禁止JTAG
 005A 80E8              ldi R24,128
 005C 84BF              out 0x34,R24
 005E                   .dbline 38
 005E           ;  GICR   = 0x00;//外部中断使能
 005E 2BBE              out 0x3b,R2
 0060                   .dbline 39
 0060           ;  port_init();
 0060 EEDF              xcall _port_init
 0062                   .dbline -2
 0062           L14:
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbend
 0064                   .dbfunc e keyboard _keyboard fc
 0064           ;              i -> R20
 0064           ;            key -> R20
 0064           ;              b -> R22
 0064           ;              a -> R10
                        .even
 0064           _keyboard::
 0064 0E940000          xcall push_gset3
 0068                   .dbline -1
 0068                   .dbline 43
 0068           ;  //SEI();//开全局中断
 0068           ; }
 0068           ; uchar keyboard(void)  //读取键盘
 0068           ;       {
 0068                   .dbline 44
 0068           ;                             uchar i=0;
 0068 4427              clr R20
 006A                   .dbline 45
 006A           ;                             uchar a=0;
 006A AA24              clr R10
 006C                   .dbline 46
 006C           ;                             uchar b=0;
 006C 6627              clr R22
 006E                   .dbline 47
 006E           ;                             uchar key=0;
 006E                   .dbline 48
 006E           ;                             DDRC=0x0f;//D口前四位输入,后四位输出
 006E 8FE0              ldi R24,15
 0070 84BB              out 0x14,R24
 0072                   .dbline 50
 0072           ;                             //DelayUS(10);
 0072           ;                                 PORTC=0xf0;//D口前四位置1,后四位置0
 0072 80EF              ldi R24,240
 0074 85BB              out 0x15,R24
 0076                   .dbline 51
 0076           ;                             DelayUS(10);
 0076 0AE0              ldi R16,10
 0078 10E0              ldi R17,0
 007A C2DF              xcall _DelayUS
 007C                   .dbline 52
 007C           ;                             a=PINC&0xf0; //读取D口前四位数值
 007C 83B3              in R24,0x13
 007E 807F              andi R24,240
 0080 A82E              mov R10,R24
 0082                   .dbline 53
 0082           ;                             DDRC=0xf0;//D口前四位输出,后四位输入
 0082 80EF              ldi R24,240
 0084 84BB              out 0x14,R24
 0086                   .dbline 55
 0086           ;                             //DelayUS(10);
 0086           ;                                 PORTC=0x0f;//D口后四位置1,前四位置0
 0086 8FE0              ldi R24,15
 0088 85BB              out 0x15,R24
 008A                   .dbline 56
 008A           ;                             DelayUS(10);
 008A 0AE0              ldi R16,10
 008C 10E0              ldi R17,0
 008E B8DF              xcall _DelayUS
 0090                   .dbline 57
 0090           ;                             b=PINC&0x0f; //读取D口后四位数值
 0090 63B3              in R22,0x13
 0092 6F70              andi R22,15
 0094                   .dbline 58
 0094           ;                             key=a+b;//D口八位数据赋予key
 0094 4A2D              mov R20,R10
 0096 460F              add R20,R22
 0098                   .dbline 59
 0098           ;                             return key;
 0098 042F              mov R16,R20
 009A                   .dbline -2
 009A           L15:
 009A 0E940000          xcall pop_gset3
 009E                   .dbline 0 ; func end
 009E 0895              ret
 00A0                   .dbsym r i 20 c
 00A0                   .dbsym r key 20 c
 00A0                   .dbsym r b 22 c
 00A0                   .dbsym r a 10 c
 00A0                   .dbend
 00A0                   .dbfunc e jianzhi _jianzhi fV
 00A0           ;             m2 -> R10
 00A0           ;             m1 -> R20
 00A0           ;              i -> R22
                        .even
 00A0           _jianzhi::
 00A0 0E940000          xcall push_gset3
 00A4                   .dbline -1
 00A4                   .dbline 62
 00A4           ;       }
 00A4           ; void jianzhi(void)//取得键值
 00A4           ;      {
 00A4                   .dbline 63
 00A4           ;        uchar m1,m2,i=0;
 00A4 6627              clr R22
 00A6                   .dbline 64
 00A6           ;                   if (keyboard()!=0xff)
 00A6 DEDF              xcall _keyboard
 00A8 0F3F              cpi R16,255
 00AA C1F0              breq L17
 00AC                   .dbline 65
 00AC           ;           {
 00AC                   .dbline 66
 00AC           ;                 m1=keyboard();//调用读取键盘程序
 00AC DBDF              xcall _keyboard
 00AE 402F              mov R20,R16
 00B0                   .dbline 67
 00B0           ;                 DelayMS(10);
 00B0 0AE0              ldi R16,10
 00B2 10E0              ldi R17,0
 00B4 AEDF              xcall _DelayMS
 00B6                   .dbline 68
 00B6           ;                 m2=keyboard();//调用两次
 00B6 D6DF              xcall _keyboard
 00B8 A02E              mov R10,R16
 00BA                   .dbline 69
 00BA           ;                 if (m1==m2)
 00BA 4017              cp R20,R16
 00BC 79F4              brne L19
 00BE                   .dbline 70
 00BE           ;                 {
 00BE                   .dbline 71
 00BE           ;                       for (i=0;i<16;i++)
 00BE 0CC0              xjmp L24
 00C0           L21:
 00C0                   .dbline 72
 00C0           ;                       {
 00C0                   .dbline 73
 00C0           ;                           if (m1==key_board[i])//循环判断读取数值与按键键值是否相同
 00C0 80E0              ldi R24,<_key_board
 00C2 90E0              ldi R25,>_key_board
 00C4 E62F              mov R30,R22
 00C6 FF27              clr R31
 00C8 E80F              add R30,R24
 00CA F91F              adc R31,R25
 00CC 2080              ldd R2,z+0
 00CE 4215              cp R20,R2
 00D0 11F4              brne L25
 00D2                   .dbline 74
 00D2           ;                           {
 00D2                   .dbline 75
 00D2           ;                                       anjianzhi=i;//数值赋予变量
 00D2 60930000          sts _anjianzhi,R22
 00D6                   .dbline 76
 00D6           ;                           }
 00D6           L25:
 00D6                   .dbline 77
 00D6           L22:
 00D6                   .dbline 71
 00D6 6395              inc R22
 00D8           L24:
 00D8                   .dbline 71
 00D8 6031              cpi R22,16
 00DA 90F3              brlo L21
 00DC                   .dbline 78
 00DC           ;                       }
 00DC           ;                 }
 00DC           L19:
 00DC                   .dbline 79
 00DC           L17:
 00DC                   .dbline -2
 00DC           L16:
 00DC 0E940000          xcall pop_gset3
 00E0                   .dbline 0 ; func end
 00E0 0895              ret
 00E2                   .dbsym r m2 10 c
 00E2                   .dbsym r m1 20 c
 00E2                   .dbsym r i 22 c
 00E2                   .dbend
 00E2                   .dbfunc e main _main fV
                        .even
 00E2           _main::
 00E2                   .dbline -1
 00E2                   .dbline 83
 00E2           ;           }
 00E2           ;      }
 00E2           ; //主函数
 00E2           ; void main(void)
 00E2           ; { 
 00E2                   .dbline 84
 00E2           ;  init_devices();
 00E2 B8DF              xcall _init_devices
 00E4 0FC0              xjmp L29
 00E6           L28:
 00E6                   .dbline 87
 00E6                   .dbline 89
 00E6 DCDF              xcall _jianzhi
 00E8                   .dbline 90
 00E8 80E0              ldi R24,<_led_date
 00EA 90E0              ldi R25,>_led_date
 00EC E0910000          lds R30,_anjianzhi
 00F0 FF27              clr R31
 00F2 E80F              add R30,R24
 00F4 F91F              adc R31,R25
 00F6 2080              ldd R2,z+0
 00F8 2BBA              out 0x1b,R2
 00FA                   .dbline 91
 00FA 8EEF              ldi R24,254
 00FC 88BB              out 0x18,R24
 00FE                   .dbline 92
 00FE 04E6              ldi R16,100
 0100 10E0              ldi R17,0
 0102 87DF              xcall _DelayMS
 0104                   .dbline 94
 0104           L29:
 0104                   .dbline 86
 0104 F0CF              xjmp L28
 0106           X1:
 0106                   .dbline -2
 0106           L27:
 0106                   .dbline 0 ; func end
 0106 0895              ret
 0108                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
 0000           _anjianzhi::
 0000                   .blkb 1
 0001                   .dbsym e anjianzhi _anjianzhi c

⌨️ 快捷键说明

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