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

📄 qingxi.lst

📁 超简单的编码开关(单键飞梭开关)解码程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0476) {
(0477)         lcd_wd(lcd_data1);
    0D06 2F06      MOV	R16,R22
    0D07 DFC5      RCALL	_lcd_wd
(0478)         lcd_wc(lcd_code);
    0D08 2F04      MOV	R16,R20
    0D09 DFD9      RCALL	_lcd_wc
    0D0A 940E1363  CALL	pop_gset2
    0D0C 9508      RET
(0479) }
(0480) 
(0481) 
(0482) 
(0483) /*
(0484) uchar fnST3(void)		// 状态位ST3判断(数据自动写状态)
(0485) {
(0486) 	uchar data i;
(0487) 	
(0488) 	for(i=10;i>0;i--)
(0489) 	{
(0490) 		if((LCMCW & 0x08) == 0x08)
(0491) 			break;
(0492) 	}
(0493) 	return i;	// 若返回零,说明错误
(0494) }
(0495) */
(0496) 
(0497) uchar fnST3(void)		// 状态位ST3判断(数据自动写状态)
(0498) {
(0499) 	uchar i;
(0500) 	
(0501) 	for(i=10;i>0;i--)
_fnST3:
  i                    --> R16
    0D0D E00A      LDI	R16,0xA
    0D0E C001      RJMP	0x0D10
    0D0F 950A      DEC	R16
    0D10 2422      CLR	R2
    0D11 1620      CP	R2,R16
    0D12 F000      BCS	0x0D13
(0502) 	{
(0503)       
(0504) 	  //if((LCMCW & 0x08) == 0x08)
(0505) 			break;
(0506) 	}
(0507) 	return i;	// 若返回零,说明错误
    0D13 9508      RET
(0508) }
(0509) 
(0510) 
(0511) 
(0512) uchar fnGetRow(void)
(0513) {
(0514) 	return gCurRow;
_fnGetRow:
    0D14 91000167  LDS	R16,gCurRow
    0D16 9508      RET
(0515) }
(0516) 
(0517) uchar fnGetCol(void)
(0518) {
(0519) 	return gCurCol;
_fnGetCol:
    0D17 91000166  LDS	R16,gCurCol
    0D19 9508      RET
_fnSetPos:
  iPos                 --> R10
  ucol                 --> R20
  urow                 --> R22
    0D1A 940E1373  CALL	push_gset3
    0D1C 2F42      MOV	R20,R18
    0D1D 2F60      MOV	R22,R16
    0D1E 9721      SBIW	R28,1
(0520) }
(0521) 
(0522) // 设置当前地址
(0523) void fnSetPos(uchar urow, uchar ucol)
(0524) {
(0525) 	uint  iPos;
(0526) 	iPos = urow * 30 + ucol;
    0D1F E18E      LDI	R24,0x1E
    0D20 9F86      MUL	R24,R22
    0D21 0150      MOVW	R10,R0
    0D22 2E24      MOV	R2,R20
    0D23 2433      CLR	R3
    0D24 0CA2      ADD	R10,R2
    0D25 1CB3      ADC	R11,R3
(0527) 	lcd_wc3(LC_ADD_POS,iPos & 0xFF,iPos / 256);
    0D26 0115      MOVW	R2,R10
    0D27 2C23      MOV	R2,R3
    0D28 2433      CLR	R3
    0D29 8228      STD	Y+0,R2
    0D2A 2D2A      MOV	R18,R10
    0D2B 7030      ANDI	R19,0
    0D2C E204      LDI	R16,0x24
    0D2D DFC7      RCALL	_lcd_wc3
(0528) 	gCurRow = urow;
    0D2E 93600167  STS	gCurRow,R22
(0529) 	gCurCol = ucol;
    0D30 93400166  STS	gCurCol,R20
    0D32 9621      ADIW	R28,1
    0D33 940E1366  CALL	pop_gset3
    0D35 9508      RET
_cursor:
  uCol                 --> R22
  uRow                 --> R20
    0D36 940E1375  CALL	push_gset2
    0D38 2F62      MOV	R22,R18
    0D39 2F40      MOV	R20,R16
(0530) }
(0531) 
(0532) // 设置当前显示行、列
(0533) void cursor(uchar uRow, uchar uCol)
(0534) {
(0535) 	fnSetPos(uRow * 16, uCol);
    0D3A 2F26      MOV	R18,R22
    0D3B E180      LDI	R24,0x10
    0D3C 9F84      MUL	R24,R20
    0D3D 2D00      MOV	R16,R0
    0D3E DFDB      RCALL	_fnSetPos
    0D3F 940E1363  CALL	pop_gset2
    0D41 9508      RET
_clsrows:
  baddr                --> Y+1
  i                    --> R20
  erow                 --> R22
  brow                 --> R10
    0D42 940E1373  CALL	push_gset3
    0D44 2F62      MOV	R22,R18
    0D45 2EA0      MOV	R10,R16
    0D46 9723      SBIW	R28,3
(0536) }
(0537) 
(0538) //清汉字行函数,参数1起始行,参数2终止行
(0539) void clsrows(uchar brow,uchar erow)
(0540) {
(0541) 	uint i;
(0542) 	union address baddr;
(0543) 	baddr.a = 480*brow;
    0D47 2D2A      MOV	R18,R10
    0D48 2733      CLR	R19
    0D49 EE00      LDI	R16,0xE0
    0D4A E011      LDI	R17,1
    0D4B 940E1353  CALL	empy16s
    0D4D 831A      STD	Y+2,R17
    0D4E 8309      STD	Y+1,R16
(0544) 	lcd_wc3(LC_ADD_POS,baddr.apart.al,baddr.apart.ah);
    0D4F 2E20      MOV	R2,R16
    0D50 8228      STD	Y+0,R2
    0D51 812A      LDD	R18,Y+2
    0D52 E204      LDI	R16,0x24
    0D53 DFA1      RCALL	_lcd_wc3
(0545) 	lcd_wc(LC_AUT_WR);
    0D54 EB00      LDI	R16,0xB0
    0D55 DF8D      RCALL	_lcd_wc
(0546) 	for(i=0;i<(erow-brow)*30;i++)
    0D56 2744      CLR	R20
    0D57 2755      CLR	R21
    0D58 C005      RJMP	0x0D5E
(0547) 	{
(0548) 		fnST3();
    0D59 DFB3      RCALL	_fnST3
(0549) 		lcd_wd(0x00);
    0D5A 2700      CLR	R16
    0D5B DF71      RCALL	_lcd_wd
    0D5C 5F4F      SUBI	R20,0xFF
    0D5D 4F5F      SBCI	R21,0xFF
    0D5E 2E26      MOV	R2,R22
    0D5F 182A      SUB	R2,R10
    0D60 E18E      LDI	R24,0x1E
    0D61 9D82      MUL	R24,R2
    0D62 1540      CP	R20,R0
    0D63 0551      CPC	R21,R1
    0D64 F3A0      BCS	0x0D59
(0550) 	}
(0551) 	lcd_wc(LC_AUT_OVR);
    0D65 EB02      LDI	R16,0xB2
    0D66 DF7C      RCALL	_lcd_wc
(0552) 	lcd_wc3(LC_ADD_POS,baddr.apart.al,baddr.apart.ah);
    0D67 8029      LDD	R2,Y+1
    0D68 8228      STD	Y+0,R2
    0D69 812A      LDD	R18,Y+2
    0D6A E204      LDI	R16,0x24
    0D6B DF89      RCALL	_lcd_wc3
(0553) 	gCurRow = brow<<4;
    0D6C 2D8A      MOV	R24,R10
    0D6D 708F      ANDI	R24,0xF
    0D6E 9582      SWAP	R24
    0D6F 93800167  STS	gCurRow,R24
(0554) 	gCurCol = 0;
    0D71 2422      CLR	R2
    0D72 92200166  STS	gCurCol,R2
    0D74 9623      ADIW	R28,3
    0D75 940E1366  CALL	pop_gset3
    0D77 9508      RET
_fnLCMInit:
    0D78 9721      SBIW	R28,1
(0555) }      
(0556) 
(0557) 
(0558) void fnLCMInit(void)
(0559) {
(0560)     lcd_wc3(LC_TXT_STP,0x00,0x0f);     	// 文本显示区首地址   10
    0D79 E08F      LDI	R24,0xF
    0D7A 8388      STD	Y+0,R24
    0D7B 2722      CLR	R18
    0D7C E400      LDI	R16,0x40
    0D7D DF77      RCALL	_lcd_wc3
(0561) 	lcd_wc3(LC_TXT_WID,0x1E,0x00);		// 文本显示区宽度
    0D7E 2422      CLR	R2
    0D7F 8228      STD	Y+0,R2
    0D80 E12E      LDI	R18,0x1E
    0D81 E401      LDI	R16,0x41
    0D82 DF72      RCALL	_lcd_wc3
(0562) 	lcd_wc3(LC_GRH_STP,0x00,0x00);		// 图形显示区首地址
    0D83 2422      CLR	R2
    0D84 8228      STD	Y+0,R2
    0D85 2722      CLR	R18
    0D86 E402      LDI	R16,0x42
    0D87 DF6D      RCALL	_lcd_wc3
(0563) 	lcd_wc3(LC_GRH_WID,0x1E,0x00);		// 图形显示区宽度
    0D88 2422      CLR	R2
    0D89 8228      STD	Y+0,R2
    0D8A E12E      LDI	R18,0x1E
    0D8B E403      LDI	R16,0x43
    0D8C DF68      RCALL	_lcd_wc3
(0564) 	lcd_wc(LC_CUR_SHP | 0x00);			// 光标形状
    0D8D EA01      LDI	R16,0xA1
    0D8E DF54      RCALL	_lcd_wc
(0565) 	lcd_wc3(LC_CGR_POS,0x03,0x00);		//CGRAM设置
    0D8F 2422      CLR	R2
    0D90 8228      STD	Y+0,R2
    0D91 E023      LDI	R18,3
    0D92 E202      LDI	R16,0x22
    0D93 DF61      RCALL	_lcd_wc3
(0566) 	lcd_wc(LC_MOD_OR);					// 显示方式设置
    0D94 E800      LDI	R16,0x80
    0D95 DF4D      RCALL	_lcd_wc
(0567) 	lcd_wc(0x9f);						// 显示开关设置
    0D96 E90F      LDI	R16,0x9F
    0D97 DF4B      RCALL	_lcd_wc
    0D98 9621      ADIW	R28,1
    0D99 9508      RET
_lcd_init:
    0D9A 9721      SBIW	R28,1
(0568) }
(0569) 
(0570) 
(0571) /***********************************************************************************/
(0572) void lcd_init(void)
(0573) {
(0574) 	LCD_RES_H;
    0D9B 9A96      SBI	0x12,6
(0575)     LCD_RES_L;                          //低电平复位  
    0D9C 9896      CBI	0x12,6
(0576)     delay_ms(30);
    0D9D E10E      LDI	R16,0x1E
    0D9E E010      LDI	R17,0
    0D9F DE2A      RCALL	_delay_ms
(0577)     LCD_RES_H;
    0DA0 9A96      SBI	0x12,6
(0578)     lcd_wc(0x80);                       //设置显示模式为逻辑“或”模式
    0DA1 E800      LDI	R16,0x80
    0DA2 DF40      RCALL	_lcd_wc
(0579)     lcd_wc(0x98);                       //开显示
    0DA3 E908      LDI	R16,0x98
    0DA4 DF3E      RCALL	_lcd_wc
(0580)     lcd_wc3(0x40,0,0);                  //设置文本显示区首地址
    0DA5 2422      CLR	R2
    0DA6 8228      STD	Y+0,R2
    0DA7 2722      CLR	R18
    0DA8 E400      LDI	R16,0x40
    0DA9 DF4B      RCALL	_lcd_wc3
(0581)     lcd_wc3(0x41,30,0);                 //设置文本显示区宽度
    0DAA 2422      CLR	R2
    0DAB 8228      STD	Y+0,R2
    0DAC E12E      LDI	R18,0x1E
    0DAD E401      LDI	R16,0x41
    0DAE DF46      RCALL	_lcd_wc3
(0582)     lcd_wc3(0x42,0,0);                  //设置图形显示区首地址
    0DAF 2422      CLR	R2
    0DB0 8228      STD	Y+0,R2
    0DB1 2722      CLR	R18
    0DB2 E402      LDI	R16,0x42
    0DB3 DF41      RCALL	_lcd_wc3
(0583)     lcd_wc3(0x43,30,0);                 //设置图形显示区宽度
    0DB4 2422      CLR	R2
    0DB5 8228      STD	Y+0,R2
    0DB6 E12E      LDI	R18,0x1E
    0DB7 E403      LDI	R16,0x43
    0DB8 DF3C      RCALL	_lcd_wc3
(0584) 	lcd_wc3(LC_TXT_STP,0x00,0x0f) ;    	// 文本显示区首地址   10
    0DB9 E08F      LDI	R24,0xF
    0DBA 8388      STD	Y+0,R24
    0DBB 2722      CLR	R18
    0DBC E400      LDI	R16,0x40
    0DBD DF37      RCALL	_lcd_wc3
(0585) 	lcd_wc3(LC_TXT_WID,0x1E,0x00);		// 文本显示区宽度
    0DBE 2422      CLR	R2
    0DBF 8228      STD	Y+0,R2
    0DC0 E12E      LDI	R18,0x1E
    0DC1 E401      LDI	R16,0x41
    0DC2 DF32      RCALL	_lcd_wc3
(0586) 	lcd_wc3(LC_GRH_STP,0x00,0x00);		// 图形显示区首地址
    0DC3 2422      CLR	R2
    0DC4 8228      STD	Y+0,R2
    0DC5 2722      CLR	R18
    0DC6 E402      LDI	R16,0x42
    0DC7 DF2D      RCALL	_lcd_wc3
(0587) 	lcd_wc3(LC_GRH_WID,0x1E,0x00);		// 图形显示区宽度
    0DC8 2422      CLR	R2
    0DC9 8228      STD	Y+0,R2
    0DCA E12E      LDI	R18,0x1E
    0DCB E403      LDI	R16,0x43
    0DCC DF28      RCALL	_lcd_wc3
(0588) 	lcd_wc(LC_CUR_SHP | 0x00);			// 光标形状
    0DCD EA01      LDI	R16,0xA1
    0DCE DF14      RCALL	_lcd_wc
(0589) 	lcd_wc3(LC_CGR_POS,0x03,0x00);		//CGRAM设置
    0DCF 2422      CLR	R2
    0DD0 8228      STD	Y+0,R2
    0DD1 E023      LDI	R18,3
    0DD2 E202      LDI	R16,0x22
    0DD3 DF21      RCALL	_lcd_wc3
(0590) 	lcd_wc(LC_MOD_OR);					// 显示方式设置
    0DD4 E800      LDI	R16,0x80
    0DD5 DF0D      RCALL	_lcd_wc
(0591) 	lcd_wc(0x9C);						// 显示开关设置,允许文本图形显示,关闭光标
    0DD6 E90C      LDI	R16,0x9C
    0DD7 DF0B      RCALL	_lcd_wc
    0DD8 9621      ADIW	R28,1
    0DD9 9508      RET
_cls:
  i                    --> R20
    0DDA 940E1377  CALL	push_gset1
    0DDC 9721      SBIW	R28,1
(0592) }
(0593) 
(0594) 
(0595) 
(0596) // 清屏
(0597) void cls(void)
(0598) {
(0599) 	uint  i;
(0600)     lcd_init();                     // 调用初始化  
    0DDD DFBC      RCALL	_lcd_init
(0601) 	lcd_wc3(LC_ADD_POS,0x00,0x00);	// 置地址指针
    0DDE 2422      CLR	R2
    0DDF 8228      STD	Y+0,R2
    0DE0 2722      CLR	R18
    0DE1 E204      LDI	R16,0x24
    0DE2 DF12      RCALL	_lcd_wc3
(0602) 	lcd_wc(LC_AUT_WR);				// 自动写
    0DE3 EB00      LDI	R16,0xB0
    0DE4 DEFE      RCALL	_lcd_wc
(0603) 	for(i=0;i<4608;i++)
    0DE5 2744      CLR	R20
    0DE6 2755      CLR	R21
    0DE7 C004      RJMP	0x0DEC
(0604) 	{
(0605) 		lcd_wd(0x00);				// 写数据
    0DE8 2700      CLR	R16
    0DE9 DEE3      RCALL	_lcd_wd
    0DEA 5F4F      SUBI	R20,0xFF
    0DEB 4F5F      SBCI	R21,0xFF
    0DEC 3040      CPI	R20,0
    0DED E1E2      LDI	R30,0x12
    0DEE 075E      CPC	R21,R30
    0DEF F3C0      BCS	0x0DE8
(0606) 	}
(0607) 	lcd_wc(LC_AUT_OVR);				// 自动写结束
    0DF0 EB02      LDI	R16,0xB2
    0DF1 DEF1      RCALL	_lcd_wc
(0608) 	lcd_wc3(LC_ADD_POS,0x00,0x00);	// 重置地址指针
    0DF2 2422      CLR	R2
    0DF3 8228      STD	Y+0,R2
    0DF4 2722      CLR	R18
    0DF5 E204      LDI	R16,0x24
    0DF6 DEFE      RCALL	_lcd_wc3
(0609) 	gCurRow = 0;					// 置地址指针存储变量
    0DF7 2422      CLR	R2
    0DF8 92200167  STS	gCurRow,R2
(0610) 	gCurCol = 0;
    0DFA 92200166  STS	gCurCol,R2
    0DFC 9621      ADIW	R28,1
    0DFD 940E137A  CALL	pop_gset1
    0DFF 9508      RET
_lcd_fill:
  i                    --> R20
  j                    --> R10
  lcd_data             --> R22
    0E00 940E1373  CALL	push_gset3
    0E02 2F60      MOV	R22,R16
    0E03 9721      SBIW	R28,1
(0611) }
(0612) 
(0613) 
(0614) 
(0615) 
(0616) /***********************************************************************************/
(0617) void lcd_fill(uchar lcd_data)
(0618) {
(0619)         uchar i,j;
(0620)         lcd_wc(0x98);                    /* 打开图形显示,关闭文本显示   */
    0E04 E908      LDI	R16,0x98
    0E05 DEDD      RCALL	_lcd_wc
(0621)         lcd_wc3(0x24,0,0);               /* 设置地址指针 */
    0E06 2422      CLR	R2
    0E07 8228      STD	Y+0,R2
    0E08 2722      CLR	R18
    0E09 E204      LDI	R16,0x24
    0E0A DEEA      RCALL	_lcd_wc3
(0622)         lcd_wc(0xb0);                    /* 设置自动写数据 */
    0E0B EB00      LDI	R16,0xB0
    0E0C DED6      RCALL	_lcd_wc
(0623)         for(i=0;i<128;i++)
    0E0D 2744      CLR	R20
    0E0E C009      RJMP	0x0E18
(0624)         {
(0625)                 for(j=0;j<30;j++)
    0E0F 24AA      CLR	R10
    0E10 C003      RJMP	0x0E14

⌨️ 快捷键说明

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