📄 lm1602.lis
字号:
00E6 ; byte setData = 0x08;
00E6 48E0 ldi R20,8
00E8 .dbline 112
00E8 ;
00E8 ; if (allDis == 1) //所有都显示
00E8 8A2D mov R24,R10
00EA 8130 cpi R24,1
00EC 11F4 brne L24
00EE .dbline 113
00EE ; setData |= 0x04;
00EE 4460 ori R20,4
00F0 01C0 xjmp L25
00F2 L24:
00F2 .dbline 115
00F2 ; else //都不显示
00F2 ; setData &= ~0x04;
00F2 4B7F andi R20,251
00F4 L25:
00F4 .dbline 117
00F4 ;
00F4 ; if (curDis == 1) //光标显示
00F4 6130 cpi R22,1
00F6 11F4 brne L26
00F8 .dbline 118
00F8 ; setData |= 0x02;
00F8 4260 ori R20,2
00FA 01C0 xjmp L27
00FC L26:
00FC .dbline 120
00FC ; else //光标不显示
00FC ; setData &= ~0x02;
00FC 4D7F andi R20,253
00FE L27:
00FE .dbline 122
00FE ;
00FE ; if (curFlash == 1) //光标闪烁
00FE 8E81 ldd R24,y+6
0100 8130 cpi R24,1
0102 11F4 brne L28
0104 .dbline 123
0104 ; setData |= 0x01;
0104 4160 ori R20,1
0106 01C0 xjmp L29
0108 L28:
0108 .dbline 125
0108 ; else ///光标不闪烁
0108 ; setData &= ~0x01;
0108 4E7F andi R20,254
010A L29:
010A .dbline 126
010A ; WriteCmd(setData);
010A 042F mov R16,R20
010C A1DF xcall _WriteCmd
010E .dbline -2
010E L23:
010E 0E940000 xcall pop_gset3
0112 .dbline 0 ; func end
0112 0895 ret
0114 .dbsym r setData 20 c
0114 .dbsym l curFlash 6 c
0114 .dbsym r curDis 22 c
0114 .dbsym r allDis 10 c
0114 .dbend
0114 .dbfunc e SetFunction _SetFunction fV
0114 ; setData -> R20
0114 ; fDis -> y+6
0114 ; lineDis -> R22
0114 ; numBus -> R10
.even
0114 _SetFunction::
0114 0E940000 xcall push_gset3
0118 622F mov R22,R18
011A A02E mov R10,R16
011C .dbline -1
011C .dbline 146
011C ; }
011C ; /*
011C ; void SetShift(byte cMove, byte cDir)
011C ; {
011C ; byte setData = 0x10;
011C ;
011C ; if (cMove == 1) //移动文字
011C ; setData |= 0x08;
011C ; else //移动光标
011C ; setData &= ~0x08;
011C ;
011C ; if (cDir == 1) //右移
011C ; setData |= 0x04;
011C ; else //左移
011C ; setData &= ~0x04;
011C ; WriteCmd(setData);
011C ; }
011C ; */
011C ; void SetFunction(byte numBus, byte lineDis, byte fDis)
011C ; {
011C .dbline 147
011C ; byte setData = 0x20;
011C 40E2 ldi R20,32
011E .dbline 149
011E ;
011E ; if (numBus == 1) //4位总线
011E 8A2D mov R24,R10
0120 8130 cpi R24,1
0122 11F4 brne L31
0124 .dbline 150
0124 ; setData |= 0x10;
0124 4061 ori R20,16
0126 01C0 xjmp L32
0128 L31:
0128 .dbline 152
0128 ; else //8位总线
0128 ; setData &= ~0x10;
0128 4F7E andi R20,239
012A L32:
012A .dbline 154
012A ;
012A ; if (lineDis == 1) //双行显示
012A 6130 cpi R22,1
012C 11F4 brne L33
012E .dbline 155
012E ; setData |= 0x08;
012E 4860 ori R20,8
0130 01C0 xjmp L34
0132 L33:
0132 .dbline 157
0132 ; else //单行显示
0132 ; setData &= ~0x08;
0132 477F andi R20,247
0134 L34:
0134 .dbline 159
0134 ;
0134 ; if (fDis == 1) //5*10点阵
0134 8E81 ldd R24,y+6
0136 8130 cpi R24,1
0138 11F4 brne L35
013A .dbline 160
013A ; setData |= 0x04;
013A 4460 ori R20,4
013C 01C0 xjmp L36
013E L35:
013E .dbline 162
013E ; else ///5*7点阵
013E ; setData &= ~0x04;
013E 4B7F andi R20,251
0140 L36:
0140 .dbline 163
0140 ; WriteCmd(setData);
0140 042F mov R16,R20
0142 86DF xcall _WriteCmd
0144 .dbline -2
0144 L30:
0144 0E940000 xcall pop_gset3
0148 .dbline 0 ; func end
0148 0895 ret
014A .dbsym r setData 20 c
014A .dbsym l fDis 6 c
014A .dbsym r lineDis 22 c
014A .dbsym r numBus 10 c
014A .dbend
014A .dbfunc e SetDisAddr _SetDisAddr fV
014A ; ucol -> R20
014A ; urow -> R22
.even
014A _SetDisAddr::
014A 0E940000 xcall push_gset2
014E 422F mov R20,R18
0150 602F mov R22,R16
0152 .dbline -1
0152 .dbline 174
0152 ; }
0152 ; /*
0152 ; void SetCGRAMAddr(byte ramAddr)
0152 ; {
0152 ; byte setData = 0x40;
0152 ; setData |= (ramAddr &0x3f);
0152 ; WriteCmd(setData);
0152 ; }
0152 ; */
0152 ; void SetDisAddr(byte urow, byte ucol)
0152 ; {
0152 .dbline 175
0152 ; if (ucol >= 20)
0152 4431 cpi R20,20
0154 08F0 brlo L38
0156 .dbline 176
0156 ; ucol= 20;
0156 44E1 ldi R20,20
0158 L38:
0158 .dbline 177
0158 ; if (urow == 0)
0158 6623 tst R22
015A 21F4 brne L40
015C .dbline 178
015C ; WriteCmd( 0x80+ucol);
015C 042F mov R16,R20
015E 0058 subi R16,128 ; addi 128
0160 77DF xcall _WriteCmd
0162 03C0 xjmp L41
0164 L40:
0164 .dbline 180
0164 042F mov R16,R20
0166 0054 subi R16,64 ; addi 192
0168 73DF xcall _WriteCmd
016A L41:
016A .dbline -2
016A L37:
016A 0E940000 xcall pop_gset2
016E .dbline 0 ; func end
016E 0895 ret
0170 .dbsym r ucol 20 c
0170 .dbsym r urow 22 c
0170 .dbend
0170 .dbfunc e DisCGRAM _DisCGRAM fV
0170 ; ch -> y+4
0170 ; ucol -> R22
0170 ; urow -> R20
.even
0170 _DisCGRAM::
0170 0E940000 xcall push_gset2
0174 622F mov R22,R18
0176 402F mov R20,R16
0178 .dbline -1
0178 .dbline 184
0178 ; else
0178 ; WriteCmd( 0xc0+ucol);
0178 ; }
0178 ;
0178 ; void DisCGRAM(byte urow, byte ucol, char ch)
0178 ; {
0178 .dbline 185
0178 ; SetDisAddr(urow, ucol);
0178 262F mov R18,R22
017A 042F mov R16,R20
017C E6DF xcall _SetDisAddr
017E .dbline 186
017E ; WriteData(ch);
017E 0C81 ldd R16,y+4
0180 73DF xcall _WriteData
0182 .dbline -2
0182 L42:
0182 0E940000 xcall pop_gset2
0186 .dbline 0 ; func end
0186 0895 ret
0188 .dbsym l ch 4 c
0188 .dbsym r ucol 22 c
0188 .dbsym r urow 20 c
0188 .dbend
0188 .dbfunc e DisString _DisString fV
0188 ; i -> R20
0188 ; str -> R22,R23
0188 ; ucol -> R12
0188 ; urow -> R10
.even
0188 _DisString::
0188 0E940000 xcall push_gset4
018C C22E mov R12,R18
018E A02E mov R10,R16
0190 6885 ldd R22,y+8
0192 7985 ldd R23,y+9
0194 .dbline -1
0194 .dbline 196
0194 ; }
0194 ; /*
0194 ; void DisChar(byte row, byte line, char ch)
0194 ; {
0194 ; SetDisAddr(row, line);
0194 ; WriteData(ch);
0194 ; }
0194 ; */
0194 ; void DisString(byte urow, byte ucol, char *str)
0194 ; {
0194 .dbline 197
0194 ; byte i = 0;
0194 4427 clr R20
0196 .dbline 199
0196 ;
0196 ; SetDisAddr(urow, ucol);
0196 2C2D mov R18,R12
0198 0A2D mov R16,R10
019A D7DF xcall _SetDisAddr
019C 07C0 xjmp L45
019E L44:
019E .dbline 201
019E .dbline 202
019E E42F mov R30,R20
01A0 FF27 clr R31
01A2 E60F add R30,R22
01A4 F71F adc R31,R23
01A6 0081 ldd R16,z+0
01A8 5FDF xcall _WriteData
01AA .dbline 203
01AA 4395 inc R20
01AC .dbline 204
01AC L45:
01AC .dbline 200
01AC ; while (i < strlen(str))
01AC 8B01 movw R16,R22
01AE 0E940000 xcall _strlen
01B2 242E mov R2,R20
01B4 3324 clr R3
01B6 2016 cp R2,R16
01B8 3106 cpc R3,R17
01BA 88F3 brlo L44
01BC .dbline -2
01BC L43:
01BC 0E940000 xcall pop_gset4
01C0 .dbline 0 ; func end
01C0 0895 ret
01C2 .dbsym r i 20 c
01C2 .dbsym r str 22 pc
01C2 .dbsym r ucol 12 c
01C2 .dbsym r urow 10 c
01C2 .dbend
01C2 .dbfunc e DisNum _DisNum fV
01C2 ; num -> y+4
01C2 ; ucol -> R22
01C2 ; urow -> R20
.even
01C2 _DisNum::
01C2 0E940000 xcall push_gset2
01C6 622F mov R22,R18
01C8 402F mov R20,R16
01CA .dbline -1
01CA .dbline 209
01CA ; {
01CA ; WriteData(*(str + i));
01CA ; i++;
01CA ; }
01CA ; }
01CA ;
01CA ;
01CA ; void DisNum(byte urow, byte ucol, byte num)
01CA ; {
01CA .dbline 210
01CA ; SetDisAddr(urow, ucol);
01CA 262F mov R18,R22
01CC 042F mov R16,R20
01CE BDDF xcall _SetDisAddr
01D0 .dbline 211
01D0 ; WriteData('0'+ num);
01D0 0C81 ldd R16,y+4
01D2 005D subi R16,208 ; addi 48
01D4 49DF xcall _WriteData
01D6 .dbline -2
01D6 L47:
01D6 0E940000 xcall pop_gset2
01DA .dbline 0 ; func end
01DA 0895 ret
01DC .dbsym l num 4 c
01DC .dbsym r ucol 22 c
01DC .dbsym r urow 20 c
01DC .dbend
01DC .dbfunc e DisplayTime _DisplayTime fV
01DC ; second -> y+6
01DC ; minute -> R20
01DC ; hour -> R22
.even
01DC _DisplayTime::
01DC 0E940000 xcall push_gset2
01E0 422F mov R20,R18
01E2 602F mov R22,R16
01E4 2297 sbiw R28,2
01E6 .dbline -1
01E6 .dbline 216
01E6 ; }
01E6 ;
01E6 ;
01E6 ; void DisplayTime(byte hour,byte minute,byte second)
01E6 ; {
01E6 .dbline 217
01E6 ; DisNum(1, 3, hour/16);
01E6 862F mov R24,R22
01E8 8295 swap R24
01EA 8F70 andi R24,#0x0F
01EC 8883 std y+0,R24
01EE 23E0 ldi R18,3
01F0 01E0 ldi R16,1
01F2 E7DF xcall _DisNum
01F4 .dbline 218
01F4 ; DisNum(1, 4, hour%16);
01F4 10E1 ldi R17,16
01F6 062F mov R16,R22
01F8 0E940000 xcall mod8u
01FC 0883 std y+0,R16
01FE 24E0 ldi R18,4
0200 01E0 ldi R16,1
0202 DFDF xcall _DisNum
0204 .dbline 219
0204 ; DisString(1, 5,":");
0204 80E0 ldi R24,<L49
0206 90E0 ldi R25,>L49
0208 9983 std y+1,R25
020A 8883 std y+0,R24
020C 25E0 ldi R18,5
020E 01E0 ldi R16,1
0210 BBDF xcall _DisString
0212 .dbline 220
0212 ; DisNum(1, 6, minute/16);
0212 842F mov R24,R20
0214 8295 swap R24
0216 8F70 andi R24,#0x0F
0218 8883 std y+0,R24
021A 26E0 ldi R18,6
021C 01E0 ldi R16,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -