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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0675 BB0B      OUT	0x1B,R16
(0164) }
    0676 9508      RET
_LCD_Command_DispOnOff:
  onoff                --> R20
    0677 940E0A7A  CALL	push_gset1
    0679 2F40      MOV	R20,R16
(0165) 
(0166) //******************************************************************************
(0167) // Function    : LCD_Command_DispOnOff
(0168) // Input       : onoff = 1 -> LCD Display Enabled,else Disabled
(0169) // Output      : none
(0170) // Description : Command Level Function,Display ONOFF Control
(0171) //******************************************************************************
(0172) void LCD_Command_DispOnOff(INT8U onoff)
(0173) {
(0174) 	Set_RW(0);
    067A 2700      CLR	R16
    067B DFDB      RCALL	_Set_RW
(0175) 	Set_DI(0);
    067C 2700      CLR	R16
    067D DFD3      RCALL	_Set_DI
(0176) 	Set_EN(0);
    067E 2700      CLR	R16
    067F DFDD      RCALL	_Set_EN
(0177) 	Set_Data(0x3E + onoff);
    0680 2F04      MOV	R16,R20
    0681 5C02      SUBI	R16,0xC2
    0682 DFF2      RCALL	_Set_Data
(0178) 	Set_EN(1);
    0683 E001      LDI	R16,1
    0684 DFD8      RCALL	_Set_EN
(0179) 	Set_EN(0);
    0685 2700      CLR	R16
    0686 DFD6      RCALL	_Set_EN
(0180) }
    0687 940E0A7D  CALL	pop_gset1
    0689 9508      RET
_LCD_Command_SetStartLine:
  startline            --> R20
    068A 940E0A7A  CALL	push_gset1
    068C 2F40      MOV	R20,R16
(0181) 
(0182) //******************************************************************************
(0183) // Function    : LCD_Command_SetStartLine
(0184) // Input       : startline - Display Start Line,See Specification
(0185) // Output      : none
(0186) // Description : Command Level Function,Set Display Start Line
(0187) //******************************************************************************
(0188) void LCD_Command_SetStartLine(INT8U startline)
(0189) {
(0190) 	Set_RW(0);
    068D 2700      CLR	R16
    068E DFC8      RCALL	_Set_RW
(0191) 	Set_DI(0);																
    068F 2700      CLR	R16
    0690 DFC0      RCALL	_Set_DI
(0192) 	Set_EN(0);																
    0691 2700      CLR	R16
    0692 DFCA      RCALL	_Set_EN
(0193) 	Set_Data(0xC0 + startline);
    0693 2F04      MOV	R16,R20
    0694 5400      SUBI	R16,0x40
    0695 DFDF      RCALL	_Set_Data
(0194) 	Set_EN(1);																
    0696 E001      LDI	R16,1
    0697 DFC5      RCALL	_Set_EN
(0195) 	Set_EN(0);																
    0698 2700      CLR	R16
    0699 DFC3      RCALL	_Set_EN
(0196) }
    069A 940E0A7D  CALL	pop_gset1
    069C 9508      RET
_LCD_Command_Set_X:
  x                    --> R20
    069D 940E0A7A  CALL	push_gset1
    069F 2F40      MOV	R20,R16
(0197) 
(0198) //******************************************************************************
(0199) // Function    : LCD_Command_Set_X
(0200) // Input       : x - Display Row,from 0 to 7 for 128*64 LCD
(0201) // Output      : none
(0202) // Description : Command Level Function,Set Operation X Address
(0203) //******************************************************************************
(0204) void LCD_Command_Set_X(INT8U x)
(0205) {
(0206) 	Set_RW(0);
    06A0 2700      CLR	R16
    06A1 DFB5      RCALL	_Set_RW
(0207) 	Set_DI(0);
    06A2 2700      CLR	R16
    06A3 DFAD      RCALL	_Set_DI
(0208) 	Set_EN(0);
    06A4 2700      CLR	R16
    06A5 DFB7      RCALL	_Set_EN
(0209) 	Set_Data(0xB8 + x);
    06A6 2F04      MOV	R16,R20
    06A7 5408      SUBI	R16,0x48
    06A8 DFCC      RCALL	_Set_Data
(0210) 	Set_EN(1);
    06A9 E001      LDI	R16,1
    06AA DFB2      RCALL	_Set_EN
(0211) 	Set_EN(0);
    06AB 2700      CLR	R16
    06AC DFB0      RCALL	_Set_EN
(0212) }
    06AD 940E0A7D  CALL	pop_gset1
    06AF 9508      RET
_LCD_Command_Set_Y:
  column               --> R20
    06B0 940E0A7A  CALL	push_gset1
    06B2 2F40      MOV	R20,R16
(0213) 
(0214) //******************************************************************************
(0215) // Function    : LCD_Command_Set_Y
(0216) // Input       : y - Display Column,from 0 to 63 for 128*64 LCD
(0217) // Output      : none
(0218) // Description : Command Level Function,Set Operation Y Address
(0219) //******************************************************************************
(0220) void LCD_Command_Set_Y(INT8U column)
(0221) {
(0222) 	Set_RW(0);
    06B3 2700      CLR	R16
    06B4 DFA2      RCALL	_Set_RW
(0223) 	Set_DI(0);
    06B5 2700      CLR	R16
    06B6 DF9A      RCALL	_Set_DI
(0224) 	Set_EN(0);
    06B7 2700      CLR	R16
    06B8 DFA4      RCALL	_Set_EN
(0225) 	Set_Data(0x40 + column);
    06B9 2F04      MOV	R16,R20
    06BA 5C00      SUBI	R16,0xC0
    06BB DFB9      RCALL	_Set_Data
(0226) 	Set_EN(1);
    06BC E001      LDI	R16,1
    06BD DF9F      RCALL	_Set_EN
(0227) 	Set_EN(0);
    06BE 2700      CLR	R16
    06BF DF9D      RCALL	_Set_EN
(0228) }
    06C0 940E0A7D  CALL	pop_gset1
    06C2 9508      RET
_LCD_Command_WriteByte:
  data                 --> R20
    06C3 940E0A7A  CALL	push_gset1
    06C5 2F40      MOV	R20,R16
(0229) 
(0230) //******************************************************************************
(0231) // Function    : LCD_Command_WriteByte
(0232) // Input       : data - Display Data
(0233) // Output      : none
(0234) // Description : Command Level Function,Write Display Data to DDRAM
(0235) //******************************************************************************
(0236) void LCD_Command_WriteByte(INT8U data)
(0237) {
(0238) 	Set_RW(0);
    06C6 2700      CLR	R16
    06C7 DF8F      RCALL	_Set_RW
(0239) 	Set_DI(1);
    06C8 E001      LDI	R16,1
    06C9 DF87      RCALL	_Set_DI
(0240) 	Set_EN(0);
    06CA 2700      CLR	R16
    06CB DF91      RCALL	_Set_EN
(0241) 	Set_Data(data);
    06CC 2F04      MOV	R16,R20
    06CD DFA7      RCALL	_Set_Data
(0242) 	Set_EN(1);
    06CE E001      LDI	R16,1
    06CF DF8D      RCALL	_Set_EN
(0243) 	Set_EN(0);
    06D0 2700      CLR	R16
    06D1 DF8B      RCALL	_Set_EN
(0244) }
    06D2 940E0A7D  CALL	pop_gset1
    06D4 9508      RET
(0245) 
(0246) //******************************************************************************
(0247) // Function    : LCD_Reset
(0248) // Input       : none
(0249) // Output      : none
(0250) // Description : Command Level Function,Soft RESET LCD Module
(0251) //******************************************************************************
(0252) void LCD_Reset(void)
(0253) {
(0254) 	Set_RST(0);
_LCD_Reset:
    06D5 2700      CLR	R16
    06D6 DF98      RCALL	_Set_RST
(0255) 	Set_RST(1);
    06D7 E001      LDI	R16,1
(0256) }
    06D8 CF96      RJMP	_Set_RST
(0257) 
(0258) //******************************************************************************
(0259) // Function    : LCD_Init
(0260) // Input       : none
(0261) // Output      : none
(0262) // Description : Application Level Function,Init LCD
(0263) //******************************************************************************
(0264) void LCD_Init(void)
(0265) {
(0266) 	LCD_Reset();
_LCD_Init:
    06D9 DFFB      RCALL	_LCD_Reset
(0267) 	LCD_Clear_Line(0,7);
    06DA E027      LDI	R18,7
    06DB 2700      CLR	R16
    06DC D004      RCALL	_LCD_Clear_Line
(0268) 	LCD_Command_DispOnOff(1);
    06DD E001      LDI	R16,1
    06DE DF98      RCALL	_LCD_Command_DispOnOff
(0269) 	LCD_Command_SetStartLine(0);
    06DF 2700      CLR	R16
(0270) }
    06E0 CFA9      RJMP	_LCD_Command_SetStartLine
_LCD_Clear_Line:
  i                    --> R20
  j                    --> R10
  endline              --> R22
  startline            --> R10
    06E1 940E0A95  CALL	push_gset3
    06E3 2F62      MOV	R22,R18
    06E4 2EA0      MOV	R10,R16
(0271) 
(0272) //******************************************************************************
(0273) // Function    : LCD_Clear_Line
(0274) // Input       : startline,endline - Line Range to be Cleare
(0275) // Output      : none
(0276) // Description : Command Level Function,Clear Screen Display
(0277) //******************************************************************************
(0278) void LCD_Clear_Line(INT8U startline,INT8U endline)
(0279) {
(0280) 	INT8U i,j;
(0281) 	for(i = startline;i <= endline;i++)
    06E5 2D4A      MOV	R20,R10
    06E6 C011      RJMP	0x06F8
(0282) 	{
(0283) 		Set_CS1(1);
    06E7 E001      LDI	R16,1
    06E8 DF80      RCALL	_Set_CS1
(0284) 		Set_CS2(1);
    06E9 E001      LDI	R16,1
    06EA DF78      RCALL	_Set_CS2
(0285) 		LCD_Command_Set_X(i);
    06EB 2F04      MOV	R16,R20
    06EC DFB0      RCALL	_LCD_Command_Set_X
(0286) 		LCD_Command_Set_Y(0);
    06ED 2700      CLR	R16
    06EE DFC1      RCALL	_LCD_Command_Set_Y
(0287) 		for(j = 0;j < 64;j++)
    06EF 24AA      CLR	R10
    06F0 C003      RJMP	0x06F4
(0288) 		{
(0289) 			LCD_Command_WriteByte(0x00);
    06F1 2700      CLR	R16
    06F2 DFD0      RCALL	_LCD_Command_WriteByte
    06F3 94A3      INC	R10
    06F4 2D8A      MOV	R24,R10
    06F5 3480      CPI	R24,0x40
    06F6 F3D0      BCS	0x06F1
    06F7 9543      INC	R20
    06F8 1764      CP	R22,R20
    06F9 F768      BCC	0x06E7
(0290) 		}
(0291) 	}
(0292) }
    06FA 940E0A74  CALL	pop_gset3
    06FC 9508      RET
_LCD_Write_Data:
  data                 --> Y+4
  y                    --> R20
  x                    --> R22
    06FD 940E0A91  CALL	push_gset2
    06FF 2F42      MOV	R20,R18
    0700 2F60      MOV	R22,R16
(0293) 
(0294) //******************************************************************************
(0295) // Function    : LCD_Write_Data
(0296) // Input       : x in [0,7] and y in [0,127]
(0297) // Output      : none
(0298) // Description : Command Level Function,在指定行列写一个数据
(0299) //******************************************************************************
(0300) void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
(0301) {
(0302) 	if(y < 64)
    0701 3440      CPI	R20,0x40
    0702 F448      BCC	0x070C
(0303) 	{
(0304) 		Set_CS1(1);
    0703 E001      LDI	R16,1
    0704 DF64      RCALL	_Set_CS1
(0305) 		Set_CS2(0);
    0705 2700      CLR	R16
    0706 DF5C      RCALL	_Set_CS2
(0306) 		LCD_Command_Set_X(x);
    0707 2F06      MOV	R16,R22
    0708 DF94      RCALL	_LCD_Command_Set_X
(0307) 		LCD_Command_Set_Y(y);
    0709 2F04      MOV	R16,R20
    070A DFA5      RCALL	_LCD_Command_Set_Y
(0308) 	}
    070B C009      RJMP	0x0715
(0309) 	else
(0310) 	{
(0311) 		Set_CS1(0);
    070C 2700      CLR	R16
    070D DF5B      RCALL	_Set_CS1
(0312) 		Set_CS2(1);
    070E E001      LDI	R16,1
    070F DF53      RCALL	_Set_CS2
(0313) 		LCD_Command_Set_X(x);
    0710 2F06      MOV	R16,R22
    0711 DF8B      RCALL	_LCD_Command_Set_X
(0314) 		LCD_Command_Set_Y(y - 64);		
    0712 2F04      MOV	R16,R20
    0713 5400      SUBI	R16,0x40
    0714 DF9B      RCALL	_LCD_Command_Set_Y
(0315) 	}
(0316) 	LCD_Command_WriteByte(data);
    0715 810C      LDD	R16,Y+4
    0716 DFAC      RCALL	_LCD_Command_WriteByte
(0317) }
    0717 940E0A71  CALL	pop_gset2
    0719 9508      RET
_LCD_Write_Dot:
  y_address            --> R22
  x_address            --> R20
  data                 --> R10
  y                    --> R14
  x                    --> R12
    071A 940E0A9D  CALL	push_gset5
    071C 2EE2      MOV	R14,R18
    071D 2EC0      MOV	R12,R16
    071E 9721      SBIW	R28,1
(0318) 
(0319) //******************************************************************************
(0320) // Function    : LCD_Write_Dot
(0321) // Input       : x in [0,63] and y in [0,127]
(0322) // Output      : none
(0323) // Description : Application Level Function,在LCD的指定象素位置描点,注意此函数
(0324) //               是覆盖式描点,原位置的一个字节数据将被此点取代
(0325) //******************************************************************************
(0326) void LCD_Write_Dot(INT8U x,INT8U y)
(0327) {
(0328) 	INT8U x_address,y_address;
(0329) 	INT8U data = 0;
    071F 24AA      CLR	R10
(0330) 	if((x < 64) && (y < 128))
    0720 2D8C      MOV	R24,R12
    0721 3480      CPI	R24,0x40
    0722 F4B0      BCC	0x0739
    0723 2D8E      MOV	R24,R14
    0724 3880      CPI	R24,0x80
    0725 F498      BCC	0x0739
(0331) 	{
(0332) 		x_address = x >> 3;
    0726 2D4C      MOV	R20,R12
    0727 9546      LSR	R20
    0728 9546      LSR	R20
    0729 9546      LSR	R20
(0333) 		y_address = y;
    072A 2F68      MOV	R22,R24
(0334) 		LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
    072B E018      LDI	R17,0x8
    072C 2D0C      MOV	R16,R12
    072D 940E0A59  CALL	mod8u
    072F 2F10      MOV	R17,R16
    0730 E001      LDI	R16,1
    0731 940E0ACF  CALL	lsl8
    0733 2C2A      MOV	R2,R10
    0734 2A20      OR	R2,R16
    0735 8228      STD	Y+0,R2
    0736 2F26      MOV	R18,R22
    0737 2F04      MOV	R16,R20
    0738 DFC4      RCALL	_LCD_Write_Data
(0335) 	}
(0336) }
    0739 9621      ADIW	R28,1
    073A 940E0A77  CALL	pop_gset5

⌨️ 快捷键说明

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