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 + -
显示快捷键?