📄 lcd.s
字号:
; { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
; { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
; { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
; { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
; { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
; { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
; { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
; { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
; { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
; { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
; { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
; { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
; { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
; { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
; { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
; { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
; { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
; { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
; { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
; { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
; { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
; { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
; { 0x44, 0x64, 0x54, 0x4C, 0x44 } // z
; };
; /*--------------------------------------------------------------------------------------------------
; 函数原型声明
; --------------------------------------------------------------------------------------------------*/
; void init_lcd ( void );
; void clear_lcd ( void );
; void display_lcd ( unsigned char, unsigned char);
; void locat_lcd ( unsigned char, unsigned char);
;
;
; ////////////////////////////////////////////////////////////////////////////////////////////////////
; ////////////////////////////////////////////////////////////////////////////////////////////////////
; ////////////////////////////////////////////////////////////////////////////////////////////////////
; ////////////////////////////////////////////////////////////////////////////////////////////////////
;
; void init_lcd(void)
; {
.dbline 136
; PORTD|=RST; //RESET LCD
sbi 0x12,0
.dbline 137
; DIS905();
sbi 0x18,4
.dbline 138
; ENLCD();
cbi 0x12,1
.dbline 139
; PORTB&=~RST; //RESETED
cbi 0x18,0
.dbline 147
;
;
;
; //SPI SETTINGS
;
;
; //DISABLE LCD
; PORTD|=CE;
sbi 0x12,1
.dbline 148
; display_lcd( 0x21, 0 ); // LCD Extended Commands.
clr R18
ldi R16,33
xcall _display_lcd
.dbline 149
; display_lcd( 0xC8, 0 ); // Set LCD Vop (Contrast).
clr R18
ldi R16,200
xcall _display_lcd
.dbline 150
; display_lcd( 0x06, 0 ); // Set Temp coefficent.
clr R18
ldi R16,6
xcall _display_lcd
.dbline 151
; display_lcd( 0x13, 0 ); // LCD bias mode 1:48.
clr R18
ldi R16,19
xcall _display_lcd
.dbline 152
; display_lcd( 0x20, 0 ); // LCD Standard Commands, Horizontal addressing mode.
clr R18
ldi R16,32
xcall _display_lcd
.dbline 153
; display_lcd( 0x0C, 0 ); // LCD in normal mode.
clr R18
ldi R16,12
xcall _display_lcd
.dbline 156
;
;
; clear_lcd();
xcall _clear_lcd
.dbline 157
; locat_lcd(X_Init,Y_Init);
ldi R18,2
ldi R16,10
xcall _locat_lcd
.dbline 158
; DISLCD();
sbi 0x12,1
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e clear_lcd _clear_lcd fV
; i -> R20,R21
.even
_clear_lcd::
xcall push_gset1
.dbline -1
.dbline 163
; }
; //
; //
; void clear_lcd(void)
; {
.dbline 166
; unsigned int i;
;
; display_lcd(0x0c, 0);
clr R18
ldi R16,12
xcall _display_lcd
.dbline 167
; display_lcd(0x80, 0);
clr R18
ldi R16,128
xcall _display_lcd
.dbline 169
;
; locat_lcd(0,0);
clr R18
clr R16
xcall _locat_lcd
.dbline 170
; for (i=0; i<504; i++)
clr R20
clr R21
xjmp L6
L3:
.dbline 171
ldi R18,1
clr R16
xcall _display_lcd
L4:
.dbline 170
subi R20,255 ; offset = 1
sbci R21,255
L6:
.dbline 170
cpi R20,248
ldi R30,1
cpc R21,R30
brlo L3
.dbline -2
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.dbfunc e display_lcd _display_lcd fV
; mode -> R18
; data -> R16
.even
_display_lcd::
.dbline -1
.dbline 176
; display_lcd(0, 1);
; }
; //
; //
; void display_lcd(unsigned char data,unsigned char mode)
; {
.dbline 177
; PORTD&=~CE;
cbi 0x12,1
.dbline 178
; if(mode==0)PORTD&=~DC;
tst R18
brne L8
.dbline 178
cbi 0x12,2
xjmp L9
L8:
.dbline 179
; else PORTD|=DC;
sbi 0x12,2
L9:
.dbline 181
;
; SPDR=data;
out 0xf,R16
L10:
.dbline 182
L11:
.dbline 182
; while((SPSR&0x80)!=0x80);
in R24,0xe
andi R24,128
cpi R24,128
brne L10
.dbline 184
;
; PORTD|=CE;
sbi 0x12,1
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r mode 18 c
.dbsym r data 16 c
.dbend
.dbfunc e locat_lcd _locat_lcd fV
; y -> R20
; x -> R22
.even
_locat_lcd::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 189
; }
; //
; //
; void locat_lcd(unsigned char x,unsigned char y)
; {
.dbline 190
; display_lcd(0x80|x,0); // set initial column
clr R18
mov R16,R22
ori R16,128
xcall _display_lcd
.dbline 191
; display_lcd(0x40|y,0); // set initial row
clr R18
mov R16,R20
ori R16,64
xcall _display_lcd
.dbline -2
L13:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e PutChar _PutChar fV
; i -> R20
; ch -> R22
.even
_PutChar::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 196
; }
; //
; //
; void PutChar (unsigned char ch)
; { unsigned char i;
.dbline 197
; ch-=32;
subi R22,32
.dbline 198
; for(i=0;i<5;i++)
clr R20
xjmp L18
L15:
.dbline 199
ldi R18,1
ldi R24,5
mul R24,R22
movw R2,R0
ldi R24,<_CharList
ldi R25,>_CharList
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R16,Z
xcall _display_lcd
L16:
.dbline 198
inc R20
L18:
.dbline 198
cpi R20,5
brlo L15
.dbline -2
L14:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r ch 22 c
.dbend
.dbfunc e LCD _LCD fV
; data -> R20
.even
_LCD::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 205
; display_lcd(CharList[ch][i],1);
; }
; //
; //
;
; void LCD(unsigned char data)
; {
.dbline 207
;
; if((X+=10)>=80){Y++;X=1;}
lds R24,_X
subi R24,246 ; addi 10
mov R2,R24
sts _X,R2
cpi R24,80
brlo L20
.dbline 207
.dbline 207
lds R24,_Y
subi R24,255 ; addi 1
sts _Y,R24
.dbline 207
ldi R24,1
sts _X,R24
.dbline 207
L20:
.dbline 208
; if(Y>5){Y=0;}
ldi R24,5
lds R2,_Y
cp R24,R2
brsh L22
.dbline 208
.dbline 208
clr R2
sts _Y,R2
.dbline 208
L22:
.dbline 209
; locat_lcd(X,Y);
lds R18,_Y
lds R16,_X
xcall _locat_lcd
.dbline 213
;
;
;
; data+=48;
subi R20,208 ; addi 48
.dbline 214
; if(data>57)data+=7;
ldi R24,57
cp R24,R20
brsh L24
.dbline 214
subi R20,249 ; addi 7
L24:
.dbline 215
; PutChar(data);
mov R16,R20
xcall _PutChar
.dbline 216
; DISLCD();
sbi 0x12,1
.dbline 217
; EN905();
cbi 0x18,4
.dbline -2
L19:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\lcd.c
_key:
.blkb 1
.dbfile C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905/config.h
.dbsym s key _key c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -