📄 1602.lis
字号:
006C 9598 cbi 0x12,5
006E .dbline 127
006E ; SET_LCD_RW;
006E 969A sbi 0x12,6
0070 .dbline 128
0070 ; CLR_LCD_E;
0070 9798 cbi 0x12,7
0072 .dbline 129
0072 ; CLR_LCD_E;
0072 9798 cbi 0x12,7
0074 .dbline 130
0074 ; CLR_LCD_E;
0074 9798 cbi 0x12,7
0076 .dbline 131
0076 ; CLR_LCD_E;
0076 9798 cbi 0x12,7
0078 .dbline 132
0078 ; SET_LCD_E;
0078 979A sbi 0x12,7
007A L7:
007A .dbline 133
007A ; while (LCM_Data1 & Busy); //检测忙信号
007A L8:
007A .dbline 133
007A B799 sbic 0x16,7
007C FECF rjmp L7
007E X1:
007E .dbline 134
007E ; DDRB=0xff;//变回输出
007E 8FEF ldi R24,255
0080 87BB out 0x17,R24
0082 .dbline 135
0082 ; return(LCM_Data1);
0082 06B3 in R16,0x16
0084 .dbline -2
0084 L6:
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbend
0086 .dbfunc e LCMInit _LCMInit fV
.even
0086 _LCMInit::
0086 .dbline -1
0086 .dbline 139
0086 ; }
0086 ;
0086 ; void LCMInit(void) //LCM初始化
0086 ; {
0086 .dbline 140
0086 ; LCM_Data = 0;
0086 2224 clr R2
0088 28BA out 0x18,R2
008A .dbline 141
008A ; WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
008A 2227 clr R18
008C 08E3 ldi R16,56
008E CADF xcall _WriteCommandLCM
0090 .dbline 142
0090 ; Delay5Ms();
0090 51D0 xcall _Delay5Ms
0092 .dbline 143
0092 ; WriteCommandLCM(0x38,0);
0092 2227 clr R18
0094 08E3 ldi R16,56
0096 C6DF xcall _WriteCommandLCM
0098 .dbline 144
0098 ; Delay5Ms();
0098 4DD0 xcall _Delay5Ms
009A .dbline 145
009A ; WriteCommandLCM(0x38,0);
009A 2227 clr R18
009C 08E3 ldi R16,56
009E C2DF xcall _WriteCommandLCM
00A0 .dbline 146
00A0 ; Delay5Ms();
00A0 49D0 xcall _Delay5Ms
00A2 .dbline 148
00A2 ;
00A2 ; WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
00A2 21E0 ldi R18,1
00A4 08E3 ldi R16,56
00A6 BEDF xcall _WriteCommandLCM
00A8 .dbline 149
00A8 ; WriteCommandLCM(0x08,1); //关闭显示
00A8 21E0 ldi R18,1
00AA 08E0 ldi R16,8
00AC BBDF xcall _WriteCommandLCM
00AE .dbline 150
00AE ; WriteCommandLCM(0x01,1); //显示清屏
00AE 21E0 ldi R18,1
00B0 01E0 ldi R16,1
00B2 B8DF xcall _WriteCommandLCM
00B4 .dbline 151
00B4 ; WriteCommandLCM(0x06,1); // 显示光标移动设置
00B4 21E0 ldi R18,1
00B6 06E0 ldi R16,6
00B8 B5DF xcall _WriteCommandLCM
00BA .dbline 152
00BA ; WriteCommandLCM(0x0C,1); // 显示开及光标设置
00BA 21E0 ldi R18,1
00BC 0CE0 ldi R16,12
00BE B2DF xcall _WriteCommandLCM
00C0 .dbline -2
00C0 L10:
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbend
00C2 .dbfunc e DisplayOneChar _DisplayOneChar fV
00C2 ; DData -> y+2
00C2 ; Y -> R22
00C2 ; X -> R20
.even
00C2 _DisplayOneChar::
00C2 4A93 st -y,R20
00C4 6A93 st -y,R22
00C6 622F mov R22,R18
00C8 402F mov R20,R16
00CA .dbline -1
00CA .dbline 157
00CA ; }
00CA ;
00CA ; //按指定位置显示一个字符
00CA ; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
00CA ; {
00CA .dbline 158
00CA ; Y &= 0x1;
00CA 6170 andi R22,1
00CC .dbline 159
00CC ; X &= 0xF; //限制X不能大于15,Y不能大于1
00CC 4F70 andi R20,15
00CE .dbline 160
00CE ; if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
00CE 6623 tst R22
00D0 09F0 breq L12
00D2 X2:
00D2 .dbline 160
00D2 4064 ori R20,64
00D4 L12:
00D4 .dbline 161
00D4 ; X |= 0x80; //算出指令码
00D4 4068 ori R20,128
00D6 .dbline 162
00D6 ; WriteCommandLCM(X, 1); //这里不检测忙信号,发送地址码
00D6 21E0 ldi R18,1
00D8 042F mov R16,R20
00DA A4DF xcall _WriteCommandLCM
00DC .dbline 163
00DC ; WriteDataLCM(DData);
00DC 0A81 ldd R16,y+2
00DE 90DF xcall _WriteDataLCM
00E0 .dbline 164
00E0 ; WriteCommandLCM(X, 0); //光标返回,调节时很重要
00E0 2227 clr R18
00E2 042F mov R16,R20
00E4 9FDF xcall _WriteCommandLCM
00E6 .dbline -2
00E6 L11:
00E6 .dbline 0 ; func end
00E6 6991 ld R22,y+
00E8 4991 ld R20,y+
00EA 0895 ret
00EC .dbsym l DData 2 c
00EC .dbsym r Y 22 c
00EC .dbsym r X 20 c
00EC .dbend
00EC .dbfunc e DisplayListChar _DisplayListChar fV
00EC ; ListLength -> R10
00EC ; DData -> R12,R13
00EC ; Y -> R22
00EC ; X -> R20
.even
00EC _DisplayListChar::
00EC 0E940000 xcall push_xgsetF03C
00F0 622F mov R22,R18
00F2 402F mov R20,R16
00F4 2197 sbiw R28,1
00F6 C984 ldd R12,y+9
00F8 DA84 ldd R13,y+10
00FA .dbline -1
00FA .dbline 169
00FA ; }
00FA ;
00FA ; //按指定位置显示一串字符
00FA ; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char const *DData)
00FA ; {
00FA .dbline 172
00FA ; unsigned char ListLength;
00FA ;
00FA ; ListLength = 0;
00FA AA24 clr R10
00FC .dbline 173
00FC ; Y &= 0x1;
00FC 6170 andi R22,1
00FE .dbline 174
00FE ; X &= 0xF; //限制X不能大于15,Y不能大于1
00FE 4F70 andi R20,15
0100 0EC0 xjmp L16
0102 L15:
0102 .dbline 176
0102 ; while (DData[ListLength]>0x20) //若到达字串尾则退出
0102 ; {
0102 .dbline 177
0102 ; if (X <= 0xF) //X坐标应小于0xF
0102 8FE0 ldi R24,15
0104 8417 cp R24,R20
0106 58F0 brlo L18
0108 X3:
0108 .dbline 178
0108 ; {
0108 .dbline 179
0108 ; DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
0108 EA2D mov R30,R10
010A FF27 clr R31
010C EC0D add R30,R12
010E FD1D adc R31,R13
0110 2490 lpm R2,Z
0112 2882 std y+0,R2
0114 262F mov R18,R22
0116 042F mov R16,R20
0118 D4DF xcall _DisplayOneChar
011A .dbline 180
011A ; ListLength++;
011A A394 inc R10
011C .dbline 181
011C ; X++;
011C 4395 inc R20
011E .dbline 182
011E ; }
011E L18:
011E .dbline 183
011E ; }
011E L16:
011E .dbline 175
011E EA2D mov R30,R10
0120 FF27 clr R31
0122 EC0D add R30,R12
0124 FD1D adc R31,R13
0126 2490 lpm R2,Z
0128 80E2 ldi R24,32
012A 8215 cp R24,R2
012C 50F3 brlo L15
012E X4:
012E .dbline -2
012E L14:
012E .dbline 0 ; func end
012E 2196 adiw R28,1
0130 0C940000 xjmp pop_xgsetF03C
0134 .dbsym r ListLength 10 c
0134 .dbsym r DData 12 pkc
0134 .dbsym r Y 22 c
0134 .dbsym r X 20 c
0134 .dbend
0134 .dbfunc e Delay5Ms _Delay5Ms fV
0134 ; TempCyc -> R16,R17
.even
0134 _Delay5Ms::
0134 .dbline -1
0134 .dbline 188
0134 ; }
0134 ;
0134 ; //5ms延时
0134 ; void Delay5Ms(void)
0134 ; {
0134 .dbline 189
0134 ; unsigned int TempCyc = 5552;
0134 00EB ldi R16,5552
0136 15E1 ldi R17,21
0138 L21:
0138 .dbline 190
0138 ; while(TempCyc--);
0138 L22:
0138 .dbline 190
0138 1801 movw R2,R16
013A 0150 subi R16,1
013C 1040 sbci R17,0
013E 2220 tst R2
0140 D9F7 brne L21
0142 3320 tst R3
0144 C9F7 brne L21
0146 X5:
0146 .dbline -2
0146 L20:
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r TempCyc 16 i
0148 .dbend
0148 .dbfunc e Delay400Ms _Delay400Ms fV
0148 ; TempCycA -> R16
0148 ; TempCycB -> R18,R19
.even
0148 _Delay400Ms::
0148 .dbline -1
0148 .dbline 195
0148 ; }
0148 ;
0148 ; //400ms延时
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -