📄 adc-1602.lis
字号:
010E ; }
010E ;
010E ; //写数据
010E ; void writedata(uchar data)
010E ; {
010E .dbline 84
010E ; busy();
010E 81DF xcall _busy
0110 .dbline 85
0110 ; s_ms(500);
0110 04EF ldi R16,500
0112 11E0 ldi R17,1
0114 75DF xcall _s_ms
0116 .dbline 86
0116 ; PORTA|=(1<<RS); //RS=1
0116 DD9A sbi 0x1b,5
0118 .dbline 87
0118 ; s_ms(500);
0118 04EF ldi R16,500
011A 11E0 ldi R17,1
011C 71DF xcall _s_ms
011E .dbline 88
011E ; PORTA&=~(1<<RW); //RW=0
011E DE98 cbi 0x1b,6
0120 .dbline 89
0120 ; s_ms(500);
0120 04EF ldi R16,500
0122 11E0 ldi R17,1
0124 6DDF xcall _s_ms
0126 .dbline 90
0126 ; PORTA|=(1<<EN); //EN=1
0126 DF9A sbi 0x1b,7
0128 .dbline 91
0128 ; s_ms(500);
0128 04EF ldi R16,500
012A 11E0 ldi R17,1
012C 69DF xcall _s_ms
012E .dbline 92
012E ; PORTD = data; //输出数据
012E A2BA out 0x12,R10
0130 .dbline 93
0130 ; s_ms(500);
0130 04EF ldi R16,500
0132 11E0 ldi R17,1
0134 65DF xcall _s_ms
0136 .dbline 94
0136 ; PORTA&=~(1<<EN); //EN=0
0136 DF98 cbi 0x1b,7
0138 .dbline 95
0138 ; s_ms(500);
0138 04EF ldi R16,500
013A 11E0 ldi R17,1
013C 61DF xcall _s_ms
013E .dbline -2
013E L12:
013E .dbline 0 ; func end
013E A990 ld R10,y+
0140 0895 ret
0142 .dbsym r data 10 c
0142 .dbend
0142 .dbfunc e readdata _readdata fc
0142 ; temp -> R10
.even
0142 _readdata::
0142 AA92 st -y,R10
0144 .dbline -1
0144 .dbline 101
0144 ; }
0144 ;
0144 ;
0144 ; //读数据
0144 ; uchar readdata(void)
0144 ; {
0144 .dbline 103
0144 ; uchar temp;
0144 ; busy();
0144 66DF xcall _busy
0146 .dbline 104
0146 ; s_ms(500);
0146 04EF ldi R16,500
0148 11E0 ldi R17,1
014A 5ADF xcall _s_ms
014C .dbline 105
014C ; PORTA|=(1<<RS); //RS=1
014C DD9A sbi 0x1b,5
014E .dbline 106
014E ; s_ms(500);
014E 04EF ldi R16,500
0150 11E0 ldi R17,1
0152 56DF xcall _s_ms
0154 .dbline 107
0154 ; PORTA|=(1<<RW); //RW=1
0154 DE9A sbi 0x1b,6
0156 .dbline 108
0156 ; s_ms(500);
0156 04EF ldi R16,500
0158 11E0 ldi R17,1
015A 52DF xcall _s_ms
015C .dbline 109
015C ; PORTA|=(1<<EN); //EN=1
015C DF9A sbi 0x1b,7
015E .dbline 110
015E ; s_ms(500);
015E 04EF ldi R16,500
0160 11E0 ldi R17,1
0162 4EDF xcall _s_ms
0164 .dbline 111
0164 ; DDRD=0x00; //A端口变输入
0164 2224 clr R2
0166 21BA out 0x11,R2
0168 .dbline 112
0168 ; s_ms(500);
0168 04EF ldi R16,500
016A 11E0 ldi R17,1
016C 49DF xcall _s_ms
016E .dbline 113
016E ; temp = PIND; //读A端口
016E A0B2 in R10,0x10
0170 .dbline 114
0170 ; s_ms(500);
0170 04EF ldi R16,500
0172 11E0 ldi R17,1
0174 45DF xcall _s_ms
0176 .dbline 115
0176 ; DDRD=0xff; //A端口变输出
0176 8FEF ldi R24,255
0178 81BB out 0x11,R24
017A .dbline 116
017A ; s_ms(500);
017A 04EF ldi R16,500
017C 11E0 ldi R17,1
017E 40DF xcall _s_ms
0180 .dbline 117
0180 ; PORTA&=~(1<<EN); //EN=0
0180 DF98 cbi 0x1b,7
0182 .dbline 118
0182 ; s_ms(500);
0182 04EF ldi R16,500
0184 11E0 ldi R17,1
0186 3CDF xcall _s_ms
0188 .dbline 119
0188 ; return temp;
0188 0A2D mov R16,R10
018A .dbline -2
018A L13:
018A .dbline 0 ; func end
018A A990 ld R10,y+
018C 0895 ret
018E .dbsym r temp 10 c
018E .dbend
018E .dbfunc e WriteCGRAM _WriteCGRAM fV
018E ; t -> R10,R11
018E ; i -> R20,R21
018E ; pBuffer -> R22,R23
018E ; num -> R10,R11
.even
018E _WriteCGRAM::
018E 0E940000 xcall push_xgsetF00C
0192 B901 movw R22,R18
0194 5801 movw R10,R16
0196 .dbline -1
0196 .dbline 129
0196 ; }
0196 ;
0196 ; //=================================================
0196 ; // 描述: 写LCD内部CGRAM函数
0196 ; // 入口: ‘num’要写的数据个数
0196 ; // ‘pbuffer’要写的数据的首地址
0196 ; // 出口: 无
0196 ; //================================================
0196 ; void WriteCGRAM(uint num, const uint *pBuffer)
0196 ; {
0196 .dbline 131
0196 ; uint i,t;
0196 ; writecom(0x40);
0196 00E4 ldi R16,64
0198 67DF xcall _writecom
019A .dbline 132
019A ; PORTA|=(1<<RS);
019A DD9A sbi 0x1b,5
019C .dbline 133
019C ; PORTA&=~(1<<RW);
019C DE98 cbi 0x1b,6
019E .dbline 134
019E ; for(i=num;i!=0;i--)
019E A501 movw R20,R10
01A0 0AC0 xjmp L18
01A2 L15:
01A2 .dbline 135
01A2 ; {
01A2 .dbline 136
01A2 ; t = *pBuffer;
01A2 FB01 movw R30,R22
01A4 A790 elpm R10,Z+
01A6 B690 elpm R11,Z
01A8 .dbline 137
01A8 ; PORTA|=(1<<EN);
01A8 DF9A sbi 0x1b,7
01AA .dbline 138
01AA ; PORTD = t;
01AA A2BA out 0x12,R10
01AC .dbline 139
01AC ; PORTA&=~(1<<EN);
01AC DF98 cbi 0x1b,7
01AE .dbline 140
01AE ; pBuffer++;
01AE 6E5F subi R22,254 ; offset = 2
01B0 7F4F sbci R23,255
01B2 .dbline 141
01B2 ; }
01B2 L16:
01B2 .dbline 134
01B2 4150 subi R20,1
01B4 5040 sbci R21,0
01B6 L18:
01B6 .dbline 134
01B6 4030 cpi R20,0
01B8 4507 cpc R20,R21
01BA 99F7 brne L15
01BC X2:
01BC .dbline -2
01BC L14:
01BC .dbline 0 ; func end
01BC 0C940000 xjmp pop_xgsetF00C
01C0 .dbsym r t 10 i
01C0 .dbsym r i 20 i
01C0 .dbsym r pBuffer 22 pki
01C0 .dbsym r num 10 i
01C0 .dbend
01C0 .dbfunc e WriteMenu _WriteMenu fV
01C0 ; t -> R10
01C0 ; i -> R22
01C0 ; pBuffer -> R20,R21
.even
01C0 _WriteMenu::
01C0 0E940000 xcall push_xgsetF00C
01C4 A801 movw R20,R16
01C6 .dbline -1
01C6 .dbline 151
01C6 ;
01C6 ; }
01C6 ;
01C6 ; //=================================================
01C6 ; //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
01C6 ; //入口:菜单数组首地址
01C6 ; //出口:无
01C6 ; //=================================================
01C6 ; void WriteMenu(const uchar *pBuffer)
01C6 ; {
01C6 .dbline 153
01C6 ; uchar i,t;
01C6 ; writecom(0x80); //数据地址
01C6 00E8 ldi R16,128
01C8 4FDF xcall _writecom
01CA .dbline 155
01CA ;
01CA ; PORTA|=(1<<RS);
01CA DD9A sbi 0x1b,5
01CC .dbline 156
01CC ; PORTA&=~(1<<RW);
01CC DE98 cbi 0x1b,6
01CE .dbline 157
01CE ; s_ms(50);
01CE 02E3 ldi R16,50
01D0 10E0 ldi R17,0
01D2 16DF xcall _s_ms
01D4 .dbline 158
01D4 ; for(i=0;i<16;i++)
01D4 6627 clr R22
01D6 0BC0 xjmp L23
01D8 L20:
01D8 .dbline 159
01D8 ; {
01D8 .dbline 160
01D8 ; t = *pBuffer;
01D8 FA01 movw R30,R20
01DA A690 elpm R10,Z
01DC .dbline 161
01DC ; PORTD = t;
01DC A2BA out 0x12,R10
01DE .dbline 162
01DE ; PORTA|=(1<<EN);
01DE DF9A sbi 0x1b,7
01E0 .dbline 163
01E0 ; s_ms(50);
01E0 02E3 ldi R16,50
01E2 10E0 ldi R17,0
01E4 0DDF xcall _s_ms
01E6 .dbline 164
01E6 ; PORTA&=~(1<<EN);
01E6 DF98 cbi 0x1b,7
01E8 .dbline 165
01E8 ; pBuffer++;
01E8 4F5F subi R20,255 ; offset = 1
01EA 5F4F sbci R21,255
01EC .dbline 166
01EC ; }
01EC L21:
01EC .dbline 158
01EC 6395 inc R22
01EE L23:
01EE .dbline 158
01EE 6031 cpi R22,16
01F0 98F3 brlo L20
01F2 X3:
01F2 .dbline 167
01F2 ; writecom(0xC0);
01F2 00EC ldi R16,192
01F4 39DF xcall _writecom
01F6 .dbline 169
01F6 ;
01F6 ; PORTA|=(1<<RS);
01F6 DD9A sbi 0x1b,5
01F8 .dbline 170
01F8 ; PORTA&=~(1<<RW);
01F8 DE98 cbi 0x1b,6
01FA .dbline 171
01FA ; s_ms(50);
01FA 02E3 ldi R16,50
01FC 10E0 ldi R17,0
01FE 00DF xcall _s_ms
0200 .dbline 172
0200 ; for(i=0;i<16;i++)
0200 6627 clr R22
0202 0BC0 xjmp L27
0204 L24:
0204 .dbline 173
0204 ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -