📄 lesson6.s
字号:
.module lesson6.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
_table::
.byte 'I,32,'L,'O,'V,'E,32,'Y,'O,'U,32,33,0
.dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
.dbsym e table _table A[13:13]c
_table1::
.byte 'L,'i,32,'h,'u,'a,'n,'g,32,'s,'h,'e,'n,'g,0
.dbsym e table1 _table1 A[15:15]c
.area text(rom, con, rel)
.dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delay::
xcall push_gset2
.dbline -1
.dbline 11
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; #pragma data:code
; /*code存储器类型说明*/
; const uchar table[]="I LOVE YOU !";//const类型说明,表示在程序执行过程中不可更改的常量值
; const uchar table1[]="Li huang sheng";
;
; void delay(uint ms)
; {
.dbline 13
; uint i,j;
; for(i=0;i<ms;i++)
clr R20
clr R21
xjmp L5
L2:
.dbline 14
; {
.dbline 15
clr R22
clr R23
xjmp L9
L6:
.dbline 15
L7:
.dbline 15
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 15
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
.dbline 16
L3:
.dbline 13
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 13
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 17
; for(j=0;j<1141;j++);
; }
; }
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r ms 16 i
.dbend
.dbfunc e write_com _write_com fV
; com -> R20
.even
_write_com::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 19
; void write_com(uchar com)
; {
.dbline 20
; PORTD&=~BIT(4);
cbi 0x12,4
.dbline 21
; PORTD&=~BIT(5);
cbi 0x12,5
.dbline 22
; PORTB=com;
out 0x18,R20
.dbline 23
; PORTD|=BIT(6);
sbi 0x12,6
.dbline 24
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 25
; PORTD&=~BIT(6);
cbi 0x12,6
.dbline -2
.dbline 26
; }
L10:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r com 20 c
.dbend
.dbfunc e write_dat _write_dat fV
; dat -> R20
.even
_write_dat::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 29
;
; void write_dat(uchar dat)
; {
.dbline 30
; PORTD|=BIT(4);
sbi 0x12,4
.dbline 31
; PORTD&=~BIT(5);
cbi 0x12,5
.dbline 32
; PORTB=dat;
out 0x18,R20
.dbline 33
; PORTD|=BIT(6);
sbi 0x12,6
.dbline 34
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 35
; PORTD&=~BIT(6);
cbi 0x12,6
.dbline -2
.dbline 37
;
; }
L11:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r dat 20 c
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 39
; void main()
; {
xjmp L14
L13:
.dbline 41
; while(1)
; {
.dbline 43
; uchar i;
; DDRB=0XFF;
ldi R24,255
out 0x17,R24
.dbline 44
; DDRD|=BIT(4)|BIT(5)|BIT(6);
in R24,0x11
ori R24,112
out 0x11,R24
.dbline 45
; PORTD&=~BIT(6);
cbi 0x12,6
.dbline 47
;
; write_com(0X38);//设置显示模式
ldi R16,56
xcall _write_com
.dbline 48
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 49
; write_com(0X01);//清屏
ldi R16,1
xcall _write_com
.dbline 50
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 51
; write_com(0X0C);//设置显示开关和光标
ldi R16,12
xcall _write_com
.dbline 52
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 53
; write_com(0X06);//设置字符显示移动模式
ldi R16,6
xcall _write_com
.dbline 54
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 55
; write_com(0X80+0X10);//设置第1行数据地址指针
ldi R16,144
xcall _write_com
.dbline 56
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 57
; for(i=0;i<12;i++)//显示第1行的字符
clr R20
xjmp L19
L16:
.dbline 58
.dbline 59
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _write_dat
.dbline 60
ldi R16,5
ldi R17,0
xcall _delay
.dbline 61
L17:
.dbline 57
inc R20
L19:
.dbline 57
cpi R20,12
brlo L16
.dbline 62
; {
; write_dat(table[i]);
; delay(5);
; }
; write_com(0X80+0X50);//设置第2行的数据地址指针
ldi R16,208
xcall _write_com
.dbline 63
; delay(5);
ldi R16,5
ldi R17,0
xcall _delay
.dbline 64
; for(i=0;i<14;i++)//显示第2行的字符
clr R20
xjmp L23
L20:
.dbline 65
.dbline 66
ldi R24,<_table1
ldi R25,>_table1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R16,Z
xcall _write_dat
.dbline 67
ldi R16,5
ldi R17,0
xcall _delay
.dbline 68
L21:
.dbline 64
inc R20
L23:
.dbline 64
cpi R20,14
brlo L20
.dbline 69
; {
; write_dat(table1[i]);
; delay(5);
; }
; for(i=0;i<16;i++)//设置字符从右到左显示
clr R20
xjmp L27
L24:
.dbline 70
.dbline 71
ldi R16,24
xcall _write_com
.dbline 72
ldi R16,500
ldi R17,1
xcall _delay
.dbline 73
L25:
.dbline 69
inc R20
L27:
.dbline 69
cpi R20,16
brlo L24
.dbline 75
L14:
.dbline 40
xjmp L13
X0:
.dbline -2
.dbline 76
; {
; write_com(0X18);//从右到左显示指令
; delay(500);
; }
;
; }
; }
L12:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -