📄 lcd.s
字号:
.module LCD.C
.area data(ram, con, rel)
_date::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 10
.area idata
.byte 0,0,0,0,0,0,0,0,0,0
.area data(ram, con, rel)
.dbfile D:\new_sd\LCD\LCD.C
.dbsym e date _date A[11:11]c
.area lit(rom, con, rel)
_data_hi::
.byte 0,224
.byte 16,8
.byte 8,16
.byte 224,0
.byte 0,15
.byte 16,32
.byte 32,16
.byte 15,0
.byte 0,16
.byte 16,248
.byte 0,0
.byte 0,0
.byte 0,32
.byte 32,63
.byte 32,32
.byte 0,0
.byte 0,'p
.byte 8,8
.byte 8,136
.byte 'p,0
.byte 0,48
.byte 40,36
.byte 34,33
.byte 48,0
.byte 0,48
.byte 8,136
.byte 136,'H
.byte 48,0
.byte 0,24
.byte 32,32
.byte 32,17
.byte 14,0
.byte 0,0
.byte 192,32
.byte 16,248
.byte 0,0
.byte 0,7
.byte 4,36
.byte 36,63
.byte 36,0
.byte 0,248
.byte 8,136
.byte 136,8
.byte 8,0
.byte 0,25
.byte 33,32
.byte 32,17
.byte 14,0
.byte 0,224
.byte 16,136
.byte 136,24
.byte 0,0
.byte 0,15
.byte 17,32
.byte 32,17
.byte 14,0
.byte 0,56
.byte 8,8
.byte 200,56
.byte 8,0
.byte 0,0
.byte 0,63
.byte 0,0
.byte 0,0
.byte 0,'p
.byte 136,8
.byte 8,136
.byte 'p,0
.byte 0,28
.byte 34,33
.byte 33,34
.byte 28,0
.byte 0,224
.byte 16,8
.byte 8,16
.byte 224,0
.byte 0,0
.byte 49,34
.byte 34,17
.byte 15,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,48
.byte 48,0
.byte 0,0
.byte 0,0
.byte 8,'x
.byte 136,0
.byte 0,200
.byte 56,8
.byte 0,0
.byte 7,56
.byte 14,1
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,0
.byte 0,1
.byte 1,1
.byte 1,1
.byte 1,1
.dbsym e data_hi _data_hi A[224:224]kc
.area text(rom, con, rel)
.dbfile D:\new_sd\LCD\LCD.C
.dbfunc e delayms _delayms fV
; i -> y+4
; j -> y+0
; m -> y+12
.even
_delayms::
xcall push_arg4
xcall push_gset2
sbiw R28,8
.dbline -1
.dbline 64
;
; //作者:张文2008.08.07
; //液晶显示问题的说明
; //液晶显示的时候用到LCD_SHOW()就可以了,不过开SPCR = 0x50 使用后关SPCR = 0x54;
; //液晶的尺寸是256*192的.
; //void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; //page 为0 2 4 8 10对应的是行
; //m 对应的是 0x10 -- 0x17 每一行对应的数据的开始地址
; //n 对应的是 两个字节的数据中的一个 一个汉字是32*32 //n==0的时候显示前半个数据.n=8对应的是后半个数据
; //data 对应的是显示的数据,在显示的时候用的是查表的方法。
; #include <iom64v.h>
; #include <macros.h>
;
; #include"lcd.h"
; #define LCD_control PORTD
; #define LCD_CS 6
; #define LCD_RST 5
; #define LCD_RS 4
;
; //-------------------------------------------------------------------------------
; unsigned char date[11]={0};
; //-------------------------------------------------------------------------------
; //十进制数
; //-------------------------------------------------------------------------------
; const unsigned char data_hi[224]= { //0123456789.
; 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
; 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, //0
; 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
; 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, //1
; 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
; 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, //2
; 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
; 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, //3
; 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
; 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, //4
; 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
; 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, //5
; 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
; 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, //6
; 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
; 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, //7
; 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
; 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, //8
; 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
; 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, //9
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; 0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, //. 10
; 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
; 0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00, //v 11
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //12
;
; 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //"-" //13
; 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
;
;
;
; };
; //-------------------------------------------------------------------------------
; // Delay Routine
; //延时程序
; //-------------------------------------------------------------------------------
; void delayms(UINT32 m)
; {
.dbline 67
; UINT32 j;
; UINT32 i;
; NOP();
nop
.dbline 68
; for(i=0; i<m; i++)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+4,R20
std z+5,R21
std z+6,R22
std z+7,R23
xjmp L5
L2:
.dbline 69
; for(j=0; j<109; j++)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
xjmp L9
L6:
.dbline 70
nop
L7:
.dbline 69
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
L9:
.dbline 69
ldi R20,109
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brlo L6
L3:
.dbline 68
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+4,R2
std z+5,R3
std z+6,R4
std z+7,R5
L5:
.dbline 68
movw R30,R28
ldd R2,z+12
ldd R3,z+13
ldd R4,z+14
ldd R5,z+15
movw R30,R28
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brsh X0
xjmp L2
X0:
.dbline -2
L1:
adiw R28,8
xcall pop_gset2
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l i 4 l
.dbsym l j 0 l
.dbsym l m 12 l
.dbend
.dbfunc e SdCmd _SdCmd fV
; Command -> R20
.even
_SdCmd::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 77
; NOP();
; }
; //-------------------------------------------------------------------------------
; // IO Routine
; // LCD“命令字”发送
; //-------------------------------------------------------------------------------
; void SdCmd(UINT8 Command) // send command
; {
.dbline 78
; SPI_SS |=1; //屏蔽3548
sbi 0x18,0
.dbline 79
; LCD_control &=~(1<<LCD_CS); // chip select
cbi 0x12,6
.dbline 80
; LCD_control &=~(1<<LCD_RS); // for command
cbi 0x12,4
.dbline 81
; SPI_SendByte(Command);
mov R16,R20
clr R17
xcall _SPI_SendByte
.dbline 82
; LCD_control |=1<<LCD_CS; // chip select
sbi 0x12,6
.dbline -2
L10:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r Command 20 c
.dbend
.dbfunc e SdData _SdData fV
; DData -> R20
.even
_SdData::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 88
; }
; //-------------------------------------------------------------------------------
; //LCD 数据发送
; //-------------------------------------------------------------------------------
; void SdData(UINT8 DData) // send data
; {
.dbline 89
; SPI_SS |=1; //屏蔽3548
sbi 0x18,0
.dbline 90
; LCD_control &=~(1<<LCD_CS); // chip select
cbi 0x12,6
.dbline 91
; LCD_control |=1<<LCD_RS; // for data
sbi 0x12,4
.dbline 92
; SPI_SendByte(DData);
mov R16,R20
clr R17
xcall _SPI_SendByte
.dbline 93
; LCD_control |=1<<LCD_CS; // chip select
sbi 0x12,6
.dbline -2
L11:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r DData 20 c
.dbend
.dbfunc e LCDSHOW _LCDSHOW fV
; i -> R20
; j -> R14
; date -> R22
; n -> R10
; m -> R12
; page -> y+10
.even
_LCDSHOW::
xcall push_arg4
xcall push_gset5
mov R12,R18
ldd R10,y+14
ldd R22,y+16
.dbline -1
.dbline 102
; }
; //-------------------------------------------------------------------------------
; //LCD 显示字符和数字
; // void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; // LCDSHOW( page, 0x15, 8, 12);
; // M () N
; //-------------------------------------------------------------------------------
; void LCDSHOW(UINT8 page,UINT8 m,UINT8 n,UINT8 date)
; {
.dbline 105
;
; UINT8 i,j;
; for(i=0;i<2;i++)
clr R20
xjmp L16
L13:
.dbline 106
; {
.dbline 107
; SdCmd(0xb0+i+page);
mov R16,R20
subi R16,80 ; addi 176
ldd R0,y+10
add R16,R0
xcall _SdCmd
.dbline 108
; SdCmd(m);
mov R16,R12
xcall _SdCmd
.dbline 109
; SdCmd(n);
mov R16,R10
xcall _SdCmd
.dbline 110
; for(j=0;j<8;j++)
clr R14
xjmp L20
L17:
.dbline 111
.dbline 112
ldi R24,8
mul R24,R20
mov R30,R14
clr R31
add R30,R0
adc R31,R1
ldi R24,16
mul R24,R22
add R30,R0
adc R31,R1
ldi R24,<_data_hi
ldi R25,>_data_hi
add R30,R24
adc R31,R25
lpm R16,Z
xcall _SdData
.dbline 113
ldi R24,8
mul R24,R20
mov R30,R14
clr R31
add R30,R0
adc R31,R1
ldi R24,16
mul R24,R22
add R30,R0
adc R31,R1
ldi R24,<_data_hi
ldi R25,>_data_hi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -