📄 7920_16.lis
字号:
0144 02E0 ldi R16,2
0146 10E0 ldi R17,0
0148 71D0 xcall _Delay
014A .dbline 94
014A ; cmd=0x80; //设置DDRAM地址
014A 40E8 ldi R20,128
014C .dbline 95
014C ; W_1byte(0,0,cmd); //写指令
014C 4883 std y+0,R20
014E 2227 clr R18
0150 0027 clr R16
0152 07D0 xcall _W_1byte
0154 .dbline 96
0154 ; Delay(2); //延时
0154 02E0 ldi R16,2
0156 10E0 ldi R17,0
0158 69D0 xcall _Delay
015A .dbline -2
015A L25:
015A 2196 adiw R28,1
015C 0E940000 xcall pop_gset1
0160 .dbline 0 ; func end
0160 0895 ret
0162 .dbsym r cmd 20 c
0162 .dbend
0162 .dbfunc e W_1byte _W_1byte fV
0162 ; H_data -> R22,R23
0162 ; S_ID -> R10,R11
0162 ; L_data -> R20,R21
0162 ; W_data -> y+6
0162 ; RS -> R20
0162 ; RW -> R22
.even
0162 _W_1byte::
0162 0E940000 xcall push_gset3
0166 422F mov R20,R18
0168 602F mov R22,R16
016A .dbline -1
016A .dbline 109
016A ; }
016A ; /*******************************************************************
016A ; 函 数 名:W_1byte
016A ; 入口参数:RW、RS、W_data
016A ; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
016A ; 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
016A ; (一般RW都设为0,即只向液晶写数据,不读数据)
016A ; RS=1,写入的是数据;RS=0,写入的是指令;
016A ; 一般模式:RW=0,RS=1;写数据
016A ; RW=0,RS=0;写指令
016A ; ********************************************************************/
016A ; void W_1byte(uchar RW, uchar RS, uchar W_data)
016A ; {
016A .dbline 110
016A ; uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
016A 88EF ldi R24,248
016C 90E0 ldi R25,0
016E 5C01 movw R10,R24
0170 .dbline 111
0170 ; if(RW == 0)
0170 6623 tst R22
0172 19F4 brne L27
0174 .dbline 112
0174 ; {
0174 .dbline 113
0174 ; S_ID &=~ 0x04;
0174 8B7F andi R24,251
0176 5C01 movw R10,R24
0178 .dbline 114
0178 ; }
0178 03C0 xjmp L28
017A L27:
017A .dbline 116
017A ; else //if(RW==1)
017A ; {
017A .dbline 117
017A ; S_ID |= 0X04;
017A C501 movw R24,R10
017C 8460 ori R24,4
017E 5C01 movw R10,R24
0180 .dbline 118
0180 ; }
0180 L28:
0180 .dbline 119
0180 ; if(RS == 0)
0180 4423 tst R20
0182 21F4 brne L29
0184 .dbline 120
0184 ; {
0184 .dbline 121
0184 ; S_ID &=~ 0x02;
0184 C501 movw R24,R10
0186 8D7F andi R24,253
0188 5C01 movw R10,R24
018A .dbline 122
018A ; }
018A 03C0 xjmp L30
018C L29:
018C .dbline 124
018C ; else //if(RS==1)
018C ; {
018C .dbline 125
018C ; S_ID |= 0X02;
018C C501 movw R24,R10
018E 8260 ori R24,2
0190 5C01 movw R10,R24
0192 .dbline 126
0192 ; }
0192 L30:
0192 .dbline 127
0192 ; H_data = W_data;
0192 6E81 ldd R22,y+6
0194 7727 clr R23
0196 .dbline 128
0196 ; H_data &= 0xf0; //屏蔽低4位的数据
0196 607F andi R22,240
0198 7070 andi R23,0
019A .dbline 129
019A ; L_data = W_data; //xxxx0000格式
019A 4E81 ldd R20,y+6
019C 5527 clr R21
019E .dbline 130
019E ; L_data &= 0x0f; //屏蔽高4位的数据
019E 4F70 andi R20,15
01A0 5070 andi R21,0
01A2 .dbline 131
01A2 ; L_data <<= 4; //xxxx0000格式
01A2 440F lsl R20
01A4 551F rol R21
01A6 440F lsl R20
01A8 551F rol R21
01AA 440F lsl R20
01AC 551F rol R21
01AE 440F lsl R20
01B0 551F rol R21
01B2 .dbline 132
01B2 ; Set_CS();
01B2 B89A sbi 0x17,0
01B4 .dbline 132
01B4 C09A sbi 0x18,0
01B6 .dbline 133
01B6 ; Write_8bits(S_ID); //发送S_ID
01B6 8501 movw R16,R10
01B8 09D0 xcall _Write_8bits
01BA .dbline 134
01BA ; Write_8bits(H_data); //发送H_data
01BA 8B01 movw R16,R22
01BC 07D0 xcall _Write_8bits
01BE .dbline 135
01BE ; Write_8bits(L_data); //发送L_data
01BE 8A01 movw R16,R20
01C0 05D0 xcall _Write_8bits
01C2 .dbline 136
01C2 ; Clr_CS();
01C2 B89A sbi 0x17,0
01C4 .dbline 136
01C4 C098 cbi 0x18,0
01C6 .dbline -2
01C6 L26:
01C6 0E940000 xcall pop_gset3
01CA .dbline 0 ; func end
01CA 0895 ret
01CC .dbsym r H_data 22 i
01CC .dbsym r S_ID 10 i
01CC .dbsym r L_data 20 i
01CC .dbsym l W_data 6 c
01CC .dbsym r RS 20 c
01CC .dbsym r RW 22 c
01CC .dbend
01CC .dbfunc e Write_8bits _Write_8bits fV
01CC ; Temp_data -> R20,R21
01CC ; i -> R22,R23
01CC ; W_bits -> R10,R11
.even
01CC _Write_8bits::
01CC 0E940000 xcall push_gset3
01D0 5801 movw R10,R16
01D2 .dbline -1
01D2 .dbline 144
01D2 ; }
01D2 ; /********************************************************************
01D2 ; 函 数 名:Write_8bits
01D2 ; 入口参数:W_bits
01D2 ; 函数作用:负责串行输出8个bit位
01D2 ; ********************************************************************/
01D2 ; void Write_8bits(uint W_bits)
01D2 ; {
01D2 .dbline 146
01D2 ; uint i,Temp_data;
01D2 ; for(i=0; i<8; i++)
01D2 6627 clr R22
01D4 7727 clr R23
01D6 23C0 xjmp L35
01D8 L32:
01D8 .dbline 147
01D8 ; {
01D8 .dbline 148
01D8 ; Temp_data = W_bits;
01D8 A501 movw R20,R10
01DA .dbline 149
01DA ; Temp_data <<= i;
01DA 9B01 movw R18,R22
01DC 8A01 movw R16,R20
01DE 0E940000 xcall lsl16
01E2 A801 movw R20,R16
01E4 .dbline 150
01E4 ; if((Temp_data&0x80)==0) //bit7 is zero
01E4 07FD sbrc R16,7
01E6 0DC0 rjmp L36
01E8 .dbline 151
01E8 ; {
01E8 .dbline 152
01E8 ; Clr_SID();
01E8 B99A sbi 0x17,1
01EA .dbline 152
01EA C198 cbi 0x18,1
01EC .dbline 153
01EC ; nop();
01EC 0000 nop
01EE .dbline 154
01EE ; Set_SCLK();
01EE BA9A sbi 0x17,2
01F0 .dbline 154
01F0 C29A sbi 0x18,2
01F2 .dbline 155
01F2 ; nop();
01F2 0000 nop
01F4 .dbline 156
01F4 ; nop();
01F4 0000 nop
01F6 .dbline 157
01F6 ; Clr_SCLK();
01F6 BA9A sbi 0x17,2
01F8 .dbline 157
01F8 C298 cbi 0x18,2
01FA .dbline 158
01FA ; nop();
01FA 0000 nop
01FC .dbline 159
01FC ; Clr_SID();
01FC B99A sbi 0x17,1
01FE .dbline 159
01FE C198 cbi 0x18,1
0200 .dbline 160
0200 ; }
0200 0CC0 xjmp L37
0202 L36:
0202 .dbline 162
0202 ; else //bit7 is one
0202 ; {
0202 .dbline 163
0202 ; Set_SID();
0202 B99A sbi 0x17,1
0204 .dbline 163
0204 C19A sbi 0x18,1
0206 .dbline 164
0206 ; nop();
0206 0000 nop
0208 .dbline 165
0208 ; Set_SCLK();
0208 BA9A sbi 0x17,2
020A .dbline 165
020A C29A sbi 0x18,2
020C .dbline 166
020C ; nop();
020C 0000 nop
020E .dbline 167
020E ; nop();
020E 0000 nop
0210 .dbline 168
0210 ; Clr_SCLK();
0210 BA9A sbi 0x17,2
0212 .dbline 168
0212 C298 cbi 0x18,2
0214 .dbline 169
0214 ; nop();
0214 0000 nop
0216 .dbline 170
0216 ; Clr_SID();
0216 B99A sbi 0x17,1
0218 .dbline 170
0218 C198 cbi 0x18,1
021A .dbline 171
021A ; }
021A L37:
021A .dbline 172
021A L33:
021A .dbline 146
021A 6F5F subi R22,255 ; offset = 1
021C 7F4F sbci R23,255
021E L35:
021E .dbline 146
021E 6830 cpi R22,8
0220 E0E0 ldi R30,0
0222 7E07 cpc R23,R30
0224 C8F2 brlo L32
0226 .dbline -2
0226 L31:
0226 0E940000 xcall pop_gset3
022A .dbline 0 ; func end
022A 0895 ret
022C .dbsym r Temp_data 20 i
022C .dbsym r i 22 i
022C .dbsym r W_bits 10 i
022C .dbend
022C .dbfunc e Delay _Delay fV
022C ; i -> R20,R21
022C ; ms -> R16,R17
.even
022C _Delay::
022C 0E940000 xcall push_gset1
0230 .dbline -1
0230 .dbline 180
0230 ; }
0230 ; }
0230 ; /********************************************************************
0230 ; 函 数 名:Delay
0230 ; 入口参数:ms
0230 ; 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
0230 ; ********************************************************************/
0230 ; void Delay(uint ms)
0230 ; {
0230 09C0 xjmp L40
0232 L39:
0232 .dbline 183
0232 ; uint i;
0232 ; while(ms--)
0232 ; {
0232 .dbline 184
0232 ; for(i=1;i<(uint)(xtal*143-2);i++)
0232 41E0 ldi R20,1
0234 50E0 ldi R21,0
0236 02C0 xjmp L45
0238 L42:
0238 .dbline 185
0238 L43:
0238 .dbline 184
0238 4F5F subi R20,255 ; offset = 1
023A 5F4F sbci R21,255
023C L45:
023C .dbline 184
023C 4637 cpi R20,118
023E E4E0 ldi R30,4
0240 5E07 cpc R21,R30
0242 D0F3 brlo L42
0244 .dbline 186
0244 L40:
0244 .dbline 182
0244 1801 movw R2,R16
0246 0150 subi R16,1
0248 1040 sbci R17,0
024A 2220 tst R2
024C 91F7 brne L39
024E 3320 tst R3
0250 81F7 brne L39
0252 X1:
0252 .dbline -2
0252 L38:
0252 0E940000 xcall pop_gset1
0256 .dbline 0 ; func end
0256 0895 ret
0258 .dbsym r i 20 i
0258 .dbsym r ms 16 i
0258 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -