📄 595_1602_example.lst
字号:
(0453) }
(0454) }
023B D0AE RCALL pop_gset5
023C 9624 ADIW R28,4
023D 9508 RET
_FlashStringGroup:
Y --> Y+6
X --> Y+4
StringCounter --> R22
String --> R20
023E D0B3 RCALL push_gset2
023F 2F62 MOV R22,R18
0240 01A8 MOVW R20,R16
(0455) }
(0456)
(0457) /********************************************************
(0458) * 函数说明:字幕GIF函数 *
(0459) ********************************************************/
(0460) void FlashStringGroup(char String[][17],char StringCounter,char X,char Y)
(0461) {
(0462) static char Pictures = 0;
(0463) static char DispState = 0;
(0464) if (FlashGIFStringCounter % FlashGIFTimeOut > (FlashGIFTimeOut >> 1))
0241 EE28 LDI R18,0xE8
0242 E033 LDI R19,3
0243 9100006A LDS R16,FlashGIFStringCounter
0245 9110006B LDS R17,FlashGIFStringCounter+1
0247 D084 RCALL mod16u
0248 EF84 LDI R24,0xF4
0249 E091 LDI R25,1
024A 1780 CP R24,R16
024B 0791 CPC R25,R17
024C F490 BCC 0x025F
(0465) {
(0466) if (DispState == 0)
024D 90200069 LDS R2,DispState
024F 2022 TST R2
0250 F4F9 BNE 0x0270
(0467) {
(0468) Pictures ++;
0251 91800068 LDS R24,Pictures
0253 5F8F SUBI R24,0xFF
0254 93800068 STS Pictures,R24
(0469) if (Pictures == StringCounter)
0256 1786 CP R24,R22
0257 F419 BNE 0x025B
(0470) {
(0471) Pictures = 0;
0258 2422 CLR R2
0259 92200068 STS Pictures,R2
(0472) }
(0473) DispState = 1;
025B E081 LDI R24,1
025C 93800069 STS DispState,R24
(0474) }
(0475) }
025E C011 RJMP 0x0270
(0476) else
(0477) {
(0478) if (DispState == 1)
025F 91800069 LDS R24,DispState
0261 3081 CPI R24,1
0262 F469 BNE 0x0270
(0479) {
(0480) Pictures ++;
0263 91800068 LDS R24,Pictures
0265 5F8F SUBI R24,0xFF
0266 93800068 STS Pictures,R24
(0481) if (Pictures == StringCounter)
0268 1786 CP R24,R22
0269 F419 BNE 0x026D
(0482) {
(0483) Pictures = 0;
026A 2422 CLR R2
026B 92200068 STS Pictures,R2
(0484) }
(0485) DispState = 0;
026D 2422 CLR R2
026E 92200069 STS DispState,R2
(0486) }
(0487) }
(0488)
(0489) Locate(X,Y);
0270 812E LDD R18,Y+6
0271 5021 SUBI R18,1
0272 810C LDD R16,Y+4
0273 5001 SUBI R16,1
0274 DEF1 RCALL _LCDSetXY
(0490) Print(String[Pictures]);
0275 90200068 LDS R2,Pictures
0277 E181 LDI R24,0x11
0278 9D82 MUL R24,R2
0279 0180 MOVW R16,R0
027A 0F04 ADD R16,R20
027B 1F15 ADC R17,R21
027C DEF8 RCALL _LCDDisplayString
027D D06A RCALL pop_gset2
027E 9508 RET
FILE: G:\单片机\源程序\串行1602\595_1602_Example\595_1602_Example.c
(0001) /********************************************************
(0002) * 程序说明:串行1602调试程序 *
(0003) * 版本: v1.0 *
(0004) * 平台: ATMega8L 8M *
(0005) * 作者: 傻孩子 *
(0006) * 日期: 2006年1月11日 *
(0007) * 修改: 傻孩子 *
(0008) * 修改日期:2006年2月19日 *
(0009) * *
(0010) * [说明] *
(0011) ********************************************************/
(0012) # include "RD_ATMega8L.h"
(0013)
(0014) /***********************
(0015) * 系 统 宏 定 义 *
(0016) ***********************/
(0017) # pragma interrupt_handler Timer0OvfIsr:10
(0018) /*---------------------*
(0019) * SerialToCollateral.h *
(0020) * 配置宏定义 *
(0021) *---------------------*/
(0022) # define VSCK _PC4
(0023) # define VRCK _PC3
(0024) # define VSI _PC5
(0025) /*--- 定义_Use_8Bit_VitualPORT 选择单个595模式 ---*/
(0026) # define _Use_8Bit_VitualPORT
(0027) # include "SerialToCollateral.h"
(0028)
(0029) /*---------------------*
(0030) * RD_LCD1602B.h *
(0031) * 配置宏定义 *
(0032) *---------------------*/
(0033) # define LCD_RS PV4
(0034) # define LCD_E PV5
(0035) # define LCD_SendHalfCharLow(a) VPORT &= 0xf0;VPORT |= (a & 0x0f);refreshVirtualPORT();
(0036) # define LCD_SendHalfCharHigh(a) VPORT &= 0xf0;VPORT |= (a >> 4);refreshVirtualPORT();
(0037) # define SetEnable LCD_E = High;refreshVirtualPORT();
(0038) # define SetDisable LCD_E = Low;refreshVirtualPORT();
(0039)
(0040) /*--- 修改FlashTimeOut来修改显示字符闪烁的频率 ---*/
(0041) # define FlashTimeOut 800
(0042) # define RunStringSpeed 11
(0043) /*--- 定义_Use_LCD1602B_Serial 选择595串行连接模式(否则为直接连接模式) ---*/
(0044) # define _Use_LCD1602B_Serial
(0045) # include "RD_LCD1602B.h"
(0046)
(0047) /***********************
(0048) * 全局变量声明区 *
(0049) ***********************/
(0050) unsigned int FlashGIFStringCounter = 0;
(0051) unsigned int FlashTimeCounter = 0;
(0052)
(0053) /***********************
(0054) * 系统函数声明区 *
(0055) ***********************/
(0056) void SystemInit(void);
(0057) void PortInit(void);
(0058) void Timer0Init(void);
(0059)
(0060) /********************************************************
(0061) * 函数说明:端口初始化 *
(0062) ********************************************************/
(0063) void PortInit(void)
(0064) {
(0065) DDRC = 0xff;
_PortInit:
027F EF8F LDI R24,0xFF
0280 BB84 OUT 0x14,R24
(0066) PORTC = 0xff;
0281 BB85 OUT 0x15,R24
(0067)
(0068) PORTDefine();
0282 DDE3 RCALL _PORTDefine
0283 9508 RET
(0069) }
(0070)
(0071) /********************************************************
(0072) * 函数说明:定时器0初始化函数 *
(0073) ********************************************************/
(0074) void Timer0Init(void)
(0075) {
(0076) TCCR0 = 0x00; //stop
_Timer0Init:
0284 2422 CLR R2
0285 BE23 OUT 0x33,R2
(0077) TCNT0 = 0x83; //set count
0286 E883 LDI R24,0x83
0287 BF82 OUT 0x32,R24
(0078) TCCR0 = 0x03; //start timer
0288 E083 LDI R24,3
0289 BF83 OUT 0x33,R24
028A 9508 RET
_Timer0OvfIsr:
028B 938A ST R24,-Y
028C 939A ST R25,-Y
028D B78F IN R24,0x3F
028E 938A ST R24,-Y
(0079) }
(0080)
(0081) /********************************************************
(0082) * 函数说明:定时器0中断处理函数 *
(0083) ********************************************************/
(0084) void Timer0OvfIsr(void)
(0085) {
(0086) TCNT0 = 0x83;
028F E883 LDI R24,0x83
0290 BF82 OUT 0x32,R24
(0087)
(0088) FlashGIFStringCounter ++;
0291 9180006A LDS R24,FlashGIFStringCounter
0293 9190006B LDS R25,FlashGIFStringCounter+1
0295 9601 ADIW R24,1
0296 9390006B STS FlashGIFStringCounter+1,R25
0298 9380006A STS FlashGIFStringCounter,R24
(0089) FlashTimeCounter ++;
029A 9180006C LDS R24,FlashTimeCounter
029C 9190006D LDS R25,FlashTimeCounter+1
029E 9601 ADIW R24,1
029F 9390006D STS FlashTimeCounter+1,R25
02A1 9380006C STS FlashTimeCounter,R24
02A3 9189 LD R24,Y+
02A4 BF8F OUT 0x3F,R24
02A5 9199 LD R25,Y+
02A6 9189 LD R24,Y+
02A7 9518 RETI
(0090)
(0091) }
(0092)
(0093) /********************************************************
(0094) * 函数说明:系统初始化函数 *
(0095) ********************************************************/
(0096) void SystemInit(void)
(0097) {
(0098) CLI();
_SystemInit:
02A8 94F8 BCLR 7
(0099)
(0100) PortInit();
02A9 DFD5 RCALL _PortInit
(0101) Timer0Init();
02AA DFD9 RCALL _Timer0Init
(0102) LCDInit();
02AB DE62 RCALL _LCDInit
(0103)
(0104) TIMSK = 0x01
02AC E081 LDI R24,1
02AD BF89 OUT 0x39,R24
02AE 9478 BSET 7
02AF 9508 RET
_main:
02B0 9725 SBIW R28,5
(0105)
(0106) SEI();
(0107) }
(0108)
(0109)
(0110) void main(void)
(0111) {
(0112) SystemInit();
02B1 DFF6 RCALL _SystemInit
02B2 C011 RJMP 0x02C4
(0113)
(0114) while(1)
(0115) {
(0116) RunString("I really like this game! SWUST Roboteam ",1,1,1,16);
02B3 E180 LDI R24,0x10
02B4 838C STD Y+4,R24
02B5 E081 LDI R24,1
02B6 838A STD Y+2,R24
02B7 8388 STD Y+0,R24
02B8 E021 LDI R18,1
02B9 E70F LDI R16,0x7F
02BA E010 LDI R17,0
02BB DEEF RCALL _RunString
(0117) Flash("Hello AVR World!",' ',1,2);
FILE: <library>
02BC E082 LDI R24,2
02BD 838A STD Y+2,R24
02BE E081 LDI R24,1
02BF 8388 STD Y+0,R24
02C0 E220 LDI R18,0x20
02C1 E60E LDI R16,0x6E
02C2 E010 LDI R17,0
02C3 DF49 RCALL _Flash
02C4 CFEE RJMP 0x02B3
02C5 9625 ADIW R28,5
02C6 9508 RET
push_arg4:
02C7 933A ST R19,-Y
02C8 932A ST R18,-Y
push_arg2:
02C9 931A ST R17,-Y
02CA 930A ST R16,-Y
02CB 9508 RET
mod16u:
02CC 9468 BSET 6
02CD C001 RJMP xdiv16u
div16u:
02CE 94E8 BCLR 6
xdiv16u:
02CF 92EA ST R14,-Y
02D0 92FA ST R15,-Y
02D1 938A ST R24,-Y
02D2 24EE CLR R14
02D3 24FF CLR R15
02D4 E180 LDI R24,0x10
02D5 0F00 LSL R16
02D6 1F11 ROL R17
02D7 1CEE ROL R14
02D8 1CFF ROL R15
02D9 16E2 CP R14,R18
02DA 06F3 CPC R15,R19
02DB F018 BCS 0x02DF
02DC 1AE2 SUB R14,R18
02DD 0AF3 SBC R15,R19
02DE 9503 INC R16
02DF 958A DEC R24
02E0 F7A1 BNE 0x02D5
02E1 F416 BRTC 0x02E4
02E2 2D0E MOV R16,R14
02E3 2D1F MOV R17,R15
02E4 9189 LD R24,Y+
02E5 90F9 LD R15,Y+
02E6 90E9 LD R14,Y+
02E7 9508 RET
pop_gset2:
02E8 E0E2 LDI R30,2
02E9 C00E RJMP pop
pop_gset5:
02EA 27EE CLR R30
02EB C00C RJMP pop
push_gset5:
02EC 92FA ST R15,-Y
02ED 92EA ST R14,-Y
push_gset4:
02EE 92DA ST R13,-Y
02EF 92CA ST R12,-Y
push_gset3:
02F0 92BA ST R11,-Y
02F1 92AA ST R10,-Y
push_gset2:
02F2 937A ST R23,-Y
02F3 936A ST R22,-Y
push_gset1:
02F4 935A ST R21,-Y
02F5 934A ST R20,-Y
02F6 9508 RET
pop_gset1:
02F7 E0E1 LDI R30,1
pop:
02F8 9149 LD R20,Y+
02F9 9159 LD R21,Y+
02FA FDE0 SBRC R30,0
02FB 9508 RET
02FC 9169 LD R22,Y+
02FD 9179 LD R23,Y+
02FE FDE1 SBRC R30,1
02FF 9508 RET
0300 90A9 LD R10,Y+
0301 90B9 LD R11,Y+
0302 FDE2 SBRC R30,2
0303 9508 RET
0304 90C9 LD R12,Y+
0305 90D9 LD R13,Y+
0306 FDE3 SBRC R30,3
0307 9508 RET
0308 90E9 LD R14,Y+
0309 90F9 LD R15,Y+
030A 9508 RET
lsl32:
030B 920F PUSH R0
030C 9009 LD R0,Y+
030D 2000 TST R0
030E F031 BEQ 0x0315
030F 0F00 LSL R16
0310 1F11 ROL R17
0311 1F22 ROL R18
0312 1F33 ROL R19
0313 940A DEC R0
0314 CFF8 RJMP 0x030D
0315 900F POP R0
0316 9508 RET
lsl8:
0317 2311 TST R17
0318 F019 BEQ 0x031C
0319 0F00 LSL R16
031A 951A DEC R17
031B CFFB RJMP lsl8
031C 9508 RET
lsr32:
031D 920F PUSH R0
031E 9009 LD R0,Y+
031F 2000 TST R0
0320 F031 BEQ 0x0327
0321 9536 LSR R19
0322 9527 ROR R18
0323 9517 ROR R17
0324 9507 ROR R16
0325 940A DEC R0
0326 CFF8 RJMP 0x031F
0327 900F POP R0
0328 9508 RET
<created procedures>:
0329 91E00061 LDS R30,VPORTBit
032B 91F00062 LDS R31,VPORTBit+1
032D 8180 LDD R24,Z+0
032E 9508 RET
032F 91E000BE LDS R30,PORTC_BIT
0331 91F000BF LDS R31,PORTC_BIT+1
0333 8180 LDD R24,Z+0
0334 9508 RET
0335 91800060 LDS R24,VPORT
0337 7F80 ANDI R24,0xF0
0338 93800060 STS VPORT,R24
033A 2F84 MOV R24,R20
033B 9582 SWAP R24
033C 708F ANDI R24,0xF
033D 90200060 LDS R2,VPORT
033F 2A28 OR R2,R24
0340 92200060 STS VPORT,R2
0342 9508 RET
0343 708F ANDI R24,0xF
0344 90200060 LDS R2,VPORT
0346 2A28 OR R2,R24
0347 92200060 STS VPORT,R2
0349 9508 RET
034A 91800060 LDS R24,VPORT
034C 7F80 ANDI R24,0xF0
034D 93800060 STS VPORT,R24
034F 2F84 MOV R24,R20
0350 9508 RET
0351 01CE MOVW R24,R28
0352 2DEA MOV R30,R10
0353 27FF CLR R31
0354 0FE8 ADD R30,R24
0355 1FF9 ADC R31,R25
0356 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -