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

📄 qingxi.lst

📁 超简单的编码开关(单键飞梭开关)解码程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0626)                 {
(0627)                         lcd_wd(lcd_data);/* Write display data */
    0E11 2F06      MOV	R16,R22
    0E12 DEBA      RCALL	_lcd_wd
    0E13 94A3      INC	R10
    0E14 2D8A      MOV	R24,R10
    0E15 318E      CPI	R24,0x1E
    0E16 F3D0      BCS	0x0E11
    0E17 9543      INC	R20
    0E18 3840      CPI	R20,0x80
    0E19 F3A8      BCS	0x0E0F
(0628)                 }
(0629)         }                               
(0630)         lcd_wc(0xb2);                    /* Awroff (auto reset) */
    0E1A EB02      LDI	R16,0xB2
    0E1B DEC7      RCALL	_lcd_wc
    0E1C 9621      ADIW	R28,1
    0E1D 940E1366  CALL	pop_gset3
    0E1F 9508      RET
_lcd_print:
  lcd_data             --> Y+5
  y                    --> R22
  x                    --> R20
    0E20 940E1375  CALL	push_gset2
    0E22 2F62      MOV	R22,R18
    0E23 2F40      MOV	R20,R16
    0E24 9721      SBIW	R28,1
(0631) }
(0632) /***********************************************************************************/
(0633) void lcd_print(uchar x,uchar y,uchar lcd_data)
(0634) {
(0635)         lcd_wc(0x98);
    0E25 E908      LDI	R16,0x98
    0E26 DEBC      RCALL	_lcd_wc
(0636)         lcd_wc3(0x24,x,y);
    0E27 8368      STD	Y+0,R22
    0E28 2F24      MOV	R18,R20
    0E29 E204      LDI	R16,0x24
    0E2A DECA      RCALL	_lcd_wc3
(0637)         lcd_wc(0xb0);
    0E2B EB00      LDI	R16,0xB0
    0E2C DEB6      RCALL	_lcd_wc
(0638)         lcd_wd(lcd_data);
    0E2D 810D      LDD	R16,Y+5
    0E2E DE9E      RCALL	_lcd_wd
(0639)         lcd_wc(0xb2);
    0E2F EB02      LDI	R16,0xB2
    0E30 DEB2      RCALL	_lcd_wc
    0E31 9621      ADIW	R28,1
    0E32 940E1363  CALL	pop_gset2
    0E34 9508      RET
_lcd_print240128:
  i                    --> R20
  j                    --> R10
  str                  --> R22
    0E35 940E1373  CALL	push_gset3
    0E37 01B8      MOVW	R22,R16
    0E38 9721      SBIW	R28,1
(0640) }
(0641) /******************************************************************************/
(0642) void lcd_print240128(cchar *str)
(0643) {
(0644)         uchar i,j;
(0645)         lcd_wc(0x98);
    0E39 E908      LDI	R16,0x98
    0E3A DEA8      RCALL	_lcd_wc
(0646)         lcd_wc3(0x24,0,0);
    0E3B 2422      CLR	R2
    0E3C 8228      STD	Y+0,R2
    0E3D 2722      CLR	R18
    0E3E E204      LDI	R16,0x24
    0E3F DEB5      RCALL	_lcd_wc3
(0647)         lcd_wc(0xb0);
    0E40 EB00      LDI	R16,0xB0
    0E41 DEA1      RCALL	_lcd_wc
(0648)         for(i=0;i<128;i++)
    0E42 2744      CLR	R20
    0E43 C00D      RJMP	0x0E51
(0649)         {
(0650)                 for(j=0;j<30;j++)
    0E44 24AA      CLR	R10
    0E45 C007      RJMP	0x0E4D
(0651)                 {
(0652)                         lcd_wd(*str++);
    0E46 011B      MOVW	R2,R22
    0E47 5F6F      SUBI	R22,0xFF
    0E48 4F7F      SBCI	R23,0xFF
    0E49 01F1      MOVW	R30,R2
    0E4A 9104      LPM	R16,0(Z)
    0E4B DE81      RCALL	_lcd_wd
    0E4C 94A3      INC	R10
    0E4D 2D8A      MOV	R24,R10
    0E4E 318E      CPI	R24,0x1E
    0E4F F3B0      BCS	0x0E46
    0E50 9543      INC	R20
    0E51 3840      CPI	R20,0x80
    0E52 F388      BCS	0x0E44
(0653)                 }
(0654)         }
(0655)         lcd_wc(0xb2);
    0E53 EB02      LDI	R16,0xB2
    0E54 DE8E      RCALL	_lcd_wc
    0E55 9621      ADIW	R28,1
    0E56 940E1366  CALL	pop_gset3
    0E58 9508      RET
_lcd_digtal:
  i                    --> R20
  j                    --> R10
  str                  --> R22
    0E59 940E1373  CALL	push_gset3
    0E5B 01B8      MOVW	R22,R16
(0656) }
(0657) 
(0658) 
(0659) void lcd_digtal(cchar *str)
(0660) {
(0661)         uchar i,j;
(0662)         cursor(6,0);
    0E5C 2722      CLR	R18
    0E5D E006      LDI	R16,6
    0E5E DED7      RCALL	_cursor
(0663) //		lcd_wc(0x98);
(0664) //        lcd_wc3(0x24,0,0);
(0665)         lcd_wc(0xb0);
    0E5F EB00      LDI	R16,0xB0
    0E60 DE82      RCALL	_lcd_wc
(0666)         for(i=0;i<32;i++)
    0E61 2744      CLR	R20
    0E62 C00D      RJMP	0x0E70
(0667)         {
(0668)                 for(j=0;j<30;j++)
    0E63 24AA      CLR	R10
    0E64 C007      RJMP	0x0E6C
(0669)                 {
(0670)                         lcd_wd(*str++);
    0E65 011B      MOVW	R2,R22
    0E66 5F6F      SUBI	R22,0xFF
    0E67 4F7F      SBCI	R23,0xFF
    0E68 01F1      MOVW	R30,R2
    0E69 9104      LPM	R16,0(Z)
    0E6A DE62      RCALL	_lcd_wd
    0E6B 94A3      INC	R10
    0E6C 2D8A      MOV	R24,R10
    0E6D 318E      CPI	R24,0x1E
    0E6E F3B0      BCS	0x0E65
    0E6F 9543      INC	R20
    0E70 3240      CPI	R20,0x20
    0E71 F388      BCS	0x0E63
(0671)                 }
(0672)         }
(0673)         lcd_wc(0xb2);
    0E72 EB02      LDI	R16,0xB2
    0E73 DE6F      RCALL	_lcd_wc
    0E74 940E1366  CALL	pop_gset3
    0E76 9508      RET
_dprintf:
  arg_ptr              --> R20
  uLen                 --> Y+71
  tmpBuf               --> Y+2
  cData                --> R14
  i                    --> Y+70
  c2                   --> R20
  uRow                 --> Y+69
  uCol                 --> Y+68
  c1                   --> R12
  k                    --> R10
  j                    --> R22
  fmt                  --> Y+82
    0E77 940E12A3  CALL	push_arg4
    0E79 940E136F  CALL	push_gset5
    0E7B 97EF      SBIW	R28,0x3F
    0E7C 9729      SBIW	R28,0x9
(0674) }
(0675) 
(0676) 
(0677) 
(0678) // ASCII(8*16) 及 汉字(16*16) 显示函数
(0679) uchar dprintf(uchar *fmt, ...)
(0680) {
(0681) 	va_list  arg_ptr;
(0682) 	uchar  c1,c2,cData;
(0683) 	uchar  tmpBuf[64];				// LCD显示数据缓冲区
(0684) 	uchar i=0,j,uLen,uRow,uCol;
    0E7D 2400      CLR	R0
    0E7E 01FE      MOVW	R30,R28
    0E7F 5BEA      SUBI	R30,0xBA
    0E80 4FFF      SBCI	R31,0xFF
    0E81 8200      STD	Z+0,R0
(0685) 	uint  k;
(0686) 	
(0687) 	va_start(arg_ptr, fmt);
    0E82 E022      LDI	R18,2
    0E83 E030      LDI	R19,0
    0E84 018E      MOVW	R16,R28
    0E85 5A0E      SUBI	R16,0xAE
    0E86 4F1F      SBCI	R17,0xFF
    0E87 940E1397  CALL	__va_start
    0E89 01A8      MOVW	R20,R16
(0688) 	uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
    0E8A 8359      STD	Y+1,R21
    0E8B 8348      STD	Y+0,R20
    0E8C 01FE      MOVW	R30,R28
    0E8D 5AEE      SUBI	R30,0xAE
    0E8E 4FFF      SBCI	R31,0xFF
    0E8F 8120      LDD	R18,Z+0
    0E90 8131      LDD	R19,Z+1
    0E91 018E      MOVW	R16,R28
    0E92 5F0E      SUBI	R16,0xFE
    0E93 4F1F      SBCI	R17,0xFF
    0E94 940E1464  CALL	_vsprintf
    0E96 01FE      MOVW	R30,R28
    0E97 5BE9      SUBI	R30,0xB9
    0E98 4FFF      SBCI	R31,0xFF
    0E99 8300      STD	Z+0,R16
(0689) 	va_end(arg_ptr);
    0E9A C158      RJMP	0x0FF3
(0690) 
(0691) 	while(i<uLen)
(0692) 	{
(0693) 		c1 = tmpBuf[i];
    0E9B 01CE      MOVW	R24,R28
    0E9C 9602      ADIW	R24,2
    0E9D 01DE      MOVW	R26,R28
    0E9E 5BAA      SUBI	R26,0xBA
    0E9F 4FBF      SBCI	R27,0xFF
    0EA0 91EC      LD	R30,0(X)
    0EA1 27FF      CLR	R31
    0EA2 0FE8      ADD	R30,R24
    0EA3 1FF9      ADC	R31,R25
    0EA4 80C0      LDD	R12,Z+0
(0694) 		c2 = tmpBuf[i+1];
    0EA5 01CE      MOVW	R24,R28
    0EA6 9603      ADIW	R24,3
    0EA7 01DE      MOVW	R26,R28
    0EA8 5BAA      SUBI	R26,0xBA
    0EA9 4FBF      SBCI	R27,0xFF
    0EAA 91EC      LD	R30,0(X)
    0EAB 27FF      CLR	R31
    0EAC 0FE8      ADD	R30,R24
    0EAD 1FF9      ADC	R31,R25
    0EAE 8140      LDD	R20,Z+0
(0695) 		uRow = fnGetRow();
    0EAF DE64      RCALL	_fnGetRow
    0EB0 01FE      MOVW	R30,R28
    0EB1 5BEB      SUBI	R30,0xBB
    0EB2 4FFF      SBCI	R31,0xFF
    0EB3 8300      STD	Z+0,R16
(0696) 		uCol = fnGetCol();
    0EB4 DE62      RCALL	_fnGetCol
    0EB5 01FE      MOVW	R30,R28
    0EB6 5BEC      SUBI	R30,0xBC
    0EB7 4FFF      SBCI	R31,0xFF
    0EB8 8300      STD	Z+0,R16
(0697) 		if(c1 <128)    //if(c1 >= 0)            此处与Keli不同处理,C1,C2,Cdata必须改为uchar
    0EB9 2D8C      MOV	R24,R12
    0EBA 3880      CPI	R24,0x80
    0EBB F008      BCS	0x0EBD
    0EBC C085      RJMP	0x0F42
(0698) 		{	// ASCII
(0699) 			if(c1 < 0x20)
    0EBD 3280      CPI	R24,0x20
    0EBE F008      BCS	0x0EC0
    0EBF C046      RJMP	0x0F06
(0700) 			{
(0701) 				switch(c1)
    0EC0 2E28      MOV	R2,R24
    0EC1 2433      CLR	R3
    0EC2 01FE      MOVW	R30,R28
    0EC3 5BEE      SUBI	R30,0xBE
    0EC4 4FFF      SBCI	R31,0xFF
    0EC5 8231      STD	Z+1,R3
    0EC6 8220      STD	Z+0,R2
    0EC7 01C1      MOVW	R24,R2
    0EC8 3088      CPI	R24,0x8
    0EC9 E0E0      LDI	R30,0
    0ECA 079E      CPC	R25,R30
    0ECB F109      BEQ	0x0EED
    0ECC 308A      CPI	R24,0xA
    0ECD E0E0      LDI	R30,0
    0ECE 079E      CPC	R25,R30
    0ECF F029      BEQ	0x0ED5
    0ED0 308D      CPI	R24,0xD
    0ED1 E0E0      LDI	R30,0
    0ED2 079E      CPC	R25,R30
    0ED3 F009      BEQ	0x0ED5
    0ED4 C02F      RJMP	0x0F04
(0702) 				{
(0703) 					case CR:
(0704) 					case LF:		// 回车或换行
(0705) 						i++;
    0ED5 01FE      MOVW	R30,R28
    0ED6 5BEA      SUBI	R30,0xBA
    0ED7 4FFF      SBCI	R31,0xFF
    0ED8 8000      LDD	R0,Z+0
    0ED9 9403      INC	R0
    0EDA 01FE      MOVW	R30,R28
    0EDB 5BEA      SUBI	R30,0xBA
    0EDC 4FFF      SBCI	R31,0xFF
    0EDD 8200      STD	Z+0,R0
(0706) 						if(uRow < 112)
    0EDE 01FE      MOVW	R30,R28
    0EDF 5BEB      SUBI	R30,0xBB
    0EE0 4FFF      SBCI	R31,0xFF
    0EE1 8180      LDD	R24,Z+0
    0EE2 3780      CPI	R24,0x70
    0EE3 F428      BCC	0x0EE9
(0707) 							fnSetPos(uRow+16,0);
    0EE4 2722      CLR	R18
    0EE5 2F08      MOV	R16,R24
    0EE6 5F00      SUBI	R16,0xF0
    0EE7 DE32      RCALL	_fnSetPos
    0EE8 C10A      RJMP	0x0FF3
(0708) 						else
(0709) 							fnSetPos(0,0);
    0EE9 2722      CLR	R18
    0EEA 2700      CLR	R16
    0EEB DE2E      RCALL	_fnSetPos
(0710) 						continue;
    0EEC C106      RJMP	0x0FF3
(0711) 					case BS:		// 退格
(0712) 						if(uCol > 0)
    0EED 2422      CLR	R2
    0EEE 01FE      MOVW	R30,R28
    0EEF 5BEC      SUBI	R30,0xBC
    0EF0 4FFF      SBCI	R31,0xFF
    0EF1 8000      LDD	R0,Z+0
    0EF2 1420      CP	R2,R0
    0EF3 F428      BCC	0x0EF9
(0713) 							uCol--;
    0EF4 940A      DEC	R0
    0EF5 01FE      MOVW	R30,R28
    0EF6 5BEC      SUBI	R30,0xBC
    0EF7 4FFF      SBCI	R31,0xFF
    0EF8 8200      STD	Z+0,R0
(0714) 						fnSetPos(uRow,uCol);
    0EF9 01FE      MOVW	R30,R28
    0EFA 5BEC      SUBI	R30,0xBC
    0EFB 4FFF      SBCI	R31,0xFF
    0EFC 8120      LDD	R18,Z+0
    0EFD 01FE      MOVW	R30,R28
    0EFE 5BEB      SUBI	R30,0xBB
    0EFF 4FFF      SBCI	R31,0xFF
    0F00 8100      LDD	R16,Z+0
    0F01 DE18      RCALL	_fnSetPos
(0715) 						cData = 0x00;
    0F02 24EE      CLR	R14
(0716) 						break;
    0F03 C002      RJMP	0x0F06
(0717) 					default:		// 其他
(0718) 						c1 = 0x1f;
    0F04 E18F      LDI	R24,0x1F
    0F05 2EC8      MOV	R12,R24
(0719) 				}
(0720) 			}
(0721) 			for(j=0;j<16;j++)
    0F06 2766      CLR	R22
    0F07 C02A      RJMP	0x0F32
(0722) 			{
(0723) 				lcd_wc(LC_AUT_WR);		// 写数据
    0F08 EB00      LDI	R16,0xB0
    0F09 DDD9      RCALL	_lcd_wc
(0724) 				if(c1 >= 0x1f)
    0F0A 2D8C      MOV	R24,R12
    0F0B 318F      CPI	R24,0x1F
    0F0C F0A8      BCS	0x0F22
(0725) 				{
(0726) 					if(j < (16-ASC_CHR_HEIGHT))
    0F0D 3064      CPI	R22,4
    0F0E F418      BCC	0x0F12
(0727) 						lcd_wd(0x00);
    0F0F 2700      CLR	R16
    0F10 DDBC      RCALL	_lcd_wd
    0F11 C012      RJMP	0x0F24
(0728) 					else
(0729) 						lcd_wd(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
    0F12 E08C      LDI	R24,0xC
    0F13 9D8C      MUL	R24,R12
    0F14 01F0      MOVW	R30,R0
    0F15 57E4      SUBI	R30,0x74
    0F16 40F1      SBCI	R31,1
    0F17 2E26      MOV	R2,R22
    0F18 2433      CLR	R3
    0F19 0DE2      ADD	R30,R2
    0F1A 1DF3      ADC	R31,R3
    0F1B E582      LDI	R24,0x52
    0F1C E09F      LDI	R25,0xF
    0F1D 0FE8      ADD	R30,R24
    0F1E 1FF9      ADC	R31,R25
    0F1F 9104      LPM	R16,0(Z)
    0F20 DDAC      RCALL	_lcd_wd
(0730) 				}
    0F21 C002      RJMP	0x0F24
(0731) 				else
(0732) 					lcd_wd(cData);
    0F22 2D0E      MOV	R16,R14
    0F23 DDA9      RCALL	_lcd_wd
(0733) 				lcd_wc(LC_AUT_OVR);
    0F24 EB02      LDI	R16,0xB2
    0F25 DDBD      RCALL	_lcd_wc
(0734) 				fnSetPos(uRow+j+1,uCol);
    0F26 01FE      MOVW	R30,R28
    0F27 5BEC      SUBI	R30,0xBC
    0F28 4FFF      SBCI	R31,0xFF
    0F29 8120      LDD	R18,Z+0
    0F2A 01FE      MOVW	R30,R28
    0F2B 5BEB      SUBI	R30,0xBB
    0F2C 4FFF      SBCI	R31,0xFF
    0F2D 8100      LDD	R16,Z+0
    0F2E 0F06      ADD	R16,R22
    0F2F 5F0F      SUBI	R16,0xFF
    0F30 DDE9      RCALL	_fnSetPos
    0F31 9563      INC	R22
    0F32 3160      CPI	R22,0x10
    0F33 F2A0      BCS	0x0F08
(0735) 			}
(0736) 			if(c1 != BS)		// 非退格
    0F34 2D8C      MOV	R24,R12
    0F35 3088      CPI	R24,0x8
    0F36 F409      BNE	0x0F38
    0F37 C085      RJMP	0x0FBD
(0737) 				uCol++;
    0F38 01FE      MOVW	R30,R28

⌨️ 快捷键说明

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