lcddrive.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,014 行 · 第 1/3 页

LIS
1,014
字号
                        .module LcdDrive.c
                        .area text(rom, con, rel)
                ;              i -> R16,R17
                        .even
 0000           _LCD_Delay::
 0000           ; #include "SYS_Config.H"
 0000           ; #include "GUI_Config.H"
 0000           ; 
 0000           ; INT8U LCD_BGColor;
 0000           ; INT8U LCD_PenColor;
 0000           ; 
 0000           ; void LCD_Delay(void)
 0000           ; {
 0000           ; 	INT16U i;
 0000           ; 	for(i = 0; i < 50; i ++)
 0000 0027              clr R16
 0002 1127              clr R17
 0004 03C0              xjmp L5
 0006           L2:
 0006 0000              NOP
 0008           L3:
 0008 0F5F              subi R16,255  ; offset = 1
 000A 1F4F              sbci R17,255
 000C           L5:
 000C 0233              cpi R16,50
 000E E0E0              ldi R30,0
 0010 1E07              cpc R17,R30
 0012 C8F3              brlo L2
 0014           L1:
 0014                   .dbline 0 ; func end
 0014 0895              ret
                        .even
 0016           _LCD_Reset::
 0016           ; 	    asm("NOP");
 0016           ; }
 0016           ; 
 0016           ; void LCD_Reset(void)
 0016           ; {
 0016           ; 	clr_bit(LCD_RST_PORT, LCD_RST);		//set RST = L
 0016 A898              cbi 0x15,0
 0018           ;       LCD_Delay();
 0018 F3DF              xcall _LCD_Delay
 001A           ;       set_bit(LCD_RST_PORT, LCD_RST);         //set RST = H
 001A A89A              sbi 0x15,0
 001C           ;       LCD_Delay();
 001C F1DF              xcall _LCD_Delay
 001E           L6:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020           ;            cmd -> R16
                        .even
 0020           _LCD_SendCommand::
 0020           ; }
 0020           ; 
 0020           ; void LCD_SendCommand(INT8U cmd)
 0020           ; {    
 0020           ;     set_bit(LCD_SIO_DDR, LCD_SIO);		//set SDI.DDR = 1
 0020 A29A              sbi 0x14,2
 0022           ;       clr_bit(LCD_CS_PORT, LCD_CS);           //set CS = L
 0022 A998              cbi 0x15,1
 0024           ;       clr_bit(LCD_SCL_PORT,LCD_SCL);          //set SCK = L
 0024 AB98              cbi 0x15,3
 0026           ;       clr_bit(LCD_SIO_PORT,LCD_SIO);          //send 0, for command
 0026 AA98              cbi 0x15,2
 0028           ;       set_bit(LCD_SCL_PORT,LCD_SCL);          //set SCK = H, latch data
 0028 AB9A              sbi 0x15,3
 002A           ;       
 002A           ; //Bit 0(MSB)
 002A           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 002A AB98              cbi 0x15,3
 002C           ;       if(cmd & 0x80)
 002C 07FF              sbrs R16,7
 002E 02C0              rjmp L8
 0030           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0030 AA9A              sbi 0x15,2
 0032 01C0              xjmp L9
 0034           L8:
 0034           ; 	else
 0034           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 0034 AA98              cbi 0x15,2
 0036           L9:
 0036           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 0036 AB9A              sbi 0x15,3
 0038           ;       
 0038           ; //Bit 1
 0038           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 0038 AB98              cbi 0x15,3
 003A           ;       if(cmd & 0x40)
 003A 06FF              sbrs R16,6
 003C 02C0              rjmp L10
 003E           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 003E AA9A              sbi 0x15,2
 0040 01C0              xjmp L11
 0042           L10:
 0042           ; 	else
 0042           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 0042 AA98              cbi 0x15,2
 0044           L11:
 0044           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 0044 AB9A              sbi 0x15,3
 0046           ;       
 0046           ; //Bit 2
 0046           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 0046 AB98              cbi 0x15,3
 0048           ;       if(cmd & 0x20)
 0048 05FF              sbrs R16,5
 004A 02C0              rjmp L12
 004C           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 004C AA9A              sbi 0x15,2
 004E 01C0              xjmp L13
 0050           L12:
 0050           ; 	else
 0050           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 0050 AA98              cbi 0x15,2
 0052           L13:
 0052           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 0052 AB9A              sbi 0x15,3
 0054           ;       
 0054           ; //Bit 3
 0054           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 0054 AB98              cbi 0x15,3
 0056           ;       if(cmd & 0x10)
 0056 04FF              sbrs R16,4
 0058 02C0              rjmp L14
 005A           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 005A AA9A              sbi 0x15,2
 005C 01C0              xjmp L15
 005E           L14:
 005E           ; 	else
 005E           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 005E AA98              cbi 0x15,2
 0060           L15:
 0060           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 0060 AB9A              sbi 0x15,3
 0062           ;       
 0062           ; //Bit 4
 0062           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 0062 AB98              cbi 0x15,3
 0064           ;       if(cmd & 0x08)
 0064 03FF              sbrs R16,3
 0066 02C0              rjmp L16
 0068           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0068 AA9A              sbi 0x15,2
 006A 01C0              xjmp L17
 006C           L16:
 006C           ; 	else
 006C           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 006C AA98              cbi 0x15,2
 006E           L17:
 006E           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 006E AB9A              sbi 0x15,3
 0070           ;       
 0070           ; //Bit 5
 0070           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 0070 AB98              cbi 0x15,3
 0072           ;       if(cmd & 0x04)
 0072 02FF              sbrs R16,2
 0074 02C0              rjmp L18
 0076           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0076 AA9A              sbi 0x15,2
 0078 01C0              xjmp L19
 007A           L18:
 007A           ; 	else
 007A           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 007A AA98              cbi 0x15,2
 007C           L19:
 007C           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 007C AB9A              sbi 0x15,3
 007E           ;       
 007E           ; //Bit 6
 007E           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 007E AB98              cbi 0x15,3
 0080           ;       if(cmd & 0x02)
 0080 01FF              sbrs R16,1
 0082 02C0              rjmp L20
 0084           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0084 AA9A              sbi 0x15,2
 0086 01C0              xjmp L21
 0088           L20:
 0088           ; 	else
 0088           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 0088 AA98              cbi 0x15,2
 008A           L21:
 008A           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 008A AB9A              sbi 0x15,3
 008C           ;       
 008C           ; //Bit 7(LSB)
 008C           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 008C AB98              cbi 0x15,3
 008E           ;       if(cmd & 0x01)
 008E 00FF              sbrs R16,0
 0090 02C0              rjmp L22
 0092           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0092 AA9A              sbi 0x15,2
 0094 01C0              xjmp L23
 0096           L22:
 0096           ; 	else
 0096           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 0096 AA98              cbi 0x15,2
 0098           L23:
 0098           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 0098 AB9A              sbi 0x15,3
 009A           L7:
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C           ;           data -> R16
                        .even
 009C           _LCD_SendData::
 009C           ; //done
 009C           ; } 
 009C           ; 
 009C           ; 
 009C           ; void LCD_SendData(INT8U data)
 009C           ; {   
 009C           ;     set_bit(LCD_SIO_DDR, LCD_SIO);		//set SDI.DDR = 1
 009C A29A              sbi 0x14,2
 009E           ;       clr_bit(LCD_CS_PORT, LCD_CS);           //set CS = L
 009E A998              cbi 0x15,1
 00A0           ;       
 00A0           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);         //set SCK = L
 00A0 AB98              cbi 0x15,3
 00A2           ;       set_bit(LCD_SIO_PORT, LCD_SIO);         //send 1, for data
 00A2 AA9A              sbi 0x15,2
 00A4           ;       set_bit(LCD_SCL_PORT, LCD_SCL);         //set SCK = H, latch data
 00A4 AB9A              sbi 0x15,3
 00A6           ;       
 00A6           ; //Bit 0(MSB)
 00A6           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00A6 AB98              cbi 0x15,3
 00A8           ;       if(data & 0x80)
 00A8 07FF              sbrs R16,7
 00AA 02C0              rjmp L25
 00AC           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00AC AA9A              sbi 0x15,2
 00AE 01C0              xjmp L26
 00B0           L25:
 00B0           ; 	else
 00B0           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00B0 AA98              cbi 0x15,2
 00B2           L26:
 00B2           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00B2 AB9A              sbi 0x15,3
 00B4           ;       
 00B4           ; //Bit 1
 00B4           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00B4 AB98              cbi 0x15,3
 00B6           ;       if(data & 0x40)
 00B6 06FF              sbrs R16,6
 00B8 02C0              rjmp L27
 00BA           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00BA AA9A              sbi 0x15,2
 00BC 01C0              xjmp L28
 00BE           L27:
 00BE           ; 	else
 00BE           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00BE AA98              cbi 0x15,2
 00C0           L28:
 00C0           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00C0 AB9A              sbi 0x15,3
 00C2           ;       
 00C2           ; //Bit 2
 00C2           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00C2 AB98              cbi 0x15,3
 00C4           ;       if(data & 0x20)
 00C4 05FF              sbrs R16,5
 00C6 02C0              rjmp L29
 00C8           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00C8 AA9A              sbi 0x15,2
 00CA 01C0              xjmp L30
 00CC           L29:
 00CC           ; 	else
 00CC           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00CC AA98              cbi 0x15,2
 00CE           L30:
 00CE           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00CE AB9A              sbi 0x15,3
 00D0           ;       
 00D0           ; //Bit 3
 00D0           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00D0 AB98              cbi 0x15,3
 00D2           ;       if(data & 0x10)
 00D2 04FF              sbrs R16,4
 00D4 02C0              rjmp L31
 00D6           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00D6 AA9A              sbi 0x15,2
 00D8 01C0              xjmp L32
 00DA           L31:
 00DA           ; 	else
 00DA           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00DA AA98              cbi 0x15,2
 00DC           L32:
 00DC           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00DC AB9A              sbi 0x15,3
 00DE           ;       
 00DE           ; //Bit 4
 00DE           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00DE AB98              cbi 0x15,3
 00E0           ;       if(data & 0x08)
 00E0 03FF              sbrs R16,3
 00E2 02C0              rjmp L33
 00E4           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00E4 AA9A              sbi 0x15,2
 00E6 01C0              xjmp L34
 00E8           L33:
 00E8           ; 	else
 00E8           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00E8 AA98              cbi 0x15,2
 00EA           L34:
 00EA           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00EA AB9A              sbi 0x15,3
 00EC           ;       
 00EC           ; //Bit 5
 00EC           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00EC AB98              cbi 0x15,3
 00EE           ;       if(data & 0x04)
 00EE 02FF              sbrs R16,2
 00F0 02C0              rjmp L35
 00F2           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 00F2 AA9A              sbi 0x15,2
 00F4 01C0              xjmp L36
 00F6           L35:
 00F6           ; 	else
 00F6           ; 		clr_bit(LCD_SIO_PORT, LCD_SIO);
 00F6 AA98              cbi 0x15,2
 00F8           L36:
 00F8           ; 	set_bit(LCD_SCL_PORT, LCD_SCL);
 00F8 AB9A              sbi 0x15,3
 00FA           ;       
 00FA           ; //Bit 6
 00FA           ;       clr_bit(LCD_SCL_PORT, LCD_SCL);
 00FA AB98              cbi 0x15,3
 00FC           ;       if(data & 0x02)
 00FC 01FF              sbrs R16,1
 00FE 02C0              rjmp L37
 0100           ;               set_bit(LCD_SIO_PORT, LCD_SIO);
 0100 AA9A              sbi 0x15,2
 0102 01C0              xjmp L38
 0104           L37:

⌨️ 快捷键说明

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