📄 st7920iccavrmega8.s
字号:
; us -> R22
; MS -> R16,R17
.even
_Delay::
rcall push_gset2
.dbline -1
.dbline 108
; }
; //===延时程序 ,12M/ms==
; void Delay(unsigned int MS)
; {
rjmp L30
L29:
.dbline 111
; unsigned char us,usn;
; while(MS!=0) //for 12M
; {
.dbline 112
; usn = 2;
ldi R20,2
rjmp L33
L32:
.dbline 114
; while(usn!=0)
; {
.dbline 115
; us=0xf5;
ldi R22,245
rjmp L36
L35:
.dbline 116
.dbline 116
dec R22
.dbline 116
L36:
.dbline 116
tst R22
brne L35
.dbline 116
.dbline 117
dec R20
.dbline 118
L33:
.dbline 113
tst R20
brne L32
.dbline 119
subi R16,1
sbci R17,0
.dbline 120
L30:
.dbline 110
cpi R16,0
cpc R16,R17
brne L29
X0:
.dbline -2
L28:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r usn 20 c
.dbsym r us 22 c
.dbsym r MS 16 i
.dbend
.dbfunc e LcmInit _LcmInit fV
.even
_LcmInit::
.dbline -1
.dbline 124
; while (us!=0){us--;};
; usn--;
; }
; MS--;
; }
; }
; //=====液晶初始化======
; void LcmInit( void )
; {
.dbline 125
; WriteCommand(0x30); //基本指令,选择8位CPU控制方式,关图显
ldi R16,48
rcall _WriteCommand
.dbline 126
; WriteCommand(0x03); //复位地址计数器
ldi R16,3
rcall _WriteCommand
.dbline 127
; WriteCommand(0x0C); //开整体显示
ldi R16,12
rcall _WriteCommand
.dbline 128
; WriteCommand(0x01); //清除屏显的数据
ldi R16,1
rcall _WriteCommand
.dbline 129
; WriteCommand(0x06); //设置地址计数器递增
ldi R16,6
rcall _WriteCommand
.dbline -2
L38:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LcmClearTXT _LcmClearTXT fV
.even
_LcmClearTXT::
.dbline -1
.dbline 133
; }
; //=======清文字========
; void LcmClearTXT( void )
; {
.dbline 134
; LcmInit();
rcall _LcmInit
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LcmClearBMP _LcmClearBMP fV
; i -> R20
; j -> R22
.even
_LcmClearBMP::
rcall push_gset2
.dbline -1
.dbline 138
; }
; //=======清图片========
; void LcmClearBMP( void )
; {
.dbline 140
; unsigned char i,j;
; WriteCommand(0x34); //关图显
ldi R16,52
rcall _WriteCommand
.dbline 141
; for(i=0;i<32;i++)
clr R20
rjmp L44
L41:
.dbline 142
; {
.dbline 143
; WriteCommand(0x80|i); //写入列地址
mov R16,R20
ori R16,128
rcall _WriteCommand
.dbline 144
; WriteCommand(0x80); //写入行地址
ldi R16,128
rcall _WriteCommand
.dbline 145
; for(j=0;j<32;j++)
clr R22
rjmp L48
L45:
.dbline 146
clr R16
rcall _WriteData
L46:
.dbline 145
inc R22
L48:
.dbline 145
cpi R22,32
brlo L45
.dbline 147
L42:
.dbline 141
inc R20
L44:
.dbline 141
cpi R20,32
brlo L41
.dbline -2
L40:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbend
.dbfunc e PutStr _PutStr fV
; puts -> R20,R21
; col -> R22
; row -> R10
.even
_PutStr::
rcall push_gset3
mov R22,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 152
; WriteData(0);
; }
; //WriteCommand(0x36);//开图显
; }
; //==写入一段文字,写完一屏,清屏,从头在写新的一屏=======
; void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
; {
.dbline 153
; WriteCommand(0x30); //基本指令,选择8位CPU控制方式,关图显
ldi R16,48
rcall _WriteCommand
.dbline 154
; WriteCommand(AC_TABLE[8*row+col]);
ldi R24,8
mul R24,R10
movw R30,R0
mov R2,R22
clr R3
add R30,R2
adc R31,R3
ldi R24,<_AC_TABLE
ldi R25,>_AC_TABLE
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _WriteCommand
rjmp L51
L50:
.dbline 156
; while(*puts != '\0')
; {
.dbline 157
; if(col==8)
cpi R22,8
brne L53
.dbline 158
; {
.dbline 159
; col=0;
clr R22
.dbline 160
; row++;
inc R10
.dbline 161
; }
L53:
.dbline 162
; if(row==4) row=0;
mov R24,R10
cpi R24,4
brne L55
.dbline 162
clr R10
L55:
.dbline 163
ldi R24,8
mul R24,R10
movw R30,R0
mov R2,R22
clr R3
add R30,R2
adc R31,R3
ldi R24,<_AC_TABLE
ldi R25,>_AC_TABLE
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _WriteCommand
.dbline 164
movw R30,R20
ldd R16,z+0
rcall _WriteData
.dbline 165
subi R20,255 ; offset = 1
sbci R21,255
.dbline 166
movw R30,R20
ldd R16,z+0
rcall _WriteData
.dbline 167
subi R20,255 ; offset = 1
sbci R21,255
.dbline 168
inc R22
.dbline 169
L51:
.dbline 155
movw R30,R20
ldd R2,z+0
tst R2
brne L50
.dbline -2
L49:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r puts 20 pc
.dbsym r col 22 c
.dbsym r row 10 c
.dbend
.dbfunc e PutBMP _PutBMP fV
; k -> R20
; x -> R22
; j -> R14
; y -> R12
; i -> R10
; puts -> y+10
.even
_PutBMP::
st -y,r17
st -y,r16
rcall push_gset5
.dbline -1
.dbline 173
; WriteCommand(AC_TABLE[8*row+col]);
; WriteData(*puts); //一个汉字的ASC码是一个16位的,所以要写入两个字节
; puts++;
; WriteData(*puts);
; puts++;
; col++;
; }
; }
; //========写入一屏图片128*64=======
; void PutBMP(unsigned char *puts)
; {
.dbline 175
; unsigned char x,y,i,j,k;
; x=0x80;
ldi R22,128
.dbline 176
; WriteCommand(0x34); //关图显
ldi R16,52
rcall _WriteCommand
.dbline 177
; for(k=0;k<2;k++)
clr R20
rjmp L61
L58:
.dbline 178
; {
.dbline 179
; y=0x80;
ldi R24,128
mov R12,R24
.dbline 180
; for(j=0;j<32;j++)
clr R14
rjmp L65
L62:
.dbline 181
; {
.dbline 182
; WriteCommand(y); //写入列地址
mov R16,R12
rcall _WriteCommand
.dbline 183
; WriteCommand(x); //写入行地址
mov R16,R22
rcall _WriteCommand
.dbline 184
; for(i=0;i<16;i++)
clr R10
rjmp L69
L66:
.dbline 185
.dbline 186
ldd R30,y+10
ldd R31,y+11
ld R16,Z+
std y+11,R31
std y+10,R30
rcall _WriteData
.dbline 187
L67:
.dbline 184
inc R10
L69:
.dbline 184
mov R24,R10
cpi R24,16
brlo L66
.dbline 188
inc R12
.dbline 189
L63:
.dbline 180
inc R14
L65:
.dbline 180
mov R24,R14
cpi R24,32
brlo L62
.dbline 190
ldi R22,136
.dbline 191
L59:
.dbline 177
inc R20
L61:
.dbline 177
cpi R20,2
brlo L58
.dbline 192
; {
; WriteData(*(puts++));
; }
; y++;
; }
; x=0x88;
; }
; WriteCommand(0x36); //开图显
ldi R16,54
rcall _WriteCommand
.dbline -2
L57:
rcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbsym r x 22 c
.dbsym r j 14 c
.dbsym r y 12 c
.dbsym r i 10 c
.dbsym l puts 10 pc
.dbend
.area bss(ram, con, rel)
.dbfile E:\AVR学习专区\AVR学习板\st7920iccavrmega8.c
_bmp1::
.blkb 1
.dbsym e bmp1 _bmp1 A[1:1]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -