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

📄 testlcd.lst

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -