📄 1602_main.lis
字号:
0102 04E1 ldi R16,20
0104 10E0 ldi R17,0
0106 7CDF xcall _s_ms
0108 .dbline 85
0108 ; PORTB|=(1<<EN); //EN=1
0108 C79A sbi 0x18,7
010A .dbline 86
010A ; s_ms(20);
010A 04E1 ldi R16,20
010C 10E0 ldi R17,0
010E 78DF xcall _s_ms
0110 .dbline 87
0110 ; PORTA = data; //输出数据
0110 ABBA out 0x1b,R10
0112 .dbline 88
0112 ; s_ms(20);
0112 04E1 ldi R16,20
0114 10E0 ldi R17,0
0116 74DF xcall _s_ms
0118 .dbline 89
0118 ; PORTB&=~(1<<EN); //EN=0
0118 C798 cbi 0x18,7
011A .dbline 90
011A ; s_ms(20);
011A 04E1 ldi R16,20
011C 10E0 ldi R17,0
011E 70DF xcall _s_ms
0120 .dbline -2
0120 L12:
0120 .dbline 0 ; func end
0120 A990 ld R10,y+
0122 0895 ret
0124 .dbsym r data 10 c
0124 .dbend
0124 .dbfunc e readdata _readdata fc
0124 ; temp -> R10
.even
0124 _readdata::
0124 AA92 st -y,R10
0126 .dbline -1
0126 .dbline 96
0126 ; }
0126 ;
0126 ;
0126 ; //读数据
0126 ; uchar readdata(void)
0126 ; {
0126 .dbline 98
0126 ; uchar temp;
0126 ; busy();
0126 75DF xcall _busy
0128 .dbline 99
0128 ; s_ms(20);
0128 04E1 ldi R16,20
012A 10E0 ldi R17,0
012C 69DF xcall _s_ms
012E .dbline 100
012E ; PORTB|=(1<<RS); //RS=1
012E C59A sbi 0x18,5
0130 .dbline 101
0130 ; s_ms(20);
0130 04E1 ldi R16,20
0132 10E0 ldi R17,0
0134 65DF xcall _s_ms
0136 .dbline 102
0136 ; PORTB|=(1<<RW); //RW=1
0136 C69A sbi 0x18,6
0138 .dbline 103
0138 ; s_ms(20);
0138 04E1 ldi R16,20
013A 10E0 ldi R17,0
013C 61DF xcall _s_ms
013E .dbline 104
013E ; PORTB|=(1<<EN); //EN=1
013E C79A sbi 0x18,7
0140 .dbline 105
0140 ; s_ms(20);
0140 04E1 ldi R16,20
0142 10E0 ldi R17,0
0144 5DDF xcall _s_ms
0146 .dbline 106
0146 ; DDRA=0x00; //A端口变输入
0146 2224 clr R2
0148 2ABA out 0x1a,R2
014A .dbline 107
014A ; s_ms(20);
014A 04E1 ldi R16,20
014C 10E0 ldi R17,0
014E 58DF xcall _s_ms
0150 .dbline 108
0150 ; temp = PINA; //读A端口
0150 A9B2 in R10,0x19
0152 .dbline 109
0152 ; s_ms(20);
0152 04E1 ldi R16,20
0154 10E0 ldi R17,0
0156 54DF xcall _s_ms
0158 .dbline 110
0158 ; DDRA=0xff; //A端口变输出
0158 8FEF ldi R24,255
015A 8ABB out 0x1a,R24
015C .dbline 111
015C ; s_ms(20);
015C 04E1 ldi R16,20
015E 10E0 ldi R17,0
0160 4FDF xcall _s_ms
0162 .dbline 112
0162 ; PORTB&=~(1<<EN); //EN=0
0162 C798 cbi 0x18,7
0164 .dbline 113
0164 ; s_ms(20);
0164 04E1 ldi R16,20
0166 10E0 ldi R17,0
0168 4BDF xcall _s_ms
016A .dbline 114
016A ; return temp;
016A 0A2D mov R16,R10
016C .dbline -2
016C L13:
016C .dbline 0 ; func end
016C A990 ld R10,y+
016E 0895 ret
0170 .dbsym r temp 10 c
0170 .dbend
0170 .dbfunc e WriteCGRAM _WriteCGRAM fV
0170 ; t -> R10,R11
0170 ; i -> R20,R21
0170 ; pBuffer -> R22,R23
0170 ; num -> R10,R11
.even
0170 _WriteCGRAM::
0170 0E940000 xcall push_xgsetF00C
0174 B901 movw R22,R18
0176 5801 movw R10,R16
0178 .dbline -1
0178 .dbline 124
0178 ; }
0178 ;
0178 ; //=================================================
0178 ; // 描述: 写LCD内部CGRAM函数
0178 ; // 入口: ‘num’要写的数据个数
0178 ; // ‘pbuffer’要写的数据的首地址
0178 ; // 出口: 无
0178 ; //================================================
0178 ; void WriteCGRAM(uint num, const uint *pBuffer)
0178 ; {
0178 .dbline 126
0178 ; uint i,t;
0178 ; writecom(0x40);
0178 00E4 ldi R16,64
017A 73DF xcall _writecom
017C .dbline 127
017C ; PORTB|=(1<<RS);
017C C59A sbi 0x18,5
017E .dbline 128
017E ; PORTB&=~(1<<RW);
017E C698 cbi 0x18,6
0180 .dbline 129
0180 ; for(i=num;i!=0;i--)
0180 A501 movw R20,R10
0182 0AC0 xjmp L18
0184 L15:
0184 .dbline 130
0184 ; {
0184 .dbline 131
0184 ; t = *pBuffer;
0184 FB01 movw R30,R22
0186 A590 lpm R10,Z+
0188 B490 lpm R11,Z
018A .dbline 132
018A ; PORTB|=(1<<EN);
018A C79A sbi 0x18,7
018C .dbline 133
018C ; PORTA = t;
018C ABBA out 0x1b,R10
018E .dbline 134
018E ; PORTB&=~(1<<EN);
018E C798 cbi 0x18,7
0190 .dbline 135
0190 ; pBuffer++;
0190 6E5F subi R22,254 ; offset = 2
0192 7F4F sbci R23,255
0194 .dbline 136
0194 ; }
0194 L16:
0194 .dbline 129
0194 4150 subi R20,1
0196 5040 sbci R21,0
0198 L18:
0198 .dbline 129
0198 4030 cpi R20,0
019A 4507 cpc R20,R21
019C 99F7 brne L15
019E X2:
019E .dbline -2
019E L14:
019E .dbline 0 ; func end
019E 0C940000 xjmp pop_xgsetF00C
01A2 .dbsym r t 10 i
01A2 .dbsym r i 20 i
01A2 .dbsym r pBuffer 22 pki
01A2 .dbsym r num 10 i
01A2 .dbend
01A2 .dbfunc e WriteMenu _WriteMenu fV
01A2 ; t -> R10
01A2 ; i -> R22
01A2 ; pBuffer -> R20,R21
.even
01A2 _WriteMenu::
01A2 0E940000 xcall push_xgsetF00C
01A6 A801 movw R20,R16
01A8 .dbline -1
01A8 .dbline 146
01A8 ;
01A8 ; }
01A8 ;
01A8 ; //=================================================
01A8 ; //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
01A8 ; //入口:菜单数组首地址
01A8 ; //出口:无
01A8 ; //=================================================
01A8 ; void WriteMenu(const uchar *pBuffer)
01A8 ; {
01A8 .dbline 148
01A8 ; uchar i,t;
01A8 ; writecom(0x80); //数据地址
01A8 00E8 ldi R16,128
01AA 5BDF xcall _writecom
01AC .dbline 150
01AC ;
01AC ; PORTB|=(1<<RS);
01AC C59A sbi 0x18,5
01AE .dbline 151
01AE ; PORTB&=~(1<<RW);
01AE C698 cbi 0x18,6
01B0 .dbline 152
01B0 ; s_ms(20);
01B0 04E1 ldi R16,20
01B2 10E0 ldi R17,0
01B4 25DF xcall _s_ms
01B6 .dbline 153
01B6 ; for(i=0;i<16;i++)
01B6 6627 clr R22
01B8 0BC0 xjmp L23
01BA L20:
01BA .dbline 154
01BA ; {
01BA .dbline 155
01BA ; t = *pBuffer;
01BA FA01 movw R30,R20
01BC A490 lpm R10,Z
01BE .dbline 156
01BE ; PORTA = t;
01BE ABBA out 0x1b,R10
01C0 .dbline 157
01C0 ; PORTB|=(1<<EN);
01C0 C79A sbi 0x18,7
01C2 .dbline 158
01C2 ; s_ms(20);
01C2 04E1 ldi R16,20
01C4 10E0 ldi R17,0
01C6 1CDF xcall _s_ms
01C8 .dbline 159
01C8 ; PORTB&=~(1<<EN);
01C8 C798 cbi 0x18,7
01CA .dbline 160
01CA ; pBuffer++;
01CA 4F5F subi R20,255 ; offset = 1
01CC 5F4F sbci R21,255
01CE .dbline 161
01CE ; }
01CE L21:
01CE .dbline 153
01CE 6395 inc R22
01D0 L23:
01D0 .dbline 153
01D0 6031 cpi R22,16
01D2 98F3 brlo L20
01D4 X3:
01D4 .dbline 162
01D4 ; writecom(0xC0);
01D4 00EC ldi R16,192
01D6 45DF xcall _writecom
01D8 .dbline 164
01D8 ;
01D8 ; PORTB|=(1<<RS);
01D8 C59A sbi 0x18,5
01DA .dbline 165
01DA ; PORTB&=~(1<<RW);
01DA C698 cbi 0x18,6
01DC .dbline 166
01DC ; s_ms(20);
01DC 04E1 ldi R16,20
01DE 10E0 ldi R17,0
01E0 0FDF xcall _s_ms
01E2 .dbline 167
01E2 ; for(i=0;i<16;i++)
01E2 6627 clr R22
01E4 0BC0 xjmp L27
01E6 L24:
01E6 .dbline 168
01E6 ; {
01E6 .dbline 169
01E6 ; t = *pBuffer;
01E6 FA01 movw R30,R20
01E8 A490 lpm R10,Z
01EA .dbline 170
01EA ; PORTA = t;
01EA ABBA out 0x1b,R10
01EC .dbline 171
01EC ; PORTB|=(1<<EN);
01EC C79A sbi 0x18,7
01EE .dbline 172
01EE ; s_ms(20);
01EE 04E1 ldi R16,20
01F0 10E0 ldi R17,0
01F2 06DF xcall _s_ms
01F4 .dbline 173
01F4 ; PORTB&=~(1<<EN);
01F4 C798 cbi 0x18,7
01F6 .dbline 174
01F6 ; pBuffer++;
01F6 4F5F subi R20,255 ; offset = 1
01F8 5F4F sbci R21,255
01FA .dbline 175
01FA ; }
01FA L25:
01FA .dbline 167
01FA 6395 inc R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -