📄 testlcd.lst
字号:
9D7 940E 174B CALL 0x174B
9D9 9060 0062 LDS R6,serial
9DB 2477 CLR R7
9DC 2488 CLR R8
9DD 2499 CLR R9
9DE 940E 17DF CALL 0x17DF
9E0 940E 18EC CALL 0x18EC
9E2 940E 18CB CALL 0x18CB
(0286) serial++;
(0287) *blockserial = SecPerClus-serial;
(0288) if(serial == SecPerClus)
9E4 F419 BNE 0x09E8
(0289) serial = 0;
9E5 2422 CLR R2
9E6 9220 0062 STS serial,R2
(0290) }
(0291) if(serial == 0)
9E8 9020 0062 LDS R2,serial
9EA 2022 TST R2
9EB F431 BNE 0x09F2
(0292) blocknow = Block;
9EC 802C LDD R2,Y+4
9ED 803D LDD R3,Y+5
9EE 804E LDD R4,Y+6
9EF 805F LDD R5,Y+7
9F0 940E 1930 CALL 0x1930
(0293) if(blocknow == 0xFFFFFFFF)
9F2 940E 183B CALL 0x183B
9F4 9040 00BF LDS R4,blocknow+2
9F6 9050 00C0 LDS R5,blocknow+3
9F8 9020 00BD LDS R2,blocknow
9FA 9030 00BE LDS R3,blocknow+1
9FC 940E 17E4 CALL 0x17E4
9FE F411 BNE 0x0A01
(0294) return 1;
9FF E001 LDI R16,1
A00 C001 RJMP 0x0A02
(0295) else
(0296) return 0;
A01 2700 CLR R16
A02 9628 ADIW R28,0x8
A03 940E 16CE CALL pop_xgsetF03C
A05 9624 ADIW R28,4
A06 9508 RET
(0297)
(0298) }
(0299)
(0300) unsigned char strscmp(unsigned char *src,unsigned char *dist)
(0301) {
_strscmp:
dist --> R18
src --> R16
A07 C017 RJMP 0x0A1F
(0302) while(*src)
(0303) {
(0304) if((*src) != (*dist))
A08 01F9 MOVW R30,R18
A09 8020 LDD R2,Z+0
A0A 01F8 MOVW R30,R16
A0B 8030 LDD R3,Z+0
A0C 1432 CP R3,R2
A0D F069 BEQ 0x0A1B
(0305) {
(0306) if((*src) > (*dist))
A0E 01F9 MOVW R30,R18
A0F 8020 LDD R2,Z+0
A10 2433 CLR R3
A11 01F8 MOVW R30,R16
A12 8040 LDD R4,Z+0
A13 2455 CLR R5
A14 1424 CP R2,R4
A15 0435 CPC R3,R5
A16 F414 BGE 0x0A19
(0307) return 1;
A17 E001 LDI R16,1
A18 C00B RJMP 0x0A24
(0308) else
(0309) return 2;
A19 E002 LDI R16,2
A1A C009 RJMP 0x0A24
(0310) }
(0311) src++;
A1B 5F0F SUBI R16,0xFF
A1C 4F1F SBCI R17,0xFF
(0312) dist++;
A1D 5F2F SUBI R18,0xFF
A1E 4F3F SBCI R19,0xFF
A1F 01F8 MOVW R30,R16
A20 8020 LDD R2,Z+0
A21 2022 TST R2
A22 F729 BNE 0x0A08
(0313) }
(0314) return 0;
A23 2700 CLR R16
A24 9508 RET
_fat_search_file:
Dir_Cluster_Store --> R14
a --> R20
buff --> R12
Dir_Attrib --> Y,+20
Size --> Y,+18
Cluster --> R10
File_Name --> R22
A25 940E 169C CALL push_xgsetF0FC
A27 0159 MOVW R10,R18
A28 01B8 MOVW R22,R16
A29 9728 SBIW R28,0x8
A2A 88CE LDD R12,Y+22
A2B 88DF LDD R13,Y+23
(0315) }
(0316)
(0317) //####################################################################################
(0318) //Sucht ein File im Directory
(0319) unsigned char fat_search_file (unsigned char *File_Name, //要查找的文件名
(0320) unsigned long *Cluster, //要查找的文件所在簇
(0321) unsigned long *Size, //查到的文件大小
(0322) unsigned char *Dir_Attrib,//查到的文件属性
(0323) unsigned char *buff) //查到的文件名称
(0324) //####################################################################################
(0325) {
(0326) unsigned int Dir_Cluster_Store = *Cluster;
A2C 01F5 MOVW R30,R10
A2D 80E0 LDD R14,Z+0
A2E 80F1 LDD R15,Z+1
(0327) unsigned char a;
(0328) for (a = 0;a < 100;a++)
A2F 2744 CLR R20
A30 C02D RJMP 0x0A5E
(0329) {
(0330) *Cluster = fat_read_dir_ent(Dir_Cluster_Store,a,Size,Dir_Attrib,buff);
A31 82DF STD Y+7,R13
A32 82CE STD Y+6,R12
A33 880C LDD R0,Y+20
A34 881D LDD R1,Y+21
A35 821D STD Y+5,R1
A36 820C STD Y+4,R0
A37 880A LDD R0,Y+18
A38 881B LDD R1,Y+19
A39 821B STD Y+3,R1
A3A 820A STD Y+2,R0
A3B 2E24 MOV R2,R20
A3C 2433 CLR R3
A3D 8239 STD Y+1,R3
A3E 8228 STD Y+0,R2
A3F 0187 MOVW R16,R14
A40 0198 MOVW R18,R16
A41 2722 CLR R18
A42 2733 CLR R19
A43 DEA9 RCALL _fat_read_dir_ent
A44 01F5 MOVW R30,R10
A45 8300 STD Z+0,R16
A46 8311 STD Z+1,R17
A47 8322 STD Z+2,R18
A48 8333 STD Z+3,R19
(0331) if (*Cluster == 0xffff)
A49 EF8F LDI R24,0xFF
A4A EF9F LDI R25,0xFF
A4B E0A0 LDI R26,0
A4C E0B0 LDI R27,0
A4D 940E 1A73 CALL 0x1A73
A4F 1628 CP R2,R24
A50 0639 CPC R3,R25
A51 064A CPC R4,R26
A52 065B CPC R5,R27
A53 F411 BNE 0x0A56
(0332) {
(0333) return(0); //File not Found
A54 2700 CLR R16
A55 C00C RJMP 0x0A62
(0334) }
(0335) if(strscmp(File_Name,buff) == 0)
A56 0196 MOVW R18,R12
A57 018B MOVW R16,R22
A58 DFAE RCALL _strscmp
A59 2300 TST R16
A5A F411 BNE 0x0A5D
(0336) {
(0337) return(1); //File Found
A5B E001 LDI R16,1
A5C C005 RJMP 0x0A62
A5D 9543 INC R20
A5E 3644 CPI R20,0x64
A5F F408 BCC 0x0A61
A60 CFD0 RJMP 0x0A31
(0338) }
(0339) }
(0340) return(2); //Error
A61 E002 LDI R16,2
A62 9628 ADIW R28,0x8
A63 940C 1693 JMP pop_xgsetF0FC
FILE: D:\学习\AVRpro\Mega16程序\TestLCD\LCDDriver.C
(0001) //*********************************************
(0002) //液晶驱动.C
(0003) //MCU:AVR_MEGA16L ,晶振频率:8.0 MHz
(0004) //LCD:OCM12864-9 ,并口LCD
(0005) //制作人:平顶山工学院计算机系,郭猛
(0006) //**********************************************
(0007) # include "iom16v.h"
(0008) # include "macros.h"
(0009) # include "FontModel.h"
(0010) # include "LCDFun.h"
(0011)
(0012) //延时1ms
(0013) void Delay_1ms(void)
(0014) {
(0015) unsigned int j;
(0016) for(j=1;j<(unsigned int)(XTAL*143-2);j++) NOP();
_Delay_1ms:
j --> R16
A65 E001 LDI R16,1
A66 E010 LDI R17,0
A67 C003 RJMP 0x0A6B
A68 0000 NOP
A69 5F0F SUBI R16,0xFF
A6A 4F1F SBCI R17,0xFF
A6B E786 LDI R24,0x76
A6C E094 LDI R25,4
A6D 1708 CP R16,R24
A6E 0719 CPC R17,R25
A6F F3C0 BCS 0x0A68
A70 9508 RET
_Delay:
i --> R10
j --> R20
n --> R12
A71 940E 16BB CALL push_xgset303C
A73 0168 MOVW R12,R16
(0017) }
(0018) /*******************************************延时子程序**********************************************/
(0019) ///////////////////n的取值最好不要超过500!!!
(0020) void Delay(unsigned int n)
(0021) {
(0022) uchar i,j;
(0023) for(i=0;i<(uchar)(n/100);i++)
A74 24AA CLR R10
A75 C007 RJMP 0x0A7D
(0024) for(j=0;j<100;j++) Delay_1ms(); //100mS
A76 2744 CLR R20
A77 C002 RJMP 0x0A7A
A78 DFEC RCALL _Delay_1ms
A79 9543 INC R20
A7A 3644 CPI R20,0x64
A7B F3E0 BCS 0x0A78
A7C 94A3 INC R10
A7D 940E 19F6 CALL 0x19F6
A7F 16A0 CP R10,R16
A80 F3A8 BCS 0x0A76
A81 940C 16C2 JMP pop_xgset303C
(0025) }
(0026)
(0027) //*************************************LCD背光控制***************************************
(0028) void LCD_AK_Control(uchar OnOff) //On0FF=1,背光显示开;
(0029) {
(0030) SETDDRC(LCD_AK);
_LCD_AK_Control:
OnOff --> R16
A83 9AA3 SBI 0x14,3
(0031) if(OnOff) CLRPORTC(LCD_AK); else SETPORTC(LCD_AK);
A84 2300 TST R16
A85 F011 BEQ 0x0A88
A86 98AB CBI 0x15,3
A87 C001 RJMP 0x0A89
A88 9AAB SBI 0x15,3
A89 9508 RET
(0032) }
(0033)
(0034) //=====忙检测=================
(0035) void check_busy(void)
(0036) {
(0037) uchar read_data=0xFF;
_check_busy:
read_data --> R16
A8A EF0F LDI R16,0xFF
(0038) SETDDRD();//要输出LCD_DATA_OUT
A8B EF8F LDI R24,0xFF
A8C BB81 OUT 0x11,R24
(0039) LCD_DATA_OUT=0xFF;
A8D BB82 OUT 0x12,R24
(0040) CLRPORTC(LCD_RS);
A8E 98A8 CBI 0x15,0
(0041) SETPORTC(LCD_RW); //读命令
A8F 9AA9 SBI 0x15,1
(0042) CLRPORTC(LCD_CS1); //片使能
A90 98AD CBI 0x15,5
A91 C008 RJMP 0x0A9A
(0043) while((read_data&0x80)==0x80)
(0044) {
(0045) SETPORTC(LCD_E);
A92 9AAA SBI 0x15,2
(0046) ;
(0047) SETPORTD();
A93 EF8F LDI R24,0xFF
A94 BB82 OUT 0x12,R24
(0048) CLRDDRD();//要输入LCD_DATA_IN
A95 2422 CLR R2
A96 BA21 OUT 0x11,R2
(0049) SETPORTD();
A97 BB82 OUT 0x12,R24
(0050) ;
(0051) read_data=LCD_DATA_IN;
A98 B300 IN R16,0x10
(0052) CLRPORTC(LCD_E);
A99 98AA CBI 0x15,2
A9A 2F80 MOV R24,R16
A9B 7880 ANDI R24,0x80
A9C 3880 CPI R24,0x80
A9D F3A1 BEQ 0x0A92
(0053) }
(0054) CLRPORTC(LCD_E);
A9E 98AA CBI 0x15,2
(0055) SETPORTC(LCD_CS1); //片禁能
A9F 9AAD SBI 0x15,5
AA0 9508 RET
_send_cmd:
cmd --> R10
AA1 92AA ST R10,-Y
AA2 2EA0 MOV R10,R16
(0056) }
(0057) //=====写命令到寄存器=========
(0058) void send_cmd(uchar cmd)
(0059) {
(0060) check_busy();
AA3 DFE6 RCALL _check_busy
(0061) CLRPORTC(LCD_RS);
AA4 98A8 CBI 0x15,0
(0062) CLRPORTC(LCD_RW); //写命令
AA5 98A9 CBI 0x15,1
(0063) CLRPORTC(LCD_CS1); //片使能
AA6 98AD CBI 0x15,5
(0064) SETDDRD(); //要输出LCD_DATA_OUT
AA7 EF8F LDI R24,0xFF
AA8 BB81 OUT 0x11,R24
(0065) LCD_DATA_OUT=cmd;
AA9 BAA2 OUT 0x12,R10
(0066) SETPORTC(LCD_E);
AAA 9AAA SBI 0x15,2
(0067) ;
(0068) CLRPORTC(LCD_E);
AAB 98AA CBI 0x15,2
(0069) ;
(0070) SETPORTC(LCD_CS1); //片禁能
AAC 9AAD SBI 0x15,5
AAD 90A9 LD R10,Y+
AAE 9508 RET
_send_dat:
dat --> R10
AAF 92AA ST R10,-Y
AB0 2EA0 MOV R10,R16
(0071) }
(0072) //=====写数据到DDRAM=========
(0073) void send_dat(uchar dat)
(0074) {
(0075) check_busy();
AB1 DFD8 RCALL _check_busy
(0076) SETPORTC(LCD_RS);
AB2 9AA8 SBI 0x15,0
(0077) CLRPORTC(LCD_RW); //写数据
AB3 98A9 CBI 0x15,1
(0078) CLRPORTC(LCD_CS1); //片使能
AB4 98AD CBI 0x15,5
(0079) SETDDRD(); //要输出LCD_DATA_OUT
AB5 EF8F LDI R24,0xFF
AB6 BB81 OUT 0x11,R24
(0080) LCD_DATA_OUT=dat;
AB7 BAA2 OUT 0x12,R10
(0081) SETPORTC(LCD_E);
AB8 9AAA SBI 0x15,2
(0082) ;
(0083) CLRPORTC(LCD_E);
AB9 98AA CBI 0x15,2
(0084) ;
(0085) SETPORTC(LCD_CS1); //片禁能
ABA 9AAD SBI 0x15,5
ABB 90A9 LD R10,Y+
ABC 9508 RET
(0086) }//=======初始化==============
(0087) void LCD_Ini(void)
(0088) {
(0089) //控制端口设置为输出:
(0090) DDRC=0xFF;;
_LCD_Ini:
ABD EF8F LDI R24,0xFF
ABE BB84 OUT 0x14,R24
(0091) SETPORTC(LCD_RES);
ABF 9AAC SBI 0x15,4
(0092) CLRPORTC(LCD_E);
AC0 98AA CBI 0x15,2
(0093)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -