📄 lcd.s
字号:
.module lcd.c
.area lit(rom, con, rel)
_num::
.byte 62,'Q
.byte 'I,'E
.byte 62,0
.byte 0,'B
.byte 127,64
.byte 0,0
.byte 'B,'a
.byte 'Q,'I
.byte 'F,0
.byte 33,'A
.byte 'E,'K
.byte 49,0
.byte 24,20
.byte 18,127
.byte 16,0
.byte 39,'E
.byte 'E,'E
.byte 57,0
.byte 60,'J
.byte 'I,'I
.byte 48,0
.byte 1,'q
.byte 9,5
.byte 3,0
.byte 54,'I
.byte 'I,'I
.byte 54,0
.byte 6,'I
.byte 'I,'I
.byte 62,0
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1/char.h
.dbsym e num _num A[60:10:6]kc
_big_char::
.byte 126,17
.byte 17,17
.byte 126,0
.byte 127,'I
.byte 'I,'I
.byte 54,0
.byte 62,'A
.byte 'A,'A
.byte 34,0
.byte 127,'A
.byte 'A,34
.byte 28,0
.byte 127,'I
.byte 'I,'I
.byte 'A,0
.byte 127,9
.byte 9,9
.byte 1,0
.byte 62,'A
.byte 'I,'I
.byte 'z,0
.byte 127,8
.byte 8,8
.byte 127,0
.byte 0,'A
.byte 127,'A
.byte 0,0
.byte 32,64
.byte 'A,63
.byte 1,0
.byte 127,8
.byte 20,34
.byte 'A,0
.byte 127,64
.byte 64,64
.byte 64,0
.byte 127,2
.byte 12,2
.byte 127,0
.byte 127,4
.byte 8,16
.byte 127,0
.byte 62,'A
.byte 'A,'A
.byte 62,0
.byte 127,9
.byte 9,9
.byte 6,0
.byte 62,'A
.byte 'Q,33
.byte 94,0
.byte 127,9
.byte 25,41
.byte 'F,0
.byte 'F,'I
.byte 'I,'I
.byte 49,0
.byte 1,1
.byte 127,1
.byte 1,0
.byte 63,64
.byte 64,64
.byte 63,0
.byte 31,32
.byte 64,32
.byte 31,0
.byte 63,64
.byte 56,64
.byte 63,0
.byte 'c,20
.byte 8,20
.byte 'c,0
.byte 7,8
.byte 'p,8
.byte 7,0
.byte 'a,'Q
.byte 'I,'E
.byte 'C,0
.dbsym e big_char _big_char A[156:26:6]kc
_small_char::
.byte 32,'T
.byte 'T,'T
.byte 'x,0
.byte 127,'H
.byte 'D,'D
.byte 56,0
.byte 56,'D
.byte 'D,'D
.byte 32,0
.byte 56,'D
.byte 'D,'H
.byte 127,0
.byte 56,'T
.byte 'T,'T
.byte 24,0
.byte 8,126
.byte 9,1
.byte 2,0
.byte 12,'R
.byte 'R,'R
.byte 62,0
.byte 127,8
.byte 4,4
.byte 'x,0
.byte 0,'D
.byte 125,64
.byte 0,0
.byte 0,32
.byte 64,'D
.byte 61,0
.byte 127,16
.byte 40,'D
.byte 0,0
.byte 0,'A
.byte 127,64
.byte 0,0
.byte 124,4
.byte 24,4
.byte 'x,0
.byte 124,8
.byte 4,4
.byte 'x,0
.byte 56,'D
.byte 'D,'D
.byte 56,0
.byte 124,20
.byte 20,20
.byte 8,0
.byte 8,20
.byte 20,24
.byte 124,0
.byte 124,8
.byte 4,4
.byte 8,0
.byte 'H,'T
.byte 'T,'T
.byte 32,0
.byte 4,63
.byte 'D,64
.byte 32,0
.byte 60,64
.byte 64,32
.byte 124,0
.byte 28,32
.byte 64,32
.byte 28,0
.byte 60,64
.byte 48,64
.byte 60,0
.byte 'D,40
.byte 16,40
.byte 'D,0
.byte 12,'P
.byte 'P,'P
.byte 60,0
.byte 'D,'d
.byte 'T,'L
.byte 'D,0
.dbsym e small_char _small_char A[156:26:6]kc
.area text(rom, con, rel)
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1/char.h
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 18
; // Project :12864 LCD Display
; // Writer : you hu
; // ICC-AVR application builder :2005-7-12
; // Target : M128
; // Crystal: 8.0000Mhz
; // Description : display char
;
; #include <iom128v.h>
; #include <macros.h>
; #include "char.h"
; #include "lcd.h"
; typedef unsigned char uchar;
; typedef unsigned int uint;
;
; unsigned char flag;
;
; void port_init(void)
; {
.dbline 20
; //访问外部ram的总线端口
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 21
; DDRA = 0x00;
out 0x1a,R2
.dbline 22
; PORTC = 0x00;
out 0x15,R2
.dbline 23
; DDRC = 0xFF;
ldi R24,255
out 0x14,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_busy _check_busy fV
; temp -> R20
; cs -> R16
.even
_check_busy::
xcall push_gset1
.dbline -1
.dbline 27
; }
;
; void check_busy(uchar cs)
; {
xjmp L4
L3:
.dbline 30
; uchar temp;
; while(temp)
; {
.dbline 31
; if(cs)
tst R16
breq L6
.dbline 32
; temp=R_staus&0X80; //将忙状态读到temp中进行确定
lds R20,8197
andi R20,128
xjmp L7
L6:
.dbline 34
; else
; temp=L_staus&0X80;
lds R20,8201
andi R20,128
L7:
.dbline 35
L4:
.dbline 29
tst R20
brne L3
.dbline -2
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r cs 16 c
.dbend
.dbfunc e LCD_Clean _LCD_Clean fV
; page -> R20
; y -> R22
.even
_LCD_Clean::
xcall push_gset2
.dbline -1
.dbline 39
; }
; }
;
; void LCD_Clean(void)
; {
.dbline 40
; unsigned char page=0,y; //定义表示页和列的局部变量
clr R20
.dbline 42
;
; for(page=0;page<8;page++)
xjmp L12
L9:
.dbline 43
; {
.dbline 45
; //LCD左半屏的操作
; check_busy(0);
clr R16
xcall _check_busy
.dbline 46
; L_command=LCD_PAGE+page; //设置LCD左半屏页地址
mov R24,R20
subi R24,72 ; addi 184
sts 8200,R24
.dbline 47
; check_busy(0);
clr R16
xcall _check_busy
.dbline 48
; L_command=LCD_Y;
ldi R24,64
sts 8200,R24
.dbline 50
; //LCD右半屏的操作
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 51
; R_command=LCD_PAGE+page; //设置LCD右半屏页地址
mov R24,R20
subi R24,72 ; addi 184
sts 8196,R24
.dbline 52
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 53
; R_command=LCD_Y;
ldi R24,64
sts 8196,R24
.dbline 55
;
; for(y=0;y<64;y++)
clr R22
xjmp L16
L13:
.dbline 56
.dbline 57
clr R2
sts 8202,R2
.dbline 58
sts 8198,R2
.dbline 59
L14:
.dbline 55
inc R22
L16:
.dbline 55
cpi R22,64
brlo L13
.dbline 60
L10:
.dbline 42
inc R20
L12:
.dbline 42
cpi R20,8
brlo L9
.dbline -2
L8:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r page 20 c
.dbsym r y 22 c
.dbend
.dbfunc e LCD_Init _LCD_Init fV
.even
_LCD_Init::
.dbline -1
.dbline 64
; {
; L_data=0x00;
; R_data=0x00;
; }
; }
; }
;
; void LCD_Init(void) //LCD初始化子函数
; {
.dbline 66
; /*首先关闭12864的显示*/
; check_busy(0); //LCD左半屏正在工作,等待......
clr R16
xcall _check_busy
.dbline 67
; L_command=LCD_OFF; //先关闭LCD左半屏的显示
ldi R24,62
sts 8200,R24
.dbline 68
; check_busy(1); //LCD右半屏正在工作,等待......
ldi R16,1
xcall _check_busy
.dbline 69
; R_command=LCD_OFF; //先关闭LCD右半屏的显示
ldi R24,62
sts 8196,R24
.dbline 72
;
; /*开启12864的显示*/
; check_busy(0);
clr R16
xcall _check_busy
.dbline 73
; L_command=LCD_ON; //打开LCD左半屏的显示
ldi R24,63
sts 8200,R24
.dbline 74
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 75
; R_command=LCD_ON; //打开LCD右半屏的显示
ldi R24,63
sts 8196,R24
.dbline 78
;
; /*设置LCD显示的起始行*/
; check_busy(0);
clr R16
xcall _check_busy
.dbline 79
; L_command=LCD_X; //LCD左半屏起始行为0
ldi R24,192
sts 8200,R24
.dbline 80
; check_busy(1);
ldi R16,1
xcall _check_busy
.dbline 81
; R_command=LCD_X; //LCD右半屏起始行为0
ldi R24,192
sts 8196,R24
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 85
; }
;
; void init_devices(void)
; {
.dbline 86
; XMCRA = 0x00; //外部存储器控制
clr R2
sts 109,R2
.dbline 87
; XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
ldi R24,7
sts 108,R24
.dbline 89
; // mapping_init();
; port_init();
xcall _port_init
.dbline 90
; MCUCR = 0x80; //外部SRAM使能
ldi R24,128
out 0x35,R24
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e write_Bchar _write_Bchar fV
; i -> R20
; n -> R18
; cs -> R16
.even
_write_Bchar::
xcall push_gset1
.dbline -1
.dbline 94
; }
;
; void write_Bchar(unsigned char cs,unsigned char n) // 大写字母显示函数
; {
.dbline 96
; unsigned char i;
; for(i=0;i<6;i++)
clr R20
xjmp L23
L20:
.dbline 97
; {
.dbline 98
; if(cs) R_data=big_char[n][i]; //右半屏显示
tst R16
breq L24
.dbline 98
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_big_char
ldi R25,>_big_char
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8198,R30
xjmp L25
L24:
.dbline 99
; else L_data=big_char[n][i]; //左半屏显示
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_big_char
ldi R25,>_big_char
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8202,R30
L25:
.dbline 100
L21:
.dbline 96
inc R20
L23:
.dbline 96
cpi R20,6
brlo L20
.dbline -2
L19:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 18 c
.dbsym r cs 16 c
.dbend
.dbfunc e write_Schar _write_Schar fV
; i -> R20
; n -> R18
; cs -> R16
.even
_write_Schar::
xcall push_gset1
.dbline -1
.dbline 104
; }
; }
;
; void write_Schar(unsigned char cs,unsigned char n) // 小写字母显示函数
; {
.dbline 106
; unsigned char i;
; for(i=0;i<6;i++)
clr R20
xjmp L30
L27:
.dbline 107
; {
.dbline 108
; if(cs) R_data=small_char[n][i]; //右半屏显示
tst R16
breq L31
.dbline 108
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_small_char
ldi R25,>_small_char
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8198,R30
xjmp L32
L31:
.dbline 109
; else L_data=small_char[n][i]; //左半屏显示
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_small_char
ldi R25,>_small_char
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8202,R30
L32:
.dbline 110
L28:
.dbline 106
inc R20
L30:
.dbline 106
cpi R20,6
brlo L27
.dbline -2
L26:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 18 c
.dbsym r cs 16 c
.dbend
.dbfunc e write_Nchar _write_Nchar fV
; i -> R20
; n -> R18
; cs -> R16
.even
_write_Nchar::
xcall push_gset1
.dbline -1
.dbline 114
; }
; }
;
; void write_Nchar(unsigned char cs,unsigned char n) //数字显示函数
; {
.dbline 116
; unsigned char i;
; for(i=0;i<6;i++)
clr R20
xjmp L37
L34:
.dbline 117
; {
.dbline 118
; if(cs) R_data=num[n][i]; //右半屏显示
tst R16
breq L38
.dbline 118
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_num
ldi R25,>_num
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8198,R30
xjmp L39
L38:
.dbline 119
; else L_data=num[n][i]; //左半屏显示
ldi R24,6
mul R24,R18
movw R2,R0
ldi R24,<_num
ldi R25,>_num
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
sts 8202,R30
L39:
.dbline 120
L35:
.dbline 116
inc R20
L37:
.dbline 116
cpi R20,6
brlo L34
.dbline -2
L33:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r n 18 c
.dbsym r cs 16 c
.dbend
.area data(ram, con, rel)
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
L41:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
.area text(rom, con, rel)
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
.dbfunc e display_char _display_char fV
.dbsym s adder L41 c
; i -> R20
.even
_display_char::
xcall push_gset1
.dbline -1
.dbline 124
; }
; }
;
; void display_char(void) //字符显示函数
; {
.dbline 127
; unsigned char i;
; static unsigned char adder=0;
; write_Bchar(0, 24);
ldi R18,24
clr R16
xcall _write_Bchar
.dbline 128
; write_Schar(0, 14);
ldi R18,14
clr R16
xcall _write_Schar
.dbline 129
; write_Schar(0, 20);
ldi R18,20
clr R16
xcall _write_Schar
.dbline 130
clr R20
xjmp L45
L42:
.dbline 130
.dbline 130
clr R2
sts 8202,R2
.dbline 130
L43:
.dbline 130
inc R20
L45:
.dbline 130
cpi R20,4
brlo L42
.dbline 131
ldi R18,7
clr R16
xcall _write_Bchar
.dbline 132
ldi R18,20
clr R16
xcall _write_Schar
.dbline 133
lds R24,L41
subi R24,255 ; addi 1
sts L41,R24
.dbline 134
ldi R24,15
lds R2,L41
cp R24,R2
brsh L46
.dbline 134
.dbline 134
ldi R24,1
sts _flag,R24
.dbline 134
clr R2
sts L41,R2
.dbline 134
L46:
.dbline -2
L40:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e main _main fV
; i -> <dead>
.even
_main::
.dbline -1
.dbline 139
; for(i=0;i<4;i++){L_data=0x00;}
; write_Bchar(0, 7);
; write_Schar(0, 20);
; adder++;
; if(adder>15){flag=1;adder=0;}
; }
;
;
; void main(void)
; {
.dbline 141
; unsigned char i;
; init_devices();
xcall _init_devices
.dbline 142
; LCD_Clean();
xcall _LCD_Clean
.dbline 143
; LCD_Init();
xcall _LCD_Init
.dbline 144
; display_char();
xcall _display_char
.dbline -2
L48:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
_flag::
.blkb 1
.dbsym e flag _flag c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -