📄 ch452l.lst
字号:
00D6 D0E5 RCALL push_gset2
00D7 01A9 MOVW R20,R18
00D8 2F60 MOV R22,R16
(0151) }
(0152)
(0153) /***************************************************************************
(0154) *函数名:
(0155) *功能:
(0156) *入口参数:
(0157) n 要显示的数码管的位数
(0158) *p 要显示的数码管的值,BCD码,在显示前将要显示的数码管的BCD码存入该数组
(0159) *出口参数:
(0160) ****************************************************************************/
(0161) void Display_Ch452lBCD(unsigned char n,unsigned char *p)
(0162) {
(0163) unsigned char i;
(0164) switch(n)
00D9 2777 CLR R23
00DA 3061 CPI R22,1
00DB E0E0 LDI R30,0
00DC 077E CPC R23,R30
00DD F101 BEQ 0x00FE
00DE 3062 CPI R22,2
00DF E0E0 LDI R30,0
00E0 077E CPC R23,R30
00E1 F119 BEQ 0x0105
00E2 3063 CPI R22,3
00E3 E0E0 LDI R30,0
00E4 077E CPC R23,R30
00E5 F131 BEQ 0x010C
00E6 3064 CPI R22,4
00E7 E0E0 LDI R30,0
00E8 077E CPC R23,R30
00E9 F149 BEQ 0x0113
00EA 3065 CPI R22,5
00EB E0E0 LDI R30,0
00EC 077E CPC R23,R30
00ED F161 BEQ 0x011A
00EE 3066 CPI R22,6
00EF E0E0 LDI R30,0
00F0 077E CPC R23,R30
00F1 F409 BNE 0x00F3
00F2 C02E RJMP 0x0121
00F3 3067 CPI R22,7
00F4 E0E0 LDI R30,0
00F5 077E CPC R23,R30
00F6 F409 BNE 0x00F8
00F7 C030 RJMP 0x0128
00F8 3068 CPI R22,0x8
00F9 E0E0 LDI R30,0
00FA 077E CPC R23,R30
00FB F409 BNE 0x00FD
00FC C032 RJMP 0x012F
00FD C037 RJMP 0x0135
(0165) {
(0166) case(1):
(0167) Ch452l_Writecommand(0x0590);//1位显示,BCD译码
00FE E900 LDI R16,0x90
00FF E015 LDI R17,5
0100 DFAD RCALL _Ch452l_Writecommand
(0168) Delay_Nus(3);
0101 E003 LDI R16,3
0102 E010 LDI R17,0
0103 DF7C RCALL _Delay_Nus
(0169) break;
0104 C030 RJMP 0x0135
(0170) case(2):
(0171) Ch452l_Writecommand(0x05a0);//2位显示,BCD译码
0105 EA00 LDI R16,0xA0
0106 E015 LDI R17,5
0107 DFA6 RCALL _Ch452l_Writecommand
(0172) Delay_Nus(3);
0108 E003 LDI R16,3
0109 E010 LDI R17,0
010A DF75 RCALL _Delay_Nus
(0173) break;
010B C029 RJMP 0x0135
(0174) case(3):
(0175) Ch452l_Writecommand(0x05b0);//3位显示,BCD译码
010C EB00 LDI R16,0xB0
010D E015 LDI R17,5
010E DF9F RCALL _Ch452l_Writecommand
(0176) Delay_Nus(3);
010F E003 LDI R16,3
0110 E010 LDI R17,0
0111 DF6E RCALL _Delay_Nus
(0177) break;
0112 C022 RJMP 0x0135
(0178) case(4):
(0179) Ch452l_Writecommand(0x05c0);//4位显示,BCD译码
0113 EC00 LDI R16,0xC0
0114 E015 LDI R17,5
0115 DF98 RCALL _Ch452l_Writecommand
(0180) Delay_Nus(3);
0116 E003 LDI R16,3
0117 E010 LDI R17,0
0118 DF67 RCALL _Delay_Nus
(0181) break;
0119 C01B RJMP 0x0135
(0182) case(5):
(0183) Ch452l_Writecommand(0x05d0);//5位显示,BCD译码
011A ED00 LDI R16,0xD0
011B E015 LDI R17,5
011C DF91 RCALL _Ch452l_Writecommand
(0184) Delay_Nus(3);
011D E003 LDI R16,3
011E E010 LDI R17,0
011F DF60 RCALL _Delay_Nus
(0185) break;
0120 C014 RJMP 0x0135
(0186) case(6):
(0187) Ch452l_Writecommand(0x05e0);//6位显示,BCD译码
0121 EE00 LDI R16,0xE0
0122 E015 LDI R17,5
0123 DF8A RCALL _Ch452l_Writecommand
(0188) Delay_Nus(3);
0124 E003 LDI R16,3
0125 E010 LDI R17,0
0126 DF59 RCALL _Delay_Nus
(0189) break;
0127 C00D RJMP 0x0135
(0190) case(7):
(0191) Ch452l_Writecommand(0x05f0);//7位显示,BCD译码
0128 EF00 LDI R16,0xF0
0129 E015 LDI R17,5
012A DF83 RCALL _Ch452l_Writecommand
(0192) Delay_Nus(3);
012B E003 LDI R16,3
012C E010 LDI R17,0
012D DF52 RCALL _Delay_Nus
(0193) break;
012E C006 RJMP 0x0135
(0194) case(8):
(0195) Ch452l_Writecommand(0x0580);//8位显示,BCD译码
012F E800 LDI R16,0x80
0130 E015 LDI R17,5
0131 DF7C RCALL _Ch452l_Writecommand
(0196) Delay_Nus(3);
0132 E003 LDI R16,3
0133 E010 LDI R17,0
0134 DF4B RCALL _Delay_Nus
(0197) break;
(0198) default:
(0199) break;
(0200) }
(0201) Ch452l_Writecommand(CH452L_DIG7 | p[7]);
0135 01FA MOVW R30,R20
0136 8107 LDD R16,Z+7
0137 2711 CLR R17
0138 601F ORI R17,0xF
0139 DF74 RCALL _Ch452l_Writecommand
(0202) Ch452l_Writecommand(CH452L_DIG6 | p[6]);
013A 01FA MOVW R30,R20
013B 8106 LDD R16,Z+6
013C 2711 CLR R17
013D 601E ORI R17,0xE
013E DF6F RCALL _Ch452l_Writecommand
(0203) Ch452l_Writecommand(CH452L_DIG5 | p[5]);
013F 01FA MOVW R30,R20
0140 8105 LDD R16,Z+5
0141 2711 CLR R17
0142 601D ORI R17,0xD
0143 DF6A RCALL _Ch452l_Writecommand
(0204) Ch452l_Writecommand(CH452L_DIG4 | p[4]);
0144 01FA MOVW R30,R20
0145 8104 LDD R16,Z+4
0146 2711 CLR R17
0147 601C ORI R17,0xC
0148 DF65 RCALL _Ch452l_Writecommand
(0205) Ch452l_Writecommand(CH452L_DIG3 | p[3]);
0149 01FA MOVW R30,R20
014A 8103 LDD R16,Z+3
014B 2711 CLR R17
014C 601B ORI R17,0xB
014D DF60 RCALL _Ch452l_Writecommand
(0206) Ch452l_Writecommand(CH452L_DIG2 | p[2]);
014E 01FA MOVW R30,R20
014F 8102 LDD R16,Z+2
0150 2711 CLR R17
0151 601A ORI R17,0xA
0152 DF5B RCALL _Ch452l_Writecommand
(0207) Ch452l_Writecommand(CH452L_DIG1 | p[1]);
0153 01FA MOVW R30,R20
0154 8101 LDD R16,Z+1
0155 2711 CLR R17
0156 6019 ORI R17,0x9
0157 DF56 RCALL _Ch452l_Writecommand
(0208) Ch452l_Writecommand(CH452L_DIG0 | p[0]);
0158 01FA MOVW R30,R20
0159 8100 LDD R16,Z+0
015A 2711 CLR R17
015B 6018 ORI R17,0x8
015C DF51 RCALL _Ch452l_Writecommand
(0209) Ch452l_Writecommand(CH452L_DIG0 | p[0]);
015D 01FA MOVW R30,R20
015E 8100 LDD R16,Z+0
015F 2711 CLR R17
0160 6018 ORI R17,0x8
0161 DF4C RCALL _Ch452l_Writecommand
0162 D04F RCALL pop_gset2
0163 9508 RET
_Read_Keycode:
temp --> Y+1
keyvalue --> R22
cmd --> R10
i --> R20
0164 D055 RCALL push_gset3
(0210) }
(0211)
(0212) /***************************************************************************
(0213) *函数名:
(0214) *功能:读取CH452L按键代码
(0215) *入口参数:无
(0216) *出口参数:返回读取到的键值,参考手册上的键值表
(0217) *说明:由于读取按键代码时B0~B7无效,只有B8~B11有效,可以使用简化的读取按键命
(0218) 令,即输出命令0111。必须关中断,再开中断,否则读出的键值出错
(0219) ****************************************************************************/
(0220) unsigned char Read_Keycode(void)
(0221) {
(0222) unsigned char keyvalue=0,temp,i;
0165 2766 CLR R22
(0223) unsigned char cmd=0x07;//使用简化的读取按键命令,使用cmd的低四位
0166 E087 LDI R24,7
0167 2EA8 MOV R10,R24
(0224) GICR &= 0xbf; //关中断INT0
0168 B78B IN R24,0x3B
0169 7B8F ANDI R24,0xBF
016A BF8B OUT 0x3B,R24
(0225) Delay_Nus(5);
016B E005 LDI R16,5
016C E010 LDI R17,0
016D DF12 RCALL _Delay_Nus
(0226) LOAD_OUT0; //LOAD输出0
016E 98A8 CBI 0x15,0
(0227) for(i=0;i<4;i++)
016F 2744 CLR R20
0170 C009 RJMP 0x017A
(0228) {
(0229) DCLK_OUT0;
0171 98A9 CBI 0x15,1
(0230) if(cmd & 1)
0172 FEA0 SBRS R10,0
0173 C002 RJMP 0x0176
(0231) {
(0232) DIN_OUT1;
0174 9AAA SBI 0x15,2
(0233) }
0175 C001 RJMP 0x0177
(0234) else
(0235) {
(0236) DIN_OUT0;
0176 98AA CBI 0x15,2
(0237) }
(0238) DCLK_OUT1;
0177 9AA9 SBI 0x15,1
(0239) cmd=cmd>>1;
0178 94A6 LSR R10
0179 9543 INC R20
017A 3044 CPI R20,4
017B F3A8 BCS 0x0171
(0240) }
(0241) LOAD_OUT1; //LOAD上升沿加载一帧数据
017C 9AA8 SBI 0x15,0
(0242) DIN_OUT1;
017D 9AAA SBI 0x15,2
(0243) DCLK_OUT1;
017E 9AA9 SBI 0x15,1
(0244) keyvalue=0;
017F 2766 CLR R22
(0245) for(i=0;i<7;i++)
0180 2744 CLR R20
0181 C00A RJMP 0x018C
(0246) {
(0247) keyvalue<<=1;
0182 0F66 LSL R22
(0248) if(DOUT_PIN)
0183 9B82 SBIS 0x10,2
0184 C004 RJMP 0x0189
(0249) {
(0250) keyvalue=keyvalue+1;
0185 9563 INC R22
(0251) Uart_Transmit(0x01);
0186 E001 LDI R16,1
0187 E010 LDI R17,0
0188 DEBD RCALL _Uart_Transmit
(0252) }
(0253) DCLK_OUT0;
0189 98A9 CBI 0x15,1
(0254) DCLK_OUT1;
018A 9AA9 SBI 0x15,1
018B 9543 INC R20
018C 3047 CPI R20,7
018D F3A0 BCS 0x0182
(0255) }
(0256) DCLK_OUT1;
018E 9AA9 SBI 0x15,1
(0257) DIN_OUT1;
018F 9AAA SBI 0x15,2
(0258) GICR |= 0x40; //开中断
0190 B78B IN R24,0x3B
0191 6480 ORI R24,0x40
0192 BF8B OUT 0x3B,R24
(0259) GIFR = 0x40; //清中断标志INT0
0193 E480 LDI R24,0x40
0194 BF8A OUT 0x3A,R24
(0260) Delay_Nus(5);
0195 E005 LDI R16,5
0196 E010 LDI R17,0
0197 DEE8 RCALL _Delay_Nus
(0261) return keyvalue;
0198 2F06 MOV R16,R22
0199 D01A RCALL pop_gset3
019A 9508 RET
(0262) }
(0263)
(0264) /***************************************************************************
(0265) *函数名:
(0266) *功能:外部中断INT0的初始化,边缘触发
(0267) *入口参数:无
(0268) *出口参数:无
(0269) *中断方式说明: MCUCR INT0中断方式
(0270) * 0x00 低电平中断
(0271) * 0x01 上升沿和下降沿都产生中断
(0272) * 0x02 下降沿产生中断
(0273) * 0x03 上升沿产生中断
(0274) ****************************************************************************/
(0275) void Init_Int0(void)
(0276) {
(0277) CLI();
_Init_Int0:
019B 94F8 BCLR 7
(0278) MCUCR = 0x00; //0x00为低电平触发INT0中断
019C 2422 CLR R2
019D BE25 OUT 0x35,R2
(0279) GICR |= 0x40; //INT0使能
019E B78B IN R24,0x3B
019F 6480 ORI R24,0x40
01A0 BF8B OUT 0x3B,R24
(0280) TIMSK = 0x00;
01A1 BE29 OUT 0x39,R2
(0281) SEI();
01A2 9478 BSET 7
01A3 9508 RET
_int0_isr:
01A4 D030 RCALL push_lset
(0282) }
(0283)
(0284) /***************************************************************************
(0285) *函数名:INT0中断服务函数
(0286) *功能:
(0287) *说明:低电平触发中断
(0288) *入口参数:无
(0289) *出口参数:无
(0290) ****************************************************************************/
(0291) #pragma interrupt_handler int0_isr:2
(0292) void int0_isr(void)
(0293) {
(0294) flag=1;
01A5 E081 LDI R24,1
01A6 E090 LDI R25,0
01A7 93900069 STS flag+1,R25
01A9 93800068 STS flag,R24
(0295) Uart_Transmit(0xbb);
01AB EB0B LDI R16,0xBB
01AC E010 LDI R17,0
01AD DE98 RCALL _Uart_Transmit
(0296) GIFR = 0x40; //清中断标志INT0
FILE: <library>
01AE E480 LDI R24,0x40
01AF BF8A OUT 0x3A,R24
01B0 D03B RCALL pop_lset
01B1 9518 RETI
pop_gset2:
01B2 E0E2 LDI R30,2
01B3 C00E RJMP pop
pop_gset3:
01B4 E0E4 LDI R30,4
01B5 C00C RJMP pop
push_gset5:
01B6 92FA ST R15,-Y
01B7 92EA ST R14,-Y
push_gset4:
01B8 92DA ST R13,-Y
01B9 92CA ST R12,-Y
push_gset3:
01BA 92BA ST R11,-Y
01BB 92AA ST R10,-Y
push_gset2:
01BC 937A ST R23,-Y
01BD 936A ST R22,-Y
push_gset1:
01BE 935A ST R21,-Y
01BF 934A ST R20,-Y
01C0 9508 RET
pop_gset1:
01C1 E0E1 LDI R30,1
pop:
01C2 9149 LD R20,Y+
01C3 9159 LD R21,Y+
01C4 FDE0 SBRC R30,0
01C5 9508 RET
01C6 9169 LD R22,Y+
01C7 9179 LD R23,Y+
01C8 FDE1 SBRC R30,1
01C9 9508 RET
01CA 90A9 LD R10,Y+
01CB 90B9 LD R11,Y+
01CC FDE2 SBRC R30,2
01CD 9508 RET
01CE 90C9 LD R12,Y+
01CF 90D9 LD R13,Y+
01D0 FDE3 SBRC R30,3
01D1 9508 RET
01D2 90E9 LD R14,Y+
01D3 90F9 LD R15,Y+
01D4 9508 RET
push_lset:
01D5 93FA ST R31,-Y
01D6 93EA ST R30,-Y
01D7 93BA ST R27,-Y
01D8 93AA ST R26,-Y
01D9 939A ST R25,-Y
01DA 938A ST R24,-Y
01DB 933A ST R19,-Y
01DC 932A ST R18,-Y
01DD 931A ST R17,-Y
01DE 930A ST R16,-Y
01DF 929A ST R9,-Y
01E0 928A ST R8,-Y
01E1 927A ST R7,-Y
01E2 926A ST R6,-Y
01E3 925A ST R5,-Y
01E4 924A ST R4,-Y
01E5 923A ST R3,-Y
01E6 922A ST R2,-Y
01E7 921A ST R1,-Y
01E8 920A ST R0,-Y
01E9 B60F IN R0,0x3F
01EA 920A ST R0,-Y
01EB 9508 RET
pop_lset:
01EC 9009 LD R0,Y+
01ED BE0F OUT 0x3F,R0
01EE 9009 LD R0,Y+
01EF 9019 LD R1,Y+
01F0 9029 LD R2,Y+
01F1 9039 LD R3,Y+
01F2 9049 LD R4,Y+
01F3 9059 LD R5,Y+
01F4 9069 LD R6,Y+
01F5 9079 LD R7,Y+
01F6 9089 LD R8,Y+
01F7 9099 LD R9,Y+
01F8 9109 LD R16,Y+
01F9 9119 LD R17,Y+
01FA 9129 LD R18,Y+
01FB 9139 LD R19,Y+
01FC 9189 LD R24,Y+
01FD 9199 LD R25,Y+
01FE 91A9 LD R26,Y+
01FF 91B9 LD R27,Y+
0200 91E9 LD R30,Y+
0201 91F9 LD R31,Y+
0202 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -