📄 192lcd.s
字号:
.module _192lcd.c
.area text(rom, con, rel)
.dbfile E:\zi\lcd\192lcd\192lcd.c
.dbfunc e LCD_Command _LCD_Command fV
; i -> R20,R21
; command -> R16,R17
.even
_LCD_Command::
rcall push_gset1
.dbline -1
.dbline 6
; #include "iom8v.h"
; #include "macros.h"
; #include "lcd.h"
; //写操作
; void LCD_Command(unsigned command)
; {
.dbline 8
; unsigned i;
; for(i=0;i<=7;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 9
; {
.dbline 10
; CLR_A0
cbi 0x15,2
.dbline 11
; CLR_SCL
cbi 0x15,1
.dbline 12
; if(0X80&&command==0)
cpi R16,0
cpc R16,R17
brne L6
X0:
.dbline 13
; CLR_SI
cbi 0x15,0
rjmp L7
L6:
.dbline 15
; else
; SBIT_SI
sbi 0x15,0
L7:
.dbline 16
sbi 0x15,1
.dbline 17
sbi 0x15,2
.dbline 18
lsl R16
rol R17
.dbline 19
L3:
.dbline 8
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 8
ldi R24,7
ldi R25,0
cp R24,R20
cpc R25,R21
brsh L2
.dbline -2
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r command 16 i
.dbend
.dbfunc e LCD_Data _LCD_Data fV
; i -> R20,R21
; data -> R16,R17
.even
_LCD_Data::
rcall push_gset1
.dbline -1
.dbline 22
; SBIT_SCL
; SBIT_A0
; command=command<<1;
; }
; }
; void LCD_Data(unsigned data)
; {
.dbline 24
; unsigned i;
; for(i=0;i<=7;i++)
clr R20
clr R21
rjmp L12
L9:
.dbline 25
; {
.dbline 26
; SBIT_A0
sbi 0x15,2
.dbline 27
; CLR_SCL
cbi 0x15,1
.dbline 28
; if(0x80&&data==0)
cpi R16,0
cpc R16,R17
brne L13
X1:
.dbline 29
; CLR_SI
cbi 0x15,0
rjmp L14
L13:
.dbline 31
; else
; SBIT_SI
sbi 0x15,0
L14:
.dbline 32
sbi 0x15,1
.dbline 33
cbi 0x15,2
.dbline 34
lsr R17
ror R16
.dbline 35
L10:
.dbline 24
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 24
ldi R24,7
ldi R25,0
cp R24,R20
cpc R25,R21
brsh L9
.dbline -2
L8:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r data 16 i
.dbend
.dbfunc e LCD_Init _LCD_Init fV
.even
_LCD_Init::
.dbline -1
.dbline 39
; SBIT_SCL
; CLR_A0
; data=data>>1;
; }
; }
; //初始化
; void LCD_Init(void)
; {
.dbline 40
; CLR_RES
cbi 0x15,3
.dbline 41
; Delay_1ms();
rcall _Delay_1ms
.dbline 42
; SBIT_RES
sbi 0x15,3
.dbline 43
; Delay_1ms();
rcall _Delay_1ms
.dbline 44
; LCD_Command(0XAB);//OSC ON
ldi R16,171
ldi R17,0
rcall _LCD_Command
.dbline 45
; LCD_Command(0XA2);//BIAS=1/9
ldi R16,162
ldi R17,0
rcall _LCD_Command
.dbline 46
; LCD_Command(0XA1);//ADC=1
ldi R16,161
ldi R17,0
rcall _LCD_Command
.dbline 47
; LCD_Command(0XC8);//COM=1
ldi R16,200
ldi R17,0
rcall _LCD_Command
.dbline 48
; LCD_Command(0X40);//START LINE=0
ldi R16,64
ldi R17,0
rcall _LCD_Command
.dbline 49
; LCD_Command(0X2F);//POWER CONTROL
ldi R16,47
ldi R17,0
rcall _LCD_Command
.dbline 50
; LCD_Command(0X25);//set internal res
ldi R16,37
ldi R17,0
rcall _LCD_Command
.dbline 53
; //LCD_Command(0XA4);//DISPLAY ALL LIGHT=OFF
; //LCD_Command(0XA6);//DISPLAY NORMAL
; LCD_Command(0X81);//set v mode
ldi R16,129
ldi R17,0
rcall _LCD_Command
.dbline 54
; LCD_Command(0X13);//set v reg
ldi R16,19
ldi R17,0
rcall _LCD_Command
.dbline 55
; LCD_Command(0XAF);//DISPLAY ON
ldi R16,175
ldi R17,0
rcall _LCD_Command
.dbline 56
; LCD_Command(0XB0);//set page address
ldi R16,176
ldi R17,0
rcall _LCD_Command
.dbline 57
; LCD_Command(0X10);//column up-4
ldi R16,16
ldi R17,0
rcall _LCD_Command
.dbline 58
; LCD_Command(0X00);//column low-4
clr R16
clr R17
rcall _LCD_Command
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e DIS_Lcd_XY _DIS_Lcd_XY fV
; colum -> R22,R23
; temp -> R20,R21
; data -> y+4
; page -> R20,R21
; column -> R22,R23
.even
_DIS_Lcd_XY::
rcall push_gset2
movw R20,R18
movw R22,R16
.dbline -1
.dbline 61
; }
; void DIS_Lcd_XY(unsigned column,unsigned page,unsigned data)
; {
.dbline 63
; unsigned temp;
; unsigned colum=column+0x24;
subi R22,220 ; offset = 36
sbci R23,255
.dbline 64
; temp=page|0xB0;
ori R20,176
.dbline 65
; LCD_Command(temp);/*设置页*/
movw R16,R20
rcall _LCD_Command
.dbline 66
; temp=((colum>>4)&0x0F)|0x10;
movw R20,R22
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
andi R20,15
andi R21,0
ori R20,16
.dbline 67
; LCD_Command(temp);/*设置列高位*/
movw R16,R20
rcall _LCD_Command
.dbline 68
; temp=colum&0x0F;
movw R20,R22
andi R20,15
andi R21,0
.dbline 69
; LCD_Command(temp);/*设置列低位*/
movw R16,R20
rcall _LCD_Command
.dbline 70
; LCD_Data(data);
ldd R16,y+4
ldd R17,y+5
rcall _LCD_Data
.dbline -2
L16:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r colum 22 i
.dbsym r temp 20 i
.dbsym l data 4 i
.dbsym r page 20 i
.dbsym r column 22 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -