📄 t6963.lst
字号:
__start:
__text_start:
038E E5CF LDI R28,0x5F
038F E0D4 LDI R29,4
0390 BFCD OUT 0x3D,R28
0391 BFDE OUT 0x3E,R29
0392 51C0 SUBI R28,0x10
0393 40D0 SBCI R29,0
0394 EA0A LDI R16,0xAA
0395 8308 STD Y+0,R16
0396 2400 CLR R0
0397 E8EF LDI R30,0x8F
0398 E0F0 LDI R31,0
0399 E010 LDI R17,0
039A 39E1 CPI R30,0x91
039B 07F1 CPC R31,R17
039C F011 BEQ 0x039F
039D 9201 ST R0,Z+
039E CFFB RJMP 0x039A
039F 8300 STD Z+0,R16
03A0 EEEC LDI R30,0xEC
03A1 E0F6 LDI R31,6
03A2 E6A0 LDI R26,0x60
03A3 E0B0 LDI R27,0
03A4 E017 LDI R17,7
03A5 31EB CPI R30,0x1B
03A6 07F1 CPC R31,R17
03A7 F021 BEQ 0x03AC
03A8 95C8 LPM
03A9 9631 ADIW R30,1
03AA 920D ST R0,X+
03AB CFF9 RJMP 0x03A5
03AC D31A RCALL _main
_exit:
03AD CFFF RJMP _exit
FILE: D:\NEW\AVR_T6963\t6963.c
(0001) #define T6963_C
(0002) #include "includes.h"
(0003)
(0004)
(0005) /************************************************/
(0006) /* 取当前行数据*/
(0007) /************************************************/
(0008) unsigned char fnGetRow(void)
(0009) {
(0010) return(gCurRow);
_fnGetRow:
03AE 91000090 LDS R16,_gCurRow
03B0 9508 RET
(0011) }
(0012) /************************************************/
(0013) /* 取当前列数据*/
(0014) /************************************************/
(0015) unsigned char fnGetCol(void)
(0016) {
(0017) return(gCurCol);
_fnGetCol:
03B1 9100008F LDS R16,_gCurCol
03B3 9508 RET
(0018) }
(0019) /************************************************/
(0020) /* 读状态*/
(0021) /************************************************/
(0022) unsigned char RD_LCM(void)
(0023) {
(0024) unsigned char temp;
(0025) dir_datap=0x00;
_RD_LCM:
temp --> R16
03B4 2422 CLR R2
03B5 BA27 OUT 0x17,R2
(0026) port_conp |= (1 <<LCM ); //LCM=LCMCW;
03B6 9ADA SBI 0x1B,2
(0027) port_conp &= ~(1 << RD); //RD=0;
03B7 98D9 CBI 0x1B,1
(0028) NOP();
03B8 0000 NOP
(0029) temp=LCD_IN;
03B9 B306 IN R16,0x16
(0030) port_conp |= (1<<RD); //RD=1;
03BA 9AD9 SBI 0x1B,1
(0031) dir_datap = 0xff;
03BB EF8F LDI R24,0xFF
03BC BB87 OUT 0x17,R24
(0032) return(temp);
03BD 9508 RET
(0033) }
(0034) /************************************************/
(0035) /* 读数据*/
(0036) /************************************************/
(0037) unsigned char RD_DAT(void)
(0038) {
(0039) unsigned char temp;
(0040) dir_datap = 0x00;
_RD_DAT:
temp --> R16
03BE 2422 CLR R2
03BF BA27 OUT 0x17,R2
(0041) port_conp &= ~(1<<LCM); //LCM=LCMDW;
03C0 98DA CBI 0x1B,2
(0042) port_conp &= ~(1 << RD); //RD=0;
03C1 98D9 CBI 0x1B,1
(0043) NOP();
03C2 0000 NOP
(0044) temp = LCD_IN;
03C3 B306 IN R16,0x16
(0045) port_conp |= (1<<RD); //RD=1;
03C4 9AD9 SBI 0x1B,1
(0046) dir_datap = 0xff;
03C5 EF8F LDI R24,0xFF
03C6 BB87 OUT 0x17,R24
(0047) return(temp);
03C7 9508 RET
(0048) }
(0049) /************************************************/
(0050) /* 写数据*/
(0051) /************************************************/
(0052) void WR_DAT(unsigned char val)
(0053) {
(0054) dir_datap = 0xff;
_WR_DAT:
val --> R16
03C8 EF8F LDI R24,0xFF
03C9 BB87 OUT 0x17,R24
(0055) port_conp &= ~(1<<LCM); //LCM=LCMDW;
03CA 98DA CBI 0x1B,2
(0056) LCD_OUT = val;
03CB BB08 OUT 0x18,R16
(0057) port_conp &= ~(1<<WR); //WR=0;
03CC 98D8 CBI 0x1B,0
(0058) NOP();
03CD 0000 NOP
(0059) NOP();
03CE 0000 NOP
(0060) port_conp |= (1<<WR); //WR=1;
03CF 9AD8 SBI 0x1B,0
(0061) }
03D0 9508 RET
(0062) /************************************************/
(0063) /* 写命令*/
(0064) /************************************************/
(0065) void WR_CMD(unsigned char val)
(0066) {
(0067) dir_datap = 0xff;
_WR_CMD:
val --> R16
03D1 EF8F LDI R24,0xFF
03D2 BB87 OUT 0x17,R24
(0068) port_conp |= (1 << LCM); //LCM=LCMCW;
03D3 9ADA SBI 0x1B,2
(0069) LCD_OUT = val;
03D4 BB08 OUT 0x18,R16
(0070) port_conp &= ~(1<<WR); //WR=0;
03D5 98D8 CBI 0x1B,0
(0071) NOP();
03D6 0000 NOP
(0072) NOP();
03D7 0000 NOP
(0073) port_conp |= (1<<WR); //WR=1;
03D8 9AD8 SBI 0x1B,0
(0074) }
03D9 9508 RET
_fnSTA01:
i --> R20
03DA D393 RCALL push_gset1
(0075) /************************************************/
(0076) /* 状态位STA1,STA0判断读写指令和读写数据*/
(0077) /* 在读写数据或者写入命令前必须保证均为1 */
(0078) /************************************************/
(0079) unsigned char fnSTA01(void)
(0080) {
(0081) unsigned char i;
(0082) for(i=10;i>0;i--)
03DB E04A LDI R20,0xA
03DC C007 RJMP 0x03E4
(0083) {
(0084) if((RD_LCM() & 0x03) == 0x03) // 读取状态
03DD DFD6 RCALL _RD_LCM
03DE 2F80 MOV R24,R16
03DF 7083 ANDI R24,3
03E0 3083 CPI R24,3
03E1 F409 BNE 0x03E3
(0085) {
(0086) break;
03E2 C004 RJMP 0x03E7
03E3 954A DEC R20
03E4 2422 CLR R2
03E5 1624 CP R2,R20
03E6 F3B0 BCS 0x03DD
(0087) }
(0088) }
(0089) return(i); // 若返回零说明错误
03E7 2F04 MOV R16,R20
03E8 D388 RCALL pop_gset1
03E9 9508 RET
_fnSTA2:
i --> R20
03EA D383 RCALL push_gset1
(0090) }
(0091) /********************************************/
(0092) /* 检查STA2,如果STA2=1 为自动读状态*/
(0093) /********************************************/
(0094) unsigned char fnSTA2(void)
(0095) {
(0096) unsigned char i;
(0097) for(i=10;i>0;i--)
03EB E04A LDI R20,0xA
03EC C007 RJMP 0x03F4
(0098) {
(0099) if((RD_LCM() & 0x04) == 0x04)
03ED DFC6 RCALL _RD_LCM
03EE 2F80 MOV R24,R16
03EF 7084 ANDI R24,4
03F0 3084 CPI R24,4
03F1 F409 BNE 0x03F3
(0100) {
(0101) break;
03F2 C004 RJMP 0x03F7
03F3 954A DEC R20
03F4 2422 CLR R2
03F5 1624 CP R2,R20
03F6 F3B0 BCS 0x03ED
(0102) }
(0103) }
(0104) return(i); // 若返回零说明错误
03F7 2F04 MOV R16,R20
03F8 D378 RCALL pop_gset1
03F9 9508 RET
_fnSTA3:
i --> R20
03FA D373 RCALL push_gset1
(0105) }
(0106) /***********************************************/
(0107) /* 状态位STA3 判断STA3 = 1 数据自动写状态*/
(0108) /***********************************************/
(0109) unsigned char fnSTA3(void)
(0110) {
(0111) unsigned char i;
(0112) for(i=10;i>0;i--)
03FB E04A LDI R20,0xA
03FC C007 RJMP 0x0404
(0113) {
(0114) if((RD_LCM() & 0x08) == 0x08)
03FD DFB6 RCALL _RD_LCM
03FE 2F80 MOV R24,R16
03FF 7088 ANDI R24,0x8
0400 3088 CPI R24,0x8
0401 F409 BNE 0x0403
(0115) {
(0116) break;
0402 C004 RJMP 0x0407
0403 954A DEC R20
0404 2422 CLR R2
0405 1624 CP R2,R20
0406 F3B0 BCS 0x03FD
(0117) }
(0118) }
(0119) return(i); // 若返回零说明错误
0407 2F04 MOV R16,R20
0408 D368 RCALL pop_gset1
0409 9508 RET
_fnSTA6:
i --> R20
040A D363 RCALL push_gset1
(0120) }
(0121) /************************************************/
(0122) /* 状态位STA6 判断STA6 =1 屏读/屏拷贝状态*/
(0123) /************************************************/
(0124) unsigned char fnSTA6(void)
(0125) {
(0126) unsigned char i;
(0127) for(i=10;i>0;i--)
040B E04A LDI R20,0xA
040C C007 RJMP 0x0414
(0128) {
(0129) if((RD_LCM() & 0x40) == 0x40)
040D DFA6 RCALL _RD_LCM
040E 2F80 MOV R24,R16
040F 7480 ANDI R24,0x40
0410 3480 CPI R24,0x40
0411 F409 BNE 0x0413
(0130) {
(0131) break;
0412 C004 RJMP 0x0417
0413 954A DEC R20
0414 2422 CLR R2
0415 1624 CP R2,R20
0416 F3B0 BCS 0x040D
(0132) }
(0133) }
(0134) return(i); // 若返回零说明错误
0417 2F04 MOV R16,R20
0418 D358 RCALL pop_gset1
0419 9508 RET
_fnPR1:
uPar2 --> Y+4
uPar1 --> R22
uCmd --> R20
041A D36A RCALL push_gset2
041B 2F62 MOV R22,R18
041C 2F40 MOV R20,R16
(0135) }
(0136) /************************/
(0137) /* 写双参数的指令*/
(0138) /************************/
(0139) unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
(0140) {
(0141) if(fnSTA01() == 0)
041D DFBC RCALL _fnSTA01
041E 2300 TST R16
041F F411 BNE 0x0422
(0142) {
(0143) return 1;
0420 E001 LDI R16,1
0421 C011 RJMP 0x0433
(0144) }
(0145) WR_DAT(uPar1);
0422 2F06 MOV R16,R22
0423 DFA4 RCALL _WR_DAT
(0146) if(fnSTA01() == 0)
0424 DFB5 RCALL _fnSTA01
0425 2300 TST R16
0426 F411 BNE 0x0429
(0147) {
(0148) return 2;
0427 E002 LDI R16,2
0428 C00A RJMP 0x0433
(0149) }
(0150) WR_DAT(uPar2);
0429 810C LDD R16,Y+4
042A DF9D RCALL _WR_DAT
(0151) if(fnSTA01() == 0)
042B DFAE RCALL _fnSTA01
042C 2300 TST R16
042D F411 BNE 0x0430
(0152) {
(0153) return 3;
042E E003 LDI R16,3
042F C003 RJMP 0x0433
(0154) }
(0155) WR_CMD(uCmd);
0430 2F04 MOV R16,R20
0431 DF9F RCALL _WR_CMD
(0156) return(0); // 返回0 成功
0432 2700 CLR R16
0433 D334 RCALL pop_gset2
0434 9508 RET
_fnPR11:
uPar1 --> R22
uCmd --> R20
0435 D34F RCALL push_gset2
0436 2F62 MOV R22,R18
0437 2F40 MOV R20,R16
(0157) }
(0158) /************************/
(0159) /* 写单参数的指令*/
(0160) /************************/
(0161) unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
(0162) {
(0163) if(fnSTA01() == 0)
0438 DFA1 RCALL _fnSTA01
0439 2300 TST R16
043A F411 BNE 0x043D
(0164) {
(0165) return 1;
043B E001 LDI R16,1
043C C00A RJMP 0x0447
(0166) }
(0167) WR_DAT(uPar1);
043D 2F06 MOV R16,R22
043E DF89 RCALL _WR_DAT
(0168) if(fnSTA01() == 0)
043F DF9A RCALL _fnSTA01
0440 2300 TST R16
0441 F411 BNE 0x0444
(0169) {
(0170) return 2;
0442 E002 LDI R16,2
0443 C003 RJMP 0x0447
(0171) }
(0172) WR_CMD(uCmd);
0444 2F04 MOV R16,R20
0445 DF8B RCALL _WR_CMD
(0173) return(0); // 返回0 成功
0446 2700 CLR R16
0447 D320 RCALL pop_gset2
0448 9508 RET
_fnPR12:
uCmd --> R20
0449 D324 RCALL push_gset1
044A 2F40 MOV R20,R16
(0174) }
(0175) /************************/
(0176) /* 写无参数的指令*/
(0177) /************************/
(0178) unsigned char fnPR12(unsigned char uCmd)
(0179) {
(0180) if(fnSTA01() == 0)
044B DF8E RCALL _fnSTA01
044C 2300 TST R16
044D F411 BNE 0x0450
(0181) {
(0182) return 1;
044E E001 LDI R16,1
044F C003 RJMP 0x0453
(0183) }
(0184) WR_CMD(uCmd);
0450 2F04 MOV R16,R20
0451 DF7F RCALL _WR_CMD
(0185) return(0); // 返回0 成功
0452 2700 CLR R16
0453 D31D RCALL pop_gset1
0454 9508 RET
_fnPR13:
uData --> R20
0455 D318 RCALL push_gset1
0456 2F40 MOV R20,R16
(0186) }
(0187) /************************/
(0188) /* 写数据*/
(0189) /************************/
(0190) unsigned char fnPR13(unsigned char uData)
(0191) {
(0192) if(fnSTA3() == 0)
0457 DFA2 RCALL _fnSTA3
0458 2300 TST R16
0459 F411 BNE 0x045C
(0193) {
(0194) return 1;
045A E001 LDI R16,1
045B C003 RJMP 0x045F
(0195) }
(0196) WR_DAT(uData);
045C 2F04 MOV R16,R20
045D DF6A RCALL _WR_DAT
(0197) return(0); // 返回0 成功
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -