📄 192lcd.lis
字号:
.module _192lcd.c
.area text(rom, con, rel)
0000 .dbfile E:\zi\lcd\192lcd\192lcd.c
0000 .dbfunc e LCD_Command _LCD_Command fV
0000 ; i -> R20,R21
0000 ; command -> R16,R17
.even
0000 _LCD_Command::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 6
0002 ; #include "iom8v.h"
0002 ; #include "macros.h"
0002 ; #include "lcd.h"
0002 ; //写操作
0002 ; void LCD_Command(unsigned command)
0002 ; {
0002 .dbline 8
0002 ; unsigned i;
0002 ; for(i=0;i<=7;i++)
0002 4427 clr R20
0004 5527 clr R21
0006 0EC0 rjmp L5
0008 L2:
0008 .dbline 9
0008 ; {
0008 .dbline 10
0008 ; CLR_A0
0008 AA98 cbi 0x15,2
000A .dbline 11
000A ; CLR_SCL
000A A998 cbi 0x15,1
000C .dbline 12
000C ; if(0X80&&command==0)
000C 0030 cpi R16,0
000E 0107 cpc R16,R17
0010 11F4 brne L6
0012 X0:
0012 .dbline 13
0012 ; CLR_SI
0012 A898 cbi 0x15,0
0014 01C0 rjmp L7
0016 L6:
0016 .dbline 15
0016 ; else
0016 ; SBIT_SI
0016 A89A sbi 0x15,0
0018 L7:
0018 .dbline 16
0018 A99A sbi 0x15,1
001A .dbline 17
001A AA9A sbi 0x15,2
001C .dbline 18
001C 000F lsl R16
001E 111F rol R17
0020 .dbline 19
0020 L3:
0020 .dbline 8
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L5:
0024 .dbline 8
0024 87E0 ldi R24,7
0026 90E0 ldi R25,0
0028 8417 cp R24,R20
002A 9507 cpc R25,R21
002C 68F7 brsh L2
002E .dbline -2
002E L1:
002E 00D0 rcall pop_gset1
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r i 20 i
0032 .dbsym r command 16 i
0032 .dbend
0032 .dbfunc e LCD_Data _LCD_Data fV
0032 ; i -> R20,R21
0032 ; data -> R16,R17
.even
0032 _LCD_Data::
0032 00D0 rcall push_gset1
0034 .dbline -1
0034 .dbline 22
0034 ; SBIT_SCL
0034 ; SBIT_A0
0034 ; command=command<<1;
0034 ; }
0034 ; }
0034 ; void LCD_Data(unsigned data)
0034 ; {
0034 .dbline 24
0034 ; unsigned i;
0034 ; for(i=0;i<=7;i++)
0034 4427 clr R20
0036 5527 clr R21
0038 0EC0 rjmp L12
003A L9:
003A .dbline 25
003A ; {
003A .dbline 26
003A ; SBIT_A0
003A AA9A sbi 0x15,2
003C .dbline 27
003C ; CLR_SCL
003C A998 cbi 0x15,1
003E .dbline 28
003E ; if(0x80&&data==0)
003E 0030 cpi R16,0
0040 0107 cpc R16,R17
0042 11F4 brne L13
0044 X1:
0044 .dbline 29
0044 ; CLR_SI
0044 A898 cbi 0x15,0
0046 01C0 rjmp L14
0048 L13:
0048 .dbline 31
0048 ; else
0048 ; SBIT_SI
0048 A89A sbi 0x15,0
004A L14:
004A .dbline 32
004A A99A sbi 0x15,1
004C .dbline 33
004C AA98 cbi 0x15,2
004E .dbline 34
004E 1695 lsr R17
0050 0795 ror R16
0052 .dbline 35
0052 L10:
0052 .dbline 24
0052 4F5F subi R20,255 ; offset = 1
0054 5F4F sbci R21,255
0056 L12:
0056 .dbline 24
0056 87E0 ldi R24,7
0058 90E0 ldi R25,0
005A 8417 cp R24,R20
005C 9507 cpc R25,R21
005E 68F7 brsh L9
0060 .dbline -2
0060 L8:
0060 00D0 rcall pop_gset1
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r i 20 i
0064 .dbsym r data 16 i
0064 .dbend
0064 .dbfunc e LCD_Init _LCD_Init fV
.even
0064 _LCD_Init::
0064 .dbline -1
0064 .dbline 39
0064 ; SBIT_SCL
0064 ; CLR_A0
0064 ; data=data>>1;
0064 ; }
0064 ; }
0064 ; //初始化
0064 ; void LCD_Init(void)
0064 ; {
0064 .dbline 40
0064 ; CLR_RES
0064 AB98 cbi 0x15,3
0066 .dbline 41
0066 ; Delay_1ms();
0066 00D0 rcall _Delay_1ms
0068 .dbline 42
0068 ; SBIT_RES
0068 AB9A sbi 0x15,3
006A .dbline 43
006A ; Delay_1ms();
006A 00D0 rcall _Delay_1ms
006C .dbline 44
006C ; LCD_Command(0XAB);//OSC ON
006C 0BEA ldi R16,171
006E 10E0 ldi R17,0
0070 C7DF rcall _LCD_Command
0072 .dbline 45
0072 ; LCD_Command(0XA2);//BIAS=1/9
0072 02EA ldi R16,162
0074 10E0 ldi R17,0
0076 C4DF rcall _LCD_Command
0078 .dbline 46
0078 ; LCD_Command(0XA1);//ADC=1
0078 01EA ldi R16,161
007A 10E0 ldi R17,0
007C C1DF rcall _LCD_Command
007E .dbline 47
007E ; LCD_Command(0XC8);//COM=1
007E 08EC ldi R16,200
0080 10E0 ldi R17,0
0082 BEDF rcall _LCD_Command
0084 .dbline 48
0084 ; LCD_Command(0X40);//START LINE=0
0084 00E4 ldi R16,64
0086 10E0 ldi R17,0
0088 BBDF rcall _LCD_Command
008A .dbline 49
008A ; LCD_Command(0X2F);//POWER CONTROL
008A 0FE2 ldi R16,47
008C 10E0 ldi R17,0
008E B8DF rcall _LCD_Command
0090 .dbline 50
0090 ; LCD_Command(0X25);//set internal res
0090 05E2 ldi R16,37
0092 10E0 ldi R17,0
0094 B5DF rcall _LCD_Command
0096 .dbline 53
0096 ; //LCD_Command(0XA4);//DISPLAY ALL LIGHT=OFF
0096 ; //LCD_Command(0XA6);//DISPLAY NORMAL
0096 ; LCD_Command(0X81);//set v mode
0096 01E8 ldi R16,129
0098 10E0 ldi R17,0
009A B2DF rcall _LCD_Command
009C .dbline 54
009C ; LCD_Command(0X13);//set v reg
009C 03E1 ldi R16,19
009E 10E0 ldi R17,0
00A0 AFDF rcall _LCD_Command
00A2 .dbline 55
00A2 ; LCD_Command(0XAF);//DISPLAY ON
00A2 0FEA ldi R16,175
00A4 10E0 ldi R17,0
00A6 ACDF rcall _LCD_Command
00A8 .dbline 56
00A8 ; LCD_Command(0XB0);//set page address
00A8 00EB ldi R16,176
00AA 10E0 ldi R17,0
00AC A9DF rcall _LCD_Command
00AE .dbline 57
00AE ; LCD_Command(0X10);//column up-4
00AE 00E1 ldi R16,16
00B0 10E0 ldi R17,0
00B2 A6DF rcall _LCD_Command
00B4 .dbline 58
00B4 ; LCD_Command(0X00);//column low-4
00B4 0027 clr R16
00B6 1127 clr R17
00B8 A3DF rcall _LCD_Command
00BA .dbline -2
00BA L15:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbend
00BC .dbfunc e DIS_Lcd_XY _DIS_Lcd_XY fV
00BC ; colum -> R22,R23
00BC ; temp -> R20,R21
00BC ; data -> y+4
00BC ; page -> R20,R21
00BC ; column -> R22,R23
.even
00BC _DIS_Lcd_XY::
00BC 00D0 rcall push_gset2
00BE A901 movw R20,R18
00C0 B801 movw R22,R16
00C2 .dbline -1
00C2 .dbline 61
00C2 ; }
00C2 ; void DIS_Lcd_XY(unsigned column,unsigned page,unsigned data)
00C2 ; {
00C2 .dbline 63
00C2 ; unsigned temp;
00C2 ; unsigned colum=column+0x24;
00C2 6C5D subi R22,220 ; offset = 36
00C4 7F4F sbci R23,255
00C6 .dbline 64
00C6 ; temp=page|0xB0;
00C6 406B ori R20,176
00C8 .dbline 65
00C8 ; LCD_Command(temp);/*设置页*/
00C8 8A01 movw R16,R20
00CA 9ADF rcall _LCD_Command
00CC .dbline 66
00CC ; temp=((colum>>4)&0x0F)|0x10;
00CC AB01 movw R20,R22
00CE 5695 lsr R21
00D0 4795 ror R20
00D2 5695 lsr R21
00D4 4795 ror R20
00D6 5695 lsr R21
00D8 4795 ror R20
00DA 5695 lsr R21
00DC 4795 ror R20
00DE 4F70 andi R20,15
00E0 5070 andi R21,0
00E2 4061 ori R20,16
00E4 .dbline 67
00E4 ; LCD_Command(temp);/*设置列高位*/
00E4 8A01 movw R16,R20
00E6 8CDF rcall _LCD_Command
00E8 .dbline 68
00E8 ; temp=colum&0x0F;
00E8 AB01 movw R20,R22
00EA 4F70 andi R20,15
00EC 5070 andi R21,0
00EE .dbline 69
00EE ; LCD_Command(temp);/*设置列低位*/
00EE 8A01 movw R16,R20
00F0 87DF rcall _LCD_Command
00F2 .dbline 70
00F2 ; LCD_Data(data);
00F2 0C81 ldd R16,y+4
00F4 1D81 ldd R17,y+5
00F6 9DDF rcall _LCD_Data
00F8 .dbline -2
00F8 L16:
00F8 00D0 rcall pop_gset2
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbsym r colum 22 i
00FC .dbsym r temp 20 i
00FC .dbsym l data 4 i
00FC .dbsym r page 20 i
00FC .dbsym r column 22 i
00FC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -