📄 图康科技.lst
字号:
597 C058 RJMP 0x05F0
598 9180 01ED LDS R24,0x01ED
59A 3F8F CPI R24,0xFF
59B F009 BEQ 0x059D
59C C053 RJMP 0x05F0
(0165) (get[14]==0xff)&&(get[20]==0xff)){
(0166)
(0167) get[2]=0x00; //各节点控制指令清零
59D 2422 CLR R2
59E 9220 01DB STS get+2,R2
(0168) get[8]=0x00;
5A0 9220 01E1 STS 0x01E1,R2
(0169) get[14]=0x00;
5A2 9220 01E7 STS 0x01E7,R2
(0170) get[20]=0x00;
5A4 9220 01ED STS 0x01ED,R2
(0171)
(0172) if(i<((p[1]-1)*5+1)){ //未到达设定的循环开始步数
5A6 91E0 01D7 LDS R30,p
5A8 91F0 01D8 LDS R31,p+1
5AA 8021 LDD R2,Z+1
5AB E085 LDI R24,5
5AC 9D82 MUL R24,R2
5AD 2D80 MOV R24,R0
5AE 5085 SUBI R24,5
5AF 5F8F SUBI R24,0xFF
5B0 9020 012D LDS R2,i
5B2 1628 CP R2,R24
5B3 F410 BCC 0x05B6
(0173) step_for(); //相应处理函数
5B4 DEA7 RCALL _step_for
(0174) }//end if
5B5 C025 RJMP 0x05DB
(0175) else if((i>(p[1]-1)*5+1)&&(j==1)){ //已经到达设定的运动步数
5B6 91E0 01D7 LDS R30,p
5B8 91F0 01D8 LDS R31,p+1
5BA 8021 LDD R2,Z+1
5BB E085 LDI R24,5
5BC 9D82 MUL R24,R2
5BD 01C0 MOVW R24,R0
5BE 9705 SBIW R24,5
5BF 9601 ADIW R24,1
5C0 9020 012D LDS R2,i
5C2 2433 CLR R3
5C3 1582 CP R24,R2
5C4 0593 CPC R25,R3
5C5 F434 BGE 0x05CC
5C6 9180 012E LDS R24,j
5C8 3081 CPI R24,1
5C9 F411 BNE 0x05CC
(0176) step_back(); //相应处理函数
5CA DF06 RCALL _step_back
(0177) }//end else if
5CB C00F RJMP 0x05DB
(0178) else{ //是否到达运动循环开始的第一步
(0179) j=1;
5CC E081 LDI R24,1
5CD 9380 012E STS j,R24
(0180) i=((p[1]-1)*5+2); //准备执行下一步
5CF 91E0 01D7 LDS R30,p
5D1 91F0 01D8 LDS R31,p+1
5D3 8021 LDD R2,Z+1
5D4 E085 LDI R24,5
5D5 9D82 MUL R24,R2
5D6 2D80 MOV R24,R0
5D7 5085 SUBI R24,5
5D8 5F8E SUBI R24,0xFE
5D9 9380 012D STS i,R24
(0181) }//end else
(0182) if(i==(p[0]*5+2)){ //是否到达最后一步
5DB 91E0 01D7 LDS R30,p
5DD 91F0 01D8 LDS R31,p+1
5DF 8020 LDD R2,Z+0
5E0 E085 LDI R24,5
5E1 9D82 MUL R24,R2
5E2 2D80 MOV R24,R0
5E3 5F8E SUBI R24,0xFE
5E4 9020 012D LDS R2,i
5E6 1628 CP R2,R24
5E7 F441 BNE 0x05F0
(0183) i=(p[1]-1)*5+2; //重新从第一条指令开始执行
5E8 8021 LDD R2,Z+1
5E9 E085 LDI R24,5
5EA 9D82 MUL R24,R2
5EB 2D80 MOV R24,R0
5EC 5085 SUBI R24,5
5ED 5F8E SUBI R24,0xFE
5EE 9380 012D STS i,R24
5F0 CF8B RJMP 0x057C
5F1 9508 RET
_Keyscan:
KeyCode --> R20
5F2 934A ST R20,-Y
5F3 935A ST R21,-Y
FILE: F:\Work\Data\程序\修订版~1.1\Key_ment.c
(0001) /*****************************************************
(0002) * File name : Keyscan.C
(0003) * Description : Header file of LCD_S.H
(0004) * Platform : ICCAVR
(0005) * Author : xiao xue
(0006) * Email : ay1509@yahoo.com
(0007) * Date : 2008-03-13
(0008) * Description :Keyboard Scan
(0009) *********************头文件**************************/
(0010) #include "main_H.h"
(0011) /***************************************************
(0012) *函 数:KeyScan
(0013) *函数功能:按键扫描程序
(0014) *入口参数:无
(0015) *返 回 值:键码
(0016) *备 注:
(0017) ****************************************************/
(0018) uchar Keyscan(void)
(0019) {
(0020) uchar KeyCode=0x00;
5F4 2744 CLR R20
(0021) if((PIND&0xfb)==0xfb) //判断有无键按下,没有则直接返回
5F5 B380 IN R24,0x10
5F6 7F8B ANDI R24,0xFB
5F7 3F8B CPI R24,0xFB
5F8 F411 BNE 0x05FB
(0022) return(0);
5F9 2700 CLR R16
5FA C043 RJMP 0x063E
(0023) else{
(0024) delay_nms(15); //延时去抖动
5FB E00F LDI R16,0xF
5FC E010 LDI R17,0
5FD DD37 RCALL _delay_nms
(0025) KeyCode = PIND&0xfb;//获得D口键值
5FE B340 IN R20,0x10
5FF 7F4B ANDI R20,0xFB
(0026) if (KeyCode == 0xfb)//再次继续判断有无键按下,无则返回
600 3F4B CPI R20,0xFB
601 F411 BNE 0x0604
(0027) return(0);
602 2700 CLR R16
603 C03A RJMP 0x063E
(0028) while ((PIND&0xfb) != 0xfb); //等待弹起
604 B380 IN R24,0x10
605 7F8B ANDI R24,0xFB
606 3F8B CPI R24,0xFB
607 F7E1 BNE 0x0604
(0029) delay_nms(15); //延时去抖动
608 E00F LDI R16,0xF
609 E010 LDI R17,0
60A DD2A RCALL _delay_nms
(0030) while ((PIND&0xfb) != 0xfb); //再次判断是否弹起
60B B380 IN R24,0x10
60C 7F8B ANDI R24,0xFB
60D 3F8B CPI R24,0xFB
60E F7E1 BNE 0x060B
(0031) switch(KeyCode){
60F 2755 CLR R21
610 3D4B CPI R20,0xDB
611 E0E0 LDI R30,0
612 075E CPC R21,R30
613 F119 BEQ 0x0637
614 ED8B LDI R24,0xDB
615 E090 LDI R25,0
616 1784 CP R24,R20
617 0795 CPC R25,R21
618 F06C BLT 0x0626
619 374B CPI R20,0x7B
61A E0E0 LDI R30,0
61B 075E CPC R21,R30
61C F0F1 BEQ 0x063B
61D 374B CPI R20,0x7B
61E E0E0 LDI R30,0
61F 075E CPC R21,R30
620 F0E4 BLT 0x063D
621 3B4B CPI R20,0xBB
622 E0E0 LDI R30,0
623 075E CPC R21,R30
624 F0A1 BEQ 0x0639
625 C017 RJMP 0x063D
626 3E4B CPI R20,0xEB
627 E0E0 LDI R30,0
628 075E CPC R21,R30
629 F059 BEQ 0x0635
62A 3E4B CPI R20,0xEB
62B E0E0 LDI R30,0
62C 075E CPC R21,R30
62D F07C BLT 0x063D
62E 3F43 CPI R20,0xF3
62F E0E0 LDI R30,0
630 075E CPC R21,R30
631 F009 BEQ 0x0633
632 C00A RJMP 0x063D
(0032) case 0xf3:return(1);break; //按键1
633 E001 LDI R16,1
634 C009 RJMP 0x063E
(0033) case 0xeb:return(2);break; //按键2
635 E002 LDI R16,2
636 C007 RJMP 0x063E
(0034) case 0xdb:return(3);break; //按键3
637 E003 LDI R16,3
638 C005 RJMP 0x063E
(0035) case 0xbb:return(4);break;
639 E004 LDI R16,4
63A C003 RJMP 0x063E
(0036) case 0x7b:return(5);break;
63B E005 LDI R16,5
63C C001 RJMP 0x063E
(0037) default: return(6);break; //其他特殊情况
63D E006 LDI R16,6
63E 9159 LD R21,Y+
63F 9149 LD R20,Y+
640 9508 RET
(0038) }//end switch
(0039) }//end else
(0040) }
(0041)
(0042) /***************************************************
(0043) *函 数:KeyInit
(0044) *函数功能:按键端口初始化
(0045) *入口参数:无
(0046) *返 回 值:无
(0047) *备 注:
(0048) ****************************************************/
(0049) void KeyInit(void)
(0050) {
(0051) DDRD=0x04; //键盘初化
_KeyInit:
641 E084 LDI R24,4
642 BB81 OUT 0x11,R24
(0052) PORTD=0xfb; //键盘初值
643 EF8B LDI R24,0xFB
644 BB82 OUT 0x12,R24
645 9508 RET
(0053)
(0054) }
(0055) /***************************************************
(0056) *函 数:data_memory
(0057) *函数功能:对键盘设定的数据进行存储
(0058) *入口参数:无
(0059) *返 回 值:无
(0060) *备 注:
(0061) ****************************************************/
(0062) void data_memory(void)
(0063) {
(0064) switch(temp){ //存储运动模式
_data_memory:
646 9100 0110 LDS R16,temp
648 2711 CLR R17
649 3000 CPI R16,0
64A 0701 CPC R16,R17
64B F069 BEQ 0x0659
64C 3001 CPI R16,1
64D E0E0 LDI R30,0
64E 071E CPC R17,R30
64F F081 BEQ 0x0660
650 3002 CPI R16,2
651 E0E0 LDI R30,0
652 071E CPC R17,R30
653 F099 BEQ 0x0667
654 3003 CPI R16,3
655 E0E0 LDI R30,0
656 071E CPC R17,R30
657 F0B1 BEQ 0x066E
658 C01B RJMP 0x0674
(0065) case 0: p=Pretty;break; //天女散花
659 E381 LDI R24,0x31
65A E091 LDI R25,1
65B 9390 01D8 STS p+1,R25
65D 9380 01D7 STS p,R24
65F C014 RJMP 0x0674
(0066) case 1: p=Thest;break; //扩胸运动
660 E586 LDI R24,0x56
661 E091 LDI R25,1
662 9390 01D8 STS p+1,R25
664 9380 01D7 STS p,R24
666 C00D RJMP 0x0674
(0067) case 2: p=Armup;break; //振臂运动
667 E78B LDI R24,0x7B
668 E091 LDI R25,1
669 9390 01D8 STS p+1,R25
66B 9380 01D7 STS p,R24
66D C006 RJMP 0x0674
(0068) case 3: p=Armdown;break; //甩臂运动
66E EA80 LDI R24,0xA0
66F E091 LDI R25,1
670 9390 01D8 STS p+1,R25
672 9380 01D7 STS p,R24
(0069) }//end switch
(0070) switch(temp1){ //存储幅度值
674 9100 0111 LDS R16,temp1
676 2711 CLR R17
677 3000 CPI R16,0
678 0701 CPC R16,R17
679 F089 BEQ 0x068B
67A 3001 CPI R16,1
67B E0E0 LDI R30,0
67C 071E CPC R17,R30
67D F0A1 BEQ 0x0692
67E 3002 CPI R16,2
67F E0E0 LDI R30,0
680 071E CPC R17,R30
681 F0B9 BEQ 0x0699
682 3003 CPI R16,3
683 E0E0 LDI R30,0
684 071E CPC R17,R30
685 F0D1 BEQ 0x06A0
686 3004 CPI R16,4
687 E0E0 LDI R30,0
688 071E CPC R17,R30
689 F0E9 BEQ 0x06A7
68A C022 RJMP 0x06AD
(0071) case 0: status[1]=0x3C;break;
68B E38C LDI R24,0x3C
68C E090 LDI R25,0
68D 9390 01C8 STS status+3,R25
68F 9380 01C7 STS status+2,R24
691 C01B RJMP 0x06AD
(0072) case 1: status[1]=0x46;break;
692 E486 LDI R24,0x46
693 E090 LDI R25,0
694 9390 01C8 STS status+3,R25
696 9380 01C7 STS status+2,R24
698 C014 RJMP 0x06AD
(0073) case 2: status[1]=0x50;break;
699 E580 LDI R24,0x50
69A E090 LDI R25,0
69B 9390 01C8 STS status+3,R25
69D 9380 01C7 STS status+2,R24
69F C00D RJMP 0x06AD
(0074) case 3: status[1]=0x5A;break;
6A0 E58A LDI R24,0x5A
6A1 E090 LDI R25,0
6A2 9390 01C8 STS status+3,R25
6A4 9380 01C7 STS status+2,R24
6A6 C006 RJMP 0x06AD
(0075) case 4: status[1]=0x64;break;
6A7 E684 LDI R24,0x64
6A8 E090 LDI R25,0
6A9 9390 01C8 STS status+3,R25
6AB 9380 01C7 STS status+2,R24
(0076) }
(0077) switch(temp2){ //存储时间值
6AD 9100 0112 LDS R16,temp2
6AF 2711 CLR R17
6B0 3000 CPI R16,0
6B1 0701 CPC R16,R17
6B2 F089 BEQ 0x06C4
6B3 3001 CPI R16,1
6B4 E0E0 LDI R30,0
6B5 071E CPC R17,R30
6B6 F0A1 BEQ 0x06CB
6B7 3002 CPI R16,2
6B8 E0E0 LDI R30,0
6B9 071E CPC R17,R30
6BA F0B9 BEQ 0x06D2
6BB 3003 CPI R16,3
6BC E0E0 LDI R30,0
6BD 071E CPC R17,R30
6BE F0D1 BEQ 0x06D9
6BF 3004 CPI R16,4
6C0 E0E0 LDI R30,0
6C1 071E CPC R17,R30
6C2 F0E9 BEQ 0x06E0
6C3 C022 RJMP 0x06E6
(0078) case 0: status[2]=300;break;
6C4 E28C LDI R24,0x2C
6C5 E091 LDI R25,1
6C6 9390 01CA STS 0x01CA,R25
6C8 9380 01C9 STS 0x01C9,R24
6CA C01B RJMP 0x06E6
(0079) case 1: status[2]=600;break;
6CB E588 LDI R24,0x58
6CC E092 LDI R25,2
6CD 9390 01CA STS 0x01CA,R25
6CF 9380 01C9 STS 0x01C9,R24
6D1 C014 RJMP 0x06E6
(0080) case 2: status[2]=900;break;
6D2 E884 LDI R24,0x84
6D3 E093 LDI R25,3
6D4 9390 01CA STS 0x01CA,R25
6D6 9380 01C9 STS 0x01C9,R24
6D8 C00D RJMP 0x06E6
(0081) case 3: status[2]=1200;break;
6D9 EB80 LDI R24,0xB0
6DA E094 LDI R25,4
6DB 9390 01CA STS 0x01CA,R25
6DD 9380 01C9 STS 0x01C9,R24
6DF C006 RJMP 0x06E6
(0082) case 4: status[2]=1500;break;
6E0 ED8C LDI R24,0xDC
6E1 E095 LDI R25,5
6E2 9390 01CA STS 0x01CA,R25
6E4 9380 01C9 STS 0x01C9,R24
(0083) }
(0084) moto1[2]=status[0]; //存储模式控制字
6E6 9020 01C5 LDS R2,status
6E8 9030 01C6 LDS R3,status+1
6EA 9220 0116 STS moto1+2,R2
(0085) moto2[2]=status[0];
6EC 9220 011C STS moto2+2,R2
(0086) moto3[2]=status[0];
6EE 9220 0122 STS moto3+2,R2
(0087) moto4[2]=status[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -