📄 16按键.lis
字号:
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 + -