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

📄 so12864.lis

📁 采用Mega128控制LCD12864液晶显示器
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -