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

📄 ch452l.lst

📁 ch452的数码管和键盘驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    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 + -