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

📄 display_led.lst

📁 AVR开发板例子源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
_switch_hang:
  byTemp               --> R20
  hang                 --> R16
    0195 D070      RCALL	push_gset1
(0139) 	 }
(0140) }
(0141) /************************************************
(0142) 函 数 名:    switch_hang ()
(0143) 功    能:    选行操作,控制138的输入
(0144) 输入参数:     /
(0145) 输出参数:    /
(0146) 描    述:    /
(0147) ***********************************************/
(0148) void switch_hang (uchar hang)   //选行操作
(0149) {
(0150)    uchar byTemp; 
(0151)    byTemp = PORTD & 0xF0;
    0196 B342      IN	R20,0x12
    0197 7F40      ANDI	R20,0xF0
(0152)    if (hang < 8)
    0198 3008      CPI	R16,0x8
    0199 F428      BCC	0x019F
(0153)    {
(0154)    	  PORTD = byTemp + 0x08 + hang;  //D=1
    019A 2F84      MOV	R24,R20
    019B 5F88      SUBI	R24,0xF8
    019C 0F80      ADD	R24,R16
    019D BB82      OUT	0x12,R24
(0155)    }
    019E C004      RJMP	0x01A3
(0156)    else
(0157)    {
(0158)       PORTD = byTemp + hang - 0x08;  //D=0
    019F 2F84      MOV	R24,R20
    01A0 0F80      ADD	R24,R16
    01A1 5088      SUBI	R24,0x8
    01A2 BB82      OUT	0x12,R24
(0159)    }
    01A3 D065      RCALL	pop_gset1
    01A4 9508      RET
_Display:
  i                    --> R20
  mov_no               --> R22
    01A5 D05E      RCALL	push_gset2
    01A6 01B8      MOVW	R22,R16
(0160) }
(0161) /************************************************
(0162) 函 数 名:    Display()
(0163) 功    能:    动态扫描LED显示函数
(0164) 输入参数:     /
(0165) 输出参数:    /
(0166) 描    述:    共16行,每行连续送4个字节的数据,两个字节为第2个汉字,后两个为第1个汉字。
(0167) ***********************************************/
(0168) void Display (uint mov_no)               //动态显示函数
(0169) {
(0170)     uchar i;
(0171) 	for(i=0;i<8;i++)    //上面8行
    01A7 2744      CLR	R20
    01A8 C015      RJMP	0x01BE
(0172) 	{
(0173) 	   PORTD |= (1<<PD7);      //OE=1,关闭输出,消隐
    01A9 9A97      SBI	0x12,7
(0174) 	   switch_hang (i);        //选行操作
    01AA 2F04      MOV	R16,R20
    01AB DFE9      RCALL	_switch_hang
(0175) 	   
(0176) 	   InputByte ((mov_no+mov_no),(0b10000000>>i));  //起始列和需要送显示的行
    01AC 2F24      MOV	R18,R20
    01AD 2733      CLR	R19
    01AE E800      LDI	R16,0x80
    01AF E010      LDI	R17,0
    01B0 D044      RCALL	asr16
    01B1 2F20      MOV	R18,R16
    01B2 018B      MOVW	R16,R22
    01B3 0F06      ADD	R16,R22
    01B4 1F17      ADC	R17,R23
    01B5 DFC2      RCALL	_InputByte
(0177) 	   
(0178) 	   PORTD |= (1<<PD5);             //RCLK=1,并行输出锁存器
    01B6 9A95      SBI	0x12,5
(0179) 	   NOP();
    01B7 0000      NOP
(0180) 	   PORTD &= ~(1<<PD5);            //RCLK=0
    01B8 9895      CBI	0x12,5
(0181) 	   //DelaymS(1);	         //消隐的时间,调节亮度用
(0182) 	   PORTD &= ~(1<<PD7);      //OE=0,数据输出
    01B9 9897      CBI	0x12,7
(0183) 	   DelaymS(2);	            //行显示的时间
    01BA E002      LDI	R16,2
    01BB E010      LDI	R17,0
    01BC DFA8      RCALL	_DelaymS
    01BD 9543      INC	R20
    01BE 3048      CPI	R20,0x8
    01BF F348      BCS	0x01A9
(0184) 	}
(0185) 	for(i=0;i<8;i++)    //下面8行
    01C0 2744      CLR	R20
    01C1 C018      RJMP	0x01DA
(0186) 	{
(0187) 	   PORTD |= (1<<PD7);      //OE=1,关闭输出,消隐
    01C2 9A97      SBI	0x12,7
(0188) 	   switch_hang (i+7);        //选行操作
    01C3 2F04      MOV	R16,R20
    01C4 5F09      SUBI	R16,0xF9
    01C5 DFCF      RCALL	_switch_hang
(0189) 	   
(0190) 	   InputByte ((mov_no+mov_no+1),(0b10000000>>i));  //起始列和需要送显示的行
    01C6 2F24      MOV	R18,R20
    01C7 2733      CLR	R19
    01C8 E800      LDI	R16,0x80
    01C9 E010      LDI	R17,0
    01CA D02A      RCALL	asr16
    01CB 2F20      MOV	R18,R16
    01CC 018B      MOVW	R16,R22
    01CD 0F06      ADD	R16,R22
    01CE 1F17      ADC	R17,R23
    01CF 5F0F      SUBI	R16,0xFF
    01D0 4F1F      SBCI	R17,0xFF
    01D1 DFA6      RCALL	_InputByte
(0191) 	   
(0192) 	   PORTD |= (1<<PD5);             //RCLK=1,并行输出锁存器
    01D2 9A95      SBI	0x12,5
(0193) 	   NOP();
    01D3 0000      NOP
(0194) 	   PORTD &= ~(1<<PD5);            //RCLK=0
    01D4 9895      CBI	0x12,5
(0195) 	   //DelaymS(1);	         //消隐的时间,调节亮度用
(0196) 	   PORTD &= ~(1<<PD7);      //OE=0,数据输出
    01D5 9897      CBI	0x12,7
(0197) 	   DelaymS(2);	            //行显示的时间
    01D6 E002      LDI	R16,2
    01D7 E010      LDI	R17,0
    01D8 DF8C      RCALL	_DelaymS
    01D9 9543      INC	R20
    01DA 3048      CPI	R20,0x8
    01DB F330      BCS	0x01C2
    01DC D01F      RCALL	pop_gset2
    01DD 9508      RET
(0198) 	}
(0199) }
(0200) //*****************主程序**********************************
(0201) void main (void)
(0202) {
(0203)      uint i;
(0204) 	 uchar j;
(0205) 	 DelaymS(100);	 
_main:
  i                    --> R20
  j                    --> R22
    01DE E604      LDI	R16,0x64
    01DF E010      LDI	R17,0
    01E0 DF84      RCALL	_DelaymS
(0206)      Init_Port();      //初始化
    01E1 DF91      RCALL	_Init_Port
    01E2 C010      RJMP	0x01F3
(0207) 	 
(0208) 	 while (1)
(0209) 	 
(0210) 	 for (i=0;i<272;i++)
    01E3 2744      CLR	R20
    01E4 2755      CLR	R21
    01E5 C009      RJMP	0x01EF
(0211) 	 {
(0212) 		  for (j=0;j<7;j++)         //移动的速度
    01E6 2766      CLR	R22
    01E7 C003      RJMP	0x01EB
(0213) 		  Display (i);               //动态显示函数
FILE: <library>
    01E8 018A      MOVW	R16,R20
    01E9 DFBB      RCALL	_Display
    01EA 9563      INC	R22
    01EB 3067      CPI	R22,7
    01EC F3D8      BCS	0x01E8
    01ED 5F4F      SUBI	R20,0xFF
    01EE 4F5F      SBCI	R21,0xFF
    01EF 3140      CPI	R20,0x10
    01F0 E0E1      LDI	R30,1
    01F1 075E      CPC	R21,R30
    01F2 F398      BCS	0x01E6
    01F3 CFEF      RJMP	0x01E3
    01F4 9508      RET
asr16:
    01F5 2322      TST	R18
    01F6 F021      BEQ	0x01FB
    01F7 9515      ASR	R17
    01F8 9507      ROR	R16
    01F9 952A      DEC	R18
    01FA CFFA      RJMP	asr16
    01FB 9508      RET
pop_gset2:
    01FC E0E2      LDI	R30,2
    01FD C00C      RJMP	pop
push_gset5:
    01FE 92FA      ST	R15,-Y
    01FF 92EA      ST	R14,-Y
push_gset4:
    0200 92DA      ST	R13,-Y
    0201 92CA      ST	R12,-Y
push_gset3:
    0202 92BA      ST	R11,-Y
    0203 92AA      ST	R10,-Y
push_gset2:
    0204 937A      ST	R23,-Y
    0205 936A      ST	R22,-Y
push_gset1:
    0206 935A      ST	R21,-Y
    0207 934A      ST	R20,-Y
    0208 9508      RET
pop_gset1:
    0209 E0E1      LDI	R30,1
pop:
    020A 9149      LD	R20,Y+
    020B 9159      LD	R21,Y+
    020C FDE0      SBRC	R30,0
    020D 9508      RET
    020E 9169      LD	R22,Y+
    020F 9179      LD	R23,Y+
    0210 FDE1      SBRC	R30,1
    0211 9508      RET
    0212 90A9      LD	R10,Y+
    0213 90B9      LD	R11,Y+
    0214 FDE2      SBRC	R30,2
    0215 9508      RET
    0216 90C9      LD	R12,Y+
    0217 90D9      LD	R13,Y+
    0218 FDE3      SBRC	R30,3
    0219 9508      RET
    021A 90E9      LD	R14,Y+
    021B 90F9      LD	R15,Y+
    021C 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -