📄 so12864.lis
字号:
.module so12864.c
.area text(rom, con, rel)
0000 .dbfile F:\avr\mega128\lcd12864\so12864.c
0000 .dbfunc e Init_LCD _Init_LCD fV
.even
0000 _Init_LCD::
0000 .dbline -1
0000 .dbline 7
0000 ; #include "so12864.h"
0000 ;
0000 ; /*************************************************/
0000 ; //Init LCD
0000 ; /*************************************************/
0000 ; void Init_LCD(void)
0000 ; {
0000 .dbline 9
0000 ; //Make the CS AO RST pin as output
0000 ; DDR_SPI_CTL = (1 << LCD_AO_TRIS) | (1 << LCD_RST_TRIS) | (1 << LCD_CS_TRIS);
0000 87E0 ldi R24,7
0002 81BB out 0x11,R24
0004 .dbline 11
0004 ;
0004 ; DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK); //设置MOSI,SCK,SS 为OUTPUT,其它为INPUT
0004 86E0 ldi R24,6
0006 87BB out 0x17,R24
0008 .dbline 12
0008 ; SPCR = (1<<SPE)|(1<<MSTR); //SPI使能,主机方式,设置SCK为fosc/4,上升沿,MSB First
0008 80E5 ldi R24,80
000A 8DB9 out 0xd,R24
000C .dbline 16
000C ;
000C ; /* 一定要先重启LCD,再设置SPI,否则通讯不成功 */
000C ;
000C ; LCD_RST_IO |= BIT(LCD_RST_PIN);
000C 919A sbi 0x12,1
000E .dbline 17
000E ; LCD_CS_IO |= BIT(LCD_CS_PIN);
000E 929A sbi 0x12,2
0010 .dbline 18
0010 ; LCD_AO_IO |= BIT(LCD_AO_PIN);
0010 909A sbi 0x12,0
0012 .dbline 20
0012 ;
0012 ; LCD_CS_IO &= ~BIT(LCD_CS_PIN); //select 12864
0012 9298 cbi 0x12,2
0014 .dbline 22
0014 ;
0014 ; LCD_RST_IO &= ~BIT(LCD_RST_PIN); //reset
0014 9198 cbi 0x12,1
0016 .dbline 23
0016 ; nop();
0016 0000 nop
0018 .dbline 24
0018 ; nop();
0018 0000 nop
001A .dbline 25
001A ; nop();
001A 0000 nop
001C .dbline 26
001C ; LCD_RST_IO |= BIT(LCD_RST_PIN);
001C 919A sbi 0x12,1
001E .dbline 29
001E ;
001E ; //write command
001E ; Write_LCDCOM(DISPLAY_ON); //ON DISPLAY
001E 0FEA ldi R16,175
0020 16D0 xcall _Write_LCDCOM
0022 .dbline 30
0022 ; Write_LCDCOM(START_LINE_0); //STAR DISPLAY
0022 00E4 ldi R16,64
0024 14D0 xcall _Write_LCDCOM
0026 .dbline 31
0026 ; Write_LCDCOM(ADC_NORMAL); //ADC NORMAL
0026 00EA ldi R16,160
0028 12D0 xcall _Write_LCDCOM
002A .dbline 32
002A ; Write_LCDCOM(DISPLAY_NORMAL); //Display normal
002A 06EA ldi R16,166
002C 10D0 xcall _Write_LCDCOM
002E .dbline 33
002E ; Write_LCDCOM(ALL_POINT_NORMAL); //CLEAR
002E 04EA ldi R16,164
0030 0ED0 xcall _Write_LCDCOM
0032 .dbline 34
0032 ; Write_LCDCOM(BIAS_1_9); //1/9BIAS
0032 02EA ldi R16,162
0034 0CD0 xcall _Write_LCDCOM
0036 .dbline 35
0036 ; Write_LCDCOM(OUTPUT_MPDE_REVERSE); //COMMON OUTPUT DIRECTION
0036 08EC ldi R16,200
0038 0AD0 xcall _Write_LCDCOM
003A .dbline 36
003A ; Write_LCDCOM(POWER); //POWER CONTROL
003A 0FE2 ldi R16,47
003C 08D0 xcall _Write_LCDCOM
003E .dbline 37
003E ; Write_LCDCOM(RESISTOR_RATION); //RESISTER RATIO
003E 04E2 ldi R16,36
0040 06D0 xcall _Write_LCDCOM
0042 .dbline 38
0042 ; Write_LCDCOM(HIBYTE(ELECTRONIC_VOLUME));//VOLUM MODE SET
0042 01E8 ldi R16,129
0044 04D0 xcall _Write_LCDCOM
0046 .dbline 39
0046 ; Write_LCDCOM(LOBYTE(ELECTRONIC_VOLUME));
0046 04E2 ldi R16,36
0048 02D0 xcall _Write_LCDCOM
004A .dbline 41
004A ;
004A ; Clear_LCD();
004A 0DD0 xcall _Clear_LCD
004C .dbline -2
004C L1:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e Write_LCDCOM _Write_LCDCOM fV
004E ; command -> R16
.even
004E _Write_LCDCOM::
004E .dbline -1
004E .dbline 49
004E ; }
004E ;
004E ;
004E ; /*************************************************/
004E ; //Write command
004E ; /*************************************************/
004E ; void Write_LCDCOM(BYTE command)
004E ; {
004E .dbline 50
004E ; LCD_AO_IO &= ~BIT(LCD_AO_PIN);
004E 9098 cbi 0x12,0
0050 .dbline 51
0050 ; LCD_CS_IO &= ~BIT(LCD_CS_PIN);
0050 9298 cbi 0x12,2
0052 .dbline 52
0052 ; SPDR = (unsigned char)command;
0052 0FB9 out 0xf,R16
0054 L3:
0054 .dbline 53
0054 ; while(!(SPSR&(1<<SPIF))); //Wait for transmission finish
0054 L4:
0054 .dbline 53
0054 779B sbis 0xe,7
0056 FECF rjmp L3
0058 X0:
0058 .dbline -2
0058 L2:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r command 16 c
005A .dbend
005A .dbfunc e Write_LCDDATA _Write_LCDDATA fV
005A ; data -> R16
.even
005A _Write_LCDDATA::
005A .dbline -1
005A .dbline 59
005A ; }
005A ; /*************************************************/
005A ; //Write data
005A ; /*************************************************/
005A ; void Write_LCDDATA(BYTE data)
005A ; {
005A .dbline 60
005A ; LCD_AO_IO |= BIT(LCD_AO_PIN);
005A 909A sbi 0x12,0
005C .dbline 61
005C ; LCD_CS_IO &= ~BIT(LCD_CS_PIN);
005C 9298 cbi 0x12,2
005E .dbline 62
005E ; SPDR = (unsigned char)data;
005E 0FB9 out 0xf,R16
0060 L7:
0060 .dbline 63
0060 ; while(!(SPSR&(1<<SPIF))); //Wait for transmission finish
0060 L8:
0060 .dbline 63
0060 779B sbis 0xe,7
0062 FECF rjmp L7
0064 X1:
0064 .dbline -2
0064 L6:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbsym r data 16 c
0066 .dbend
0066 .dbfunc e Clear_LCD _Clear_LCD fV
0066 ; page -> R20
0066 ; seg -> R22
.even
0066 _Clear_LCD::
0066 4A93 st -y,R20
0068 6A93 st -y,R22
006A .dbline -1
006A .dbline 70
006A ; }
006A ;
006A ; /*************************************************/
006A ; //Clear LCD
006A ; /*************************************************/
006A ; void Clear_LCD()
006A ; {
006A .dbline 73
006A ; unsigned char seg;
006A ; unsigned char page;
006A ; for(page = PAGE_0; page < PAGE_8; page++) //写页地址共8 页0xb0----0xb8
006A 40EB ldi R20,176
006C 0EC0 xjmp L14
006E L11:
006E .dbline 74
006E ; {
006E .dbline 75
006E ; Write_LCDCOM(page);
006E 042F mov R16,R20
0070 EEDF xcall _Write_LCDCOM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -