📄 key_ment.lis
字号:
.module Key_ment.c
.area text(rom, con, rel)
0000 .dbfile F:\Work\Data\程序\修订版~1.1\Key_ment.c
0000 .dbfunc e Keyscan _Keyscan fc
0000 ; KeyCode -> R20
.even
0000 _Keyscan::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 .dbline -1
0004 .dbline 19
0004 ; /*****************************************************
0004 ; * File name : Keyscan.C
0004 ; * Description : Header file of LCD_S.H
0004 ; * Platform : ICCAVR
0004 ; * Author : xiao xue
0004 ; * Email : ay1509@yahoo.com
0004 ; * Date : 2008-03-13
0004 ; * Description :Keyboard Scan
0004 ; *********************头文件**************************/
0004 ; #include "main_H.h"
0004 ; /***************************************************
0004 ; *函 数:KeyScan
0004 ; *函数功能:按键扫描程序
0004 ; *入口参数:无
0004 ; *返 回 值:键码
0004 ; *备 注:
0004 ; ****************************************************/
0004 ; uchar Keyscan(void)
0004 ; {
0004 .dbline 20
0004 ; uchar KeyCode=0x00;
0004 4427 clr R20
0006 .dbline 21
0006 ; if((PIND&0xfb)==0xfb) //判断有无键按下,没有则直接返回
0006 80B3 in R24,0x10
0008 8B7F andi R24,251
000A 8B3F cpi R24,251
000C 11F4 brne L2
000E X0:
000E .dbline 22
000E ; return(0);
000E 0027 clr R16
0010 43C0 rjmp L1
0012 L2:
0012 .dbline 23
0012 ; else{
0012 .dbline 24
0012 ; delay_nms(15); //延时去抖动
0012 0FE0 ldi R16,15
0014 10E0 ldi R17,0
0016 00D0 rcall _delay_nms
0018 .dbline 25
0018 ; KeyCode = PIND&0xfb;//获得D口键值
0018 40B3 in R20,0x10
001A 4B7F andi R20,251
001C .dbline 26
001C ; if (KeyCode == 0xfb)//再次继续判断有无键按下,无则返回
001C 4B3F cpi R20,251
001E 11F4 brne L7
0020 X1:
0020 .dbline 27
0020 ; return(0);
0020 0027 clr R16
0022 3AC0 rjmp L1
0024 L6:
0024 .dbline 28
0024 ; while ((PIND&0xfb) != 0xfb); //等待弹起
0024 L7:
0024 .dbline 28
0024 80B3 in R24,0x10
0026 8B7F andi R24,251
0028 8B3F cpi R24,251
002A E1F7 brne L6
002C X2:
002C .dbline 29
002C ; delay_nms(15); //延时去抖动
002C 0FE0 ldi R16,15
002E 10E0 ldi R17,0
0030 00D0 rcall _delay_nms
0032 L9:
0032 .dbline 30
0032 ; while ((PIND&0xfb) != 0xfb); //再次判断是否弹起
0032 L10:
0032 .dbline 30
0032 80B3 in R24,0x10
0034 8B7F andi R24,251
0036 8B3F cpi R24,251
0038 E1F7 brne L9
003A X3:
003A .dbline 31
003A ; switch(KeyCode){
003A 5527 clr R21
003C 4B3D cpi R20,219
003E E0E0 ldi R30,0
0040 5E07 cpc R21,R30
0042 19F1 breq L17
0044 X4:
0044 8BED ldi R24,219
0046 90E0 ldi R25,0
0048 8417 cp R24,R20
004A 9507 cpc R25,R21
004C 6CF0 brlt L21
004E X5:
004E L20:
004E 4B37 cpi R20,123
0050 E0E0 ldi R30,0
0052 5E07 cpc R21,R30
0054 F1F0 breq L19
0056 X6:
0056 4B37 cpi R20,123
0058 E0E0 ldi R30,0
005A 5E07 cpc R21,R30
005C E4F0 brlt L12
005E X7:
005E L22:
005E 4B3B cpi R20,187
0060 E0E0 ldi R30,0
0062 5E07 cpc R21,R30
0064 A1F0 breq L18
0066 X8:
0066 17C0 rjmp L12
0068 L21:
0068 4B3E cpi R20,235
006A E0E0 ldi R30,0
006C 5E07 cpc R21,R30
006E 59F0 breq L16
0070 X9:
0070 4B3E cpi R20,235
0072 E0E0 ldi R30,0
0074 5E07 cpc R21,R30
0076 7CF0 brlt L12
0078 X10:
0078 L23:
0078 433F cpi R20,243
007A E0E0 ldi R30,0
007C 5E07 cpc R21,R30
007E 09F0 breq L15
0080 X11:
0080 0AC0 rjmp L12
0082 L15:
0082 .dbline 32
0082 ; case 0xf3:return(1);break; //按键1
0082 01E0 ldi R16,1
0084 09C0 rjmp L1
0086 L16:
0086 .dbline 33
0086 ; case 0xeb:return(2);break; //按键2
0086 02E0 ldi R16,2
0088 07C0 rjmp L1
008A L17:
008A .dbline 34
008A ; case 0xdb:return(3);break; //按键3
008A 03E0 ldi R16,3
008C 05C0 rjmp L1
008E L18:
008E .dbline 35
008E ; case 0xbb:return(4);break;
008E 04E0 ldi R16,4
0090 03C0 rjmp L1
0092 L19:
0092 .dbline 36
0092 ; case 0x7b:return(5);break;
0092 05E0 ldi R16,5
0094 01C0 rjmp L1
0096 L12:
0096 .dbline 37
0096 ; default: return(6);break; //其他特殊情况
0096 06E0 ldi R16,6
0098 .dbline 37
0098 .dbline -2
0098 L1:
0098 .dbline 0 ; func end
0098 5991 ld R21,y+
009A 4991 ld R20,y+
009C 0895 ret
009E .dbsym r KeyCode 20 c
009E .dbend
009E .dbfunc e KeyInit _KeyInit fV
.even
009E _KeyInit::
009E .dbline -1
009E .dbline 50
009E ; }//end switch
009E ; }//end else
009E ; }
009E ;
009E ; /***************************************************
009E ; *函 数:KeyInit
009E ; *函数功能:按键端口初始化
009E ; *入口参数:无
009E ; *返 回 值:无
009E ; *备 注:
009E ; ****************************************************/
009E ; void KeyInit(void)
009E ; {
009E .dbline 51
009E ; DDRD=0x04; //键盘初化
009E 84E0 ldi R24,4
00A0 81BB out 0x11,R24
00A2 .dbline 52
00A2 ; PORTD=0xfb; //键盘初值
00A2 8BEF ldi R24,251
00A4 82BB out 0x12,R24
00A6 .dbline -2
00A6 L24:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbend
00A8 .dbfunc e data_memory _data_memory fV
.even
00A8 _data_memory::
00A8 .dbline -1
00A8 .dbline 63
00A8 ;
00A8 ; }
00A8 ; /***************************************************
00A8 ; *函 数:data_memory
00A8 ; *函数功能:对键盘设定的数据进行存储
00A8 ; *入口参数:无
00A8 ; *返 回 值:无
00A8 ; *备 注:
00A8 ; ****************************************************/
00A8 ; void data_memory(void)
00A8 ; {
00A8 .dbline 64
00A8 ; switch(temp){ //存储运动模式
00A8 00910000 lds R16,_temp
00AC 1127 clr R17
00AE 0030 cpi R16,0
00B0 0107 cpc R16,R17
00B2 69F0 breq L29
00B4 X12:
00B4 0130 cpi R16,1
00B6 E0E0 ldi R30,0
00B8 1E07 cpc R17,R30
00BA 81F0 breq L30
00BC X13:
00BC 0230 cpi R16,2
00BE E0E0 ldi R30,0
00C0 1E07 cpc R17,R30
00C2 99F0 breq L31
00C4 X14:
00C4 0330 cpi R16,3
00C6 E0E0 ldi R30,0
00C8 1E07 cpc R17,R30
00CA B1F0 breq L32
00CC X15:
00CC 1BC0 rjmp L26
00CE L29:
00CE .dbline 65
00CE ; case 0: p=Pretty;break; //天女散花
00CE 80E0 ldi R24,<_Pretty
00D0 90E0 ldi R25,>_Pretty
00D2 90930100 sts _p+1,R25
00D6 80930000 sts _p,R24
00DA .dbline 65
00DA 14C0 rjmp L27
00DC L30:
00DC .dbline 66
00DC ; case 1: p=Thest;break; //扩胸运动
00DC 80E0 ldi R24,<_Thest
00DE 90E0 ldi R25,>_Thest
00E0 90930100 sts _p+1,R25
00E4 80930000 sts _p,R24
00E8 .dbline 66
00E8 0DC0 rjmp L27
00EA L31:
00EA .dbline 67
00EA ; case 2: p=Armup;break; //振臂运动
00EA 80E0 ldi R24,<_Armup
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -