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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0824 940E0E43  CALL	pop_gset3
    0826 9508      RET
_LCD_Write_Data:
  data                 --> Y+4
  y                    --> R20
  x                    --> R22
    0827 940E0E60  CALL	push_gset2
    0829 2F42      MOV	R20,R18
    082A 2F60      MOV	R22,R16
(0279) 
(0280) //******************************************************************************
(0281) // Function    : LCD_Write_Data
(0282) // Input       : x in [0,7] and y in [0,127]
(0283) // Output      : none
(0284) // Description : Command Level Function,在指定行列写一个数据
(0285) //******************************************************************************
(0286) void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
(0287) {
(0288) 	if(y < 64)
    082B 3440      CPI	R20,0x40
    082C F448      BCC	0x0836
(0289) 	{
(0290) 		Set_CS1(1);
    082D E001      LDI	R16,1
    082E DF64      RCALL	_Set_CS1
(0291) 		Set_CS2(0);
    082F 2700      CLR	R16
    0830 DF5C      RCALL	_Set_CS2
(0292) 		LCD_Command_Set_X(x);
    0831 2F06      MOV	R16,R22
    0832 DF94      RCALL	_LCD_Command_Set_X
(0293) 		LCD_Command_Set_Y(y);
    0833 2F04      MOV	R16,R20
    0834 DFA5      RCALL	_LCD_Command_Set_Y
(0294) 	}
    0835 C009      RJMP	0x083F
(0295) 	else
(0296) 	{
(0297) 		Set_CS1(0);
    0836 2700      CLR	R16
    0837 DF5B      RCALL	_Set_CS1
(0298) 		Set_CS2(1);
    0838 E001      LDI	R16,1
    0839 DF53      RCALL	_Set_CS2
(0299) 		LCD_Command_Set_X(x);
    083A 2F06      MOV	R16,R22
    083B DF8B      RCALL	_LCD_Command_Set_X
(0300) 		LCD_Command_Set_Y(y - 64);		
    083C 2F04      MOV	R16,R20
    083D 5400      SUBI	R16,0x40
    083E DF9B      RCALL	_LCD_Command_Set_Y
(0301) 	}
(0302) 	LCD_Command_WriteByte(data);
    083F 810C      LDD	R16,Y+4
    0840 DFAC      RCALL	_LCD_Command_WriteByte
(0303) }
    0841 940E0E40  CALL	pop_gset2
    0843 9508      RET
_LCD_Write_Dot:
  y_address            --> R22
  x_address            --> R20
  data                 --> R10
  y                    --> R14
  x                    --> R12
    0844 940E0E6C  CALL	push_gset5
    0846 2EE2      MOV	R14,R18
    0847 2EC0      MOV	R12,R16
    0848 9721      SBIW	R28,1
(0304) 
(0305) //******************************************************************************
(0306) // Function    : LCD_Write_Dot
(0307) // Input       : x in [0,63] and y in [0,127]
(0308) // Output      : none
(0309) // Description : Application Level Function,在LCD的指定象素位置描点,注意此函数
(0310) //               是覆盖式描点,原位置的一个字节数据将被此点取代
(0311) //******************************************************************************
(0312) void LCD_Write_Dot(INT8U x,INT8U y)
(0313) {
(0314) 	INT8U x_address,y_address;
(0315) 	INT8U data = 0;
    0849 24AA      CLR	R10
(0316) 	if((x < 64) && (y < 128))
    084A 2D8C      MOV	R24,R12
    084B 3480      CPI	R24,0x40
    084C F4B0      BCC	0x0863
    084D 2D8E      MOV	R24,R14
    084E 3880      CPI	R24,0x80
    084F F498      BCC	0x0863
(0317) 	{
(0318) 		x_address = x >> 3;
    0850 2D4C      MOV	R20,R12
    0851 9546      LSR	R20
    0852 9546      LSR	R20
    0853 9546      LSR	R20
(0319) 		y_address = y;
    0854 2F68      MOV	R22,R24
(0320) 		LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
    0855 E018      LDI	R17,0x8
    0856 2D0C      MOV	R16,R12
    0857 940E0E18  CALL	mod8u
    0859 2F10      MOV	R17,R16
    085A E001      LDI	R16,1
    085B 940E0EAE  CALL	lsl8
    085D 2C2A      MOV	R2,R10
    085E 2A20      OR	R2,R16
    085F 8228      STD	Y+0,R2
    0860 2F26      MOV	R18,R22
    0861 2F04      MOV	R16,R20
    0862 DFC4      RCALL	_LCD_Write_Data
(0321) 	}
(0322) }
    0863 9621      ADIW	R28,1
    0864 940E0E46  CALL	pop_gset5
    0866 9508      RET
_LCD_Write_Char:
  y_address            --> R20
  x_address            --> R22
  i                    --> R10
  disp                 --> R12
  y                    --> R14
  x                    --> Y+11
    0867 940E0DF7  CALL	push_arg4
    0869 940E0E6C  CALL	push_gset5
    086B 2EE2      MOV	R14,R18
    086C 9721      SBIW	R28,1
    086D 84CF      LDD	R12,Y+15
    086E 88D8      LDD	R13,Y+16
(0323) 
(0324) //******************************************************************************
(0325) // Function    : LCD_Write_Char
(0326) // Input       : x in [0,3] and y in [0,15],disp - start address of display buffer
(0327) // Output      : none
(0328) // Description : Application Level Function,在LCD的指定显示单元显示一个字符。
(0329) //               每个显示单元默认为8*16点阵字体,对128*64点阵LCD,x最多显示4行
(0330) //               字符,y最多显示16个字符
(0331) //******************************************************************************
(0332) void LCD_Write_Char(INT8U x,INT8U y,const INT8U *disp)
(0333) {
(0334) 	INT8U i;
(0335) 	INT8U x_address;
(0336) 	INT8U y_address;
(0337) 	if((x < 4) && (y < 16))
    086F 858B      LDD	R24,Y+11
    0870 3084      CPI	R24,4
    0871 F008      BCS	0x0873
    0872 C033      RJMP	0x08A6
    0873 2D8E      MOV	R24,R14
    0874 3180      CPI	R24,0x10
    0875 F008      BCS	0x0877
    0876 C02F      RJMP	0x08A6
(0338) 	{
(0339) 		for(i = 0;i < 8;i++)
    0877 24AA      CLR	R10
    0878 C012      RJMP	0x088B
(0340) 		{
(0341) 			x_address = x << 1;
    0879 856B      LDD	R22,Y+11
    087A 0F66      LSL	R22
(0342) 			y_address = (y << 3) + i;
    087B 2D4E      MOV	R20,R14
    087C 0F44      LSL	R20
    087D 0F44      LSL	R20
    087E 0F44      LSL	R20
    087F 0D4A      ADD	R20,R10
(0343) 			LCD_Write_Data(x_address,y_address,*disp++);
    0880 0116      MOVW	R2,R12
    0881 01C1      MOVW	R24,R2
    0882 9601      ADIW	R24,1
    0883 016C      MOVW	R12,R24
    0884 01F1      MOVW	R30,R2
    0885 91E4      LPM	R30,0(Z)
    0886 83E8      STD	Y+0,R30
    0887 2F24      MOV	R18,R20
    0888 2F06      MOV	R16,R22
    0889 DF9D      RCALL	_LCD_Write_Data
    088A 94A3      INC	R10
    088B 2D8A      MOV	R24,R10
    088C 3088      CPI	R24,0x8
    088D F358      BCS	0x0879
(0344) 		}
(0345) 		for(i = 0;i < 8;i++)
    088E 24AA      CLR	R10
    088F C013      RJMP	0x08A3
(0346) 		{
(0347) 			x_address = (x << 1) + 1;
    0890 856B      LDD	R22,Y+11
    0891 0F66      LSL	R22
    0892 5F6F      SUBI	R22,0xFF
(0348) 			y_address = (y << 3) + i;
    0893 2D4E      MOV	R20,R14
    0894 0F44      LSL	R20
    0895 0F44      LSL	R20
    0896 0F44      LSL	R20
    0897 0D4A      ADD	R20,R10
(0349) 			LCD_Write_Data(x_address,y_address,*disp++);
    0898 0116      MOVW	R2,R12
    0899 01C1      MOVW	R24,R2
    089A 9601      ADIW	R24,1
    089B 016C      MOVW	R12,R24
    089C 01F1      MOVW	R30,R2
    089D 91E4      LPM	R30,0(Z)
    089E 83E8      STD	Y+0,R30
    089F 2F24      MOV	R18,R20
    08A0 2F06      MOV	R16,R22
    08A1 DF85      RCALL	_LCD_Write_Data
    08A2 94A3      INC	R10
    08A3 2D8A      MOV	R24,R10
    08A4 3088      CPI	R24,0x8
    08A5 F350      BCS	0x0890
(0350) 		}
(0351) 	}
(0352) }
    08A6 9621      ADIW	R28,1
    08A7 940E0E46  CALL	pop_gset5
    08A9 9624      ADIW	R28,4
    08AA 9508      RET
_LCD_Write_Word:
  y_address            --> R20
  x_address            --> R22
  i                    --> R10
  disp                 --> R12
  y                    --> R14
  x                    --> Y+11
    08AB 940E0DF7  CALL	push_arg4
    08AD 940E0E6C  CALL	push_gset5
    08AF 2EE2      MOV	R14,R18
    08B0 9721      SBIW	R28,1
    08B1 84CF      LDD	R12,Y+15
    08B2 88D8      LDD	R13,Y+16
(0353) 
(0354) //******************************************************************************
(0355) // Function    : LCD_Write_Word
(0356) // Input       : x in [0,3] and y in [0,14],disp - start address of display buffer
(0357) // Output      : none
(0358) // Description : Application Level Function,在LCD的指定显示单元显示一个中文。
(0359) //               每个显示单元默认为16*16点阵字体,对128*64点阵LCD,x最多显示4行
(0360) //               字符,y最多显示16个字符,但不允许显示半个汉字
(0361) //******************************************************************************
(0362) void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
(0363) {
(0364) 	INT8U i;
(0365) 	INT8U x_address;
(0366) 	INT8U y_address;
(0367) 	if((x < 4) && (y < 15))
    08B3 858B      LDD	R24,Y+11
    08B4 3084      CPI	R24,4
    08B5 F008      BCS	0x08B7
    08B6 C033      RJMP	0x08EA
    08B7 2D8E      MOV	R24,R14
    08B8 308F      CPI	R24,0xF
    08B9 F008      BCS	0x08BB
    08BA C02F      RJMP	0x08EA
(0368) 	{
(0369) 		for(i = 0;i < 16;i++)
    08BB 24AA      CLR	R10
    08BC C012      RJMP	0x08CF
(0370) 		{
(0371) 			x_address = x << 1;
    08BD 856B      LDD	R22,Y+11
    08BE 0F66      LSL	R22
(0372) 			y_address = (y << 3) + i;
    08BF 2D4E      MOV	R20,R14
    08C0 0F44      LSL	R20
    08C1 0F44      LSL	R20
    08C2 0F44      LSL	R20
    08C3 0D4A      ADD	R20,R10
(0373) 			LCD_Write_Data(x_address,y_address,*disp++);
    08C4 0116      MOVW	R2,R12
    08C5 01C1      MOVW	R24,R2
    08C6 9601      ADIW	R24,1
    08C7 016C      MOVW	R12,R24
    08C8 01F1      MOVW	R30,R2
    08C9 91E4      LPM	R30,0(Z)
    08CA 83E8      STD	Y+0,R30
    08CB 2F24      MOV	R18,R20
    08CC 2F06      MOV	R16,R22
    08CD DF59      RCALL	_LCD_Write_Data
    08CE 94A3      INC	R10
    08CF 2D8A      MOV	R24,R10
    08D0 3180      CPI	R24,0x10
    08D1 F358      BCS	0x08BD
(0374) 		}
(0375) 		for(i = 0;i < 16;i++)
    08D2 24AA      CLR	R10
    08D3 C013      RJMP	0x08E7
(0376) 		{
(0377) 			x_address = (x << 1) + 1;
    08D4 856B      LDD	R22,Y+11
    08D5 0F66      LSL	R22
    08D6 5F6F      SUBI	R22,0xFF
(0378) 			y_address = (y << 3) + i;
    08D7 2D4E      MOV	R20,R14
    08D8 0F44      LSL	R20
    08D9 0F44      LSL	R20
    08DA 0F44      LSL	R20
    08DB 0D4A      ADD	R20,R10
(0379) 			LCD_Write_Data(x_address,y_address,*disp++);
    08DC 0116      MOVW	R2,R12
    08DD 01C1      MOVW	R24,R2
    08DE 9601      ADIW	R24,1
    08DF 016C      MOVW	R12,R24
    08E0 01F1      MOVW	R30,R2
    08E1 91E4      LPM	R30,0(Z)
    08E2 83E8      STD	Y+0,R30
    08E3 2F24      MOV	R18,R20
    08E4 2F06      MOV	R16,R22
    08E5 DF41      RCALL	_LCD_Write_Data
    08E6 94A3      INC	R10
    08E7 2D8A      MOV	R24,R10
    08E8 3180      CPI	R24,0x10
    08E9 F350      BCS	0x08D4
(0380) 		}
(0381) 	}
(0382) }
    08EA 9621      ADIW	R28,1
    08EB 940E0E46  CALL	pop_gset5
    08ED 9624      ADIW	R28,4
    08EE 9508      RET
_LCD_Write_Picture:
  x_address            --> R20
  y_address            --> R14
  pdata                --> R22
  y_length             --> R10
  x_length             --> R12
  y1                   --> Y+13
  x1                   --> Y+11
    08EF 940E0DF7  CALL	push_arg4
    08F1 940E0E6C  CALL	push_gset5
    08F3 9721      SBIW	R28,1
    08F4 84CF      LDD	R12,Y+15
    08F5 88A9      LDD	R10,Y+17
    08F6 896B      LDD	R22,Y+19
    08F7 897C      LDD	R23,Y+20
(0383) 
(0384) //******************************************************************************
(0385) // Function    : LCD_Write_Picture
(0386) // Input       : x in [0,7] and y in [0,127],
(0387) //               x1_length - 纵向象素 y1_length - 横向象素,x1_length必须为8的
(0388) //               整数倍,y1_length可以不必为8的整数倍。
(0389) // Output      : none
(0390) // Description : Application Level Function,在LCD的指定区域显示图片
(0391) //******************************************************************************
(0392) void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x_length,INT8U y_length,const INT8U *pdata)
(0393) {
(0394) 	INT8U x_address;
(0395) 	INT8U y_address;
(0396) 	for(x_address = x1;x_address <= x1 + (x_length >> 3) - 1;x_address++)
    08F8 854B      LDD	R20,Y+11
    08F9 C011      RJMP	0x090B
(0397) 	{
(0398) 		for(y_address = y1;y_address < y1 + y_length;y_address++)
    08FA 84ED      LDD	R14,Y+13
    08FB C00A      RJMP	0x0906
(0399) 		{
(0400) 			LCD_Write_Data(x_address,y_address,*pdata++);
    08FC 011B      MOVW	R2,R22
    08FD 5F6F      SUBI	R22,0xFF
    08FE 4F7F      SBCI	R23,0xFF
    08FF 01F1      MOVW	R30,R2
    0900 91E4      LPM	R30,0(Z)
    0901 83E8      STD	Y+0,R30
    0902 2D2E      MOV	R18,R14
    0903 2F04      MOV	R16,R20
    0904 DF22      RCALL	_LCD_Write_Data
    0905 94E3      INC	R14
    0906 842D      LDD	R2,Y+13
    0907 0C2A      ADD	R2,R10
    0908 14E2      CP	R14,R2
    0909 F390      BCS	0x08FC
    090A 9543      INC	R20
    090B 2C2C      MOV	R2,R12
    090C 9426      LSR	R2
    090D 9426      LSR	R2
    090E 9426      LSR	R2
    090F 858B      LDD	R24,Y+11
    0910 0D82      ADD	R24,R2
    0911 5081      SUBI	R24,1
    0912 1784      CP	R24,R20
    0913 F730      BCC	0x08FA
(0401) 		}
(0402) 	}
(0403) }
    0914 9621      ADIW	R28,1
    0915 940E0E46  CALL	pop_gset5
    0917 9624      ADIW	R28,4
    0918 9508      RET
_LCD_Window0_Process:
    0919 9722      SBIW	R28,2
(0404) 
(0405) //data type definition
(0406) struct DataBaseIndex
(0407) {
(0408) 	INT16U Code;
(0409)     const INT8U  *Ptr;
(0410) };
(0411) 
(0412) //mask list
(0413) const struct DataBaseIndex DataBaseIndexList[] = 
(0414) {
(0415) 	0x10,eChar_10,
(0416) 	' ',eChar_20,
(0417) 	'!',eChar_21,
(0418) 	'"',eChar_22,
(0419) 	'#',eChar_23,
(0420) 	'$',eChar_24,
(0421) 	'%',eChar_25,

⌨️ 快捷键说明

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