📄 adc.lst
字号:
15A 9380 0065 STS 0x0065,R24
(0108) s_ms(500);
15C EF04 LDI R16,0xF4
15D E011 LDI R17,1
15E DF16 RCALL _s_ms
(0109) DDRA=0x00; //A端口变输入
15F 2422 CLR R2
160 BA2A OUT 0x1A,R2
(0110) s_ms(500);
161 EF04 LDI R16,0xF4
162 E011 LDI R17,1
163 DF11 RCALL _s_ms
(0111) temp = PINA; //读A端口
164 B2A9 IN R10,0x19
(0112) s_ms(500);
165 EF04 LDI R16,0xF4
166 E011 LDI R17,1
167 DF0D RCALL _s_ms
(0113) DDRA=0xff; //A端口变输出
168 EF8F LDI R24,0xFF
169 BB8A OUT 0x1A,R24
(0114) s_ms(500);
16A EF04 LDI R16,0xF4
16B E011 LDI R17,1
16C DF08 RCALL _s_ms
(0115) PORTG&=~(1<<EN); //EN=0
16D 9180 0065 LDS R24,0x0065
16F 7F8B ANDI R24,0xFB
170 9380 0065 STS 0x0065,R24
(0116) s_ms(500);
172 EF04 LDI R16,0xF4
173 E011 LDI R17,1
174 DF00 RCALL _s_ms
(0117) return temp;
175 2D0A MOV R16,R10
176 90A9 LD R10,Y+
177 9508 RET
_WriteCGRAM:
t --> R10
i --> R20
pBuffer --> R22
num --> R10
178 940E 0343 CALL push_xgsetF00C
17A 01B9 MOVW R22,R18
17B 0158 MOVW R10,R16
(0118) }
(0119)
(0120) //=================================================
(0121) // 描述: 写LCD内部CGRAM函数
(0122) // 入口: ‘num’要写的数据个数
(0123) // ‘pbuffer’要写的数据的首地址
(0124) // 出口: 无
(0125) //================================================
(0126) void WriteCGRAM(uint num, const uint *pBuffer)
(0127) {
(0128) uint i,t;
(0129) writecom(0x40);
17C E400 LDI R16,0x40
17D DF3B RCALL _writecom
(0130) PORTG|=(1<<RS);
17E 9180 0065 LDS R24,0x0065
180 6081 ORI R24,1
181 9380 0065 STS 0x0065,R24
(0131) PORTG&=~(1<<RW);
183 9180 0065 LDS R24,0x0065
185 7F8D ANDI R24,0xFD
186 9380 0065 STS 0x0065,R24
(0132) for(i=num;i!=0;i--)
188 01A5 MOVW R20,R10
189 C012 RJMP 0x019C
(0133) {
(0134) t = *pBuffer;
18A 01FB MOVW R30,R22
18B 90A7 ELPM R10,Z+
18C 90B6 ELPM R11,18(Z)
(0135) PORTG|=(1<<EN);
18D 9180 0065 LDS R24,0x0065
18F 6084 ORI R24,4
190 9380 0065 STS 0x0065,R24
(0136) PORTA = t;
192 BAAB OUT 0x1B,R10
(0137) PORTG&=~(1<<EN);
193 9180 0065 LDS R24,0x0065
195 7F8B ANDI R24,0xFB
196 9380 0065 STS 0x0065,R24
(0138) pBuffer++;
198 5F6E SUBI R22,0xFE
199 4F7F SBCI R23,0xFF
19A 5041 SUBI R20,1
19B 4050 SBCI R21,0
19C 3040 CPI R20,0
19D 0745 CPC R20,R21
19E F759 BNE 0x018A
19F 940C 034A JMP pop_xgsetF00C
_WriteMenu:
t --> R10
i --> R22
pBuffer --> R20
1A1 940E 0343 CALL push_xgsetF00C
1A3 01A8 MOVW R20,R16
(0139) }
(0140)
(0141) }
(0142)
(0143) //=================================================
(0144) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0145) //入口:菜单数组首地址
(0146) //出口:无
(0147) //=================================================
(0148) void WriteMenu(const uchar *pBuffer)
(0149) {
(0150) uchar i,t;
(0151) writecom(0x80); //数据地址
1A4 E800 LDI R16,0x80
1A5 DF13 RCALL _writecom
(0152)
(0153) PORTG|=(1<<RS);
1A6 9180 0065 LDS R24,0x0065
1A8 6081 ORI R24,1
1A9 9380 0065 STS 0x0065,R24
(0154) PORTG&=~(1<<RW);
1AB 9180 0065 LDS R24,0x0065
1AD 7F8D ANDI R24,0xFD
1AE 9380 0065 STS 0x0065,R24
(0155) s_ms(50);
1B0 E302 LDI R16,0x32
1B1 E010 LDI R17,0
1B2 DEC2 RCALL _s_ms
(0156) for(i=0;i<16;i++)
1B3 2766 CLR R22
1B4 C013 RJMP 0x01C8
(0157) {
(0158) t = *pBuffer;
1B5 01FA MOVW R30,R20
1B6 90A6 ELPM R10,19(Z)
(0159) PORTA = t;
1B7 BAAB OUT 0x1B,R10
(0160) PORTG|=(1<<EN);
1B8 9180 0065 LDS R24,0x0065
1BA 6084 ORI R24,4
1BB 9380 0065 STS 0x0065,R24
(0161) s_ms(50);
1BD E302 LDI R16,0x32
1BE E010 LDI R17,0
1BF DEB5 RCALL _s_ms
(0162) PORTG&=~(1<<EN);
1C0 9180 0065 LDS R24,0x0065
1C2 7F8B ANDI R24,0xFB
1C3 9380 0065 STS 0x0065,R24
(0163) pBuffer++;
1C5 5F4F SUBI R20,0xFF
1C6 4F5F SBCI R21,0xFF
1C7 9563 INC R22
1C8 3160 CPI R22,0x10
1C9 F358 BCS 0x01B5
(0164) }
(0165) writecom(0xC0);
1CA EC00 LDI R16,0xC0
1CB DEED RCALL _writecom
(0166)
(0167) PORTG|=(1<<RS);
1CC 9180 0065 LDS R24,0x0065
1CE 6081 ORI R24,1
1CF 9380 0065 STS 0x0065,R24
(0168) PORTG&=~(1<<RW);
1D1 9180 0065 LDS R24,0x0065
1D3 7F8D ANDI R24,0xFD
1D4 9380 0065 STS 0x0065,R24
(0169) s_ms(50);
1D6 E302 LDI R16,0x32
1D7 E010 LDI R17,0
1D8 DE9C RCALL _s_ms
(0170) for(i=0;i<16;i++)
1D9 2766 CLR R22
1DA C013 RJMP 0x01EE
(0171) {
(0172) t = *pBuffer;
1DB 01FA MOVW R30,R20
1DC 90A6 ELPM R10,19(Z)
(0173) PORTA = t;
1DD BAAB OUT 0x1B,R10
(0174) PORTG|=(1<<EN);
1DE 9180 0065 LDS R24,0x0065
1E0 6084 ORI R24,4
1E1 9380 0065 STS 0x0065,R24
(0175) s_ms(50);
1E3 E302 LDI R16,0x32
1E4 E010 LDI R17,0
1E5 DE8F RCALL _s_ms
(0176) PORTG&=~(1<<EN);
1E6 9180 0065 LDS R24,0x0065
1E8 7F8B ANDI R24,0xFB
1E9 9380 0065 STS 0x0065,R24
(0177) pBuffer++;
1EB 5F4F SUBI R20,0xFF
1EC 4F5F SBCI R21,0xFF
1ED 9563 INC R22
1EE 3160 CPI R22,0x10
1EF F358 BCS 0x01DB
1F0 940C 034A JMP pop_xgsetF00C
_WriteNum:
num --> Y,+4
col --> R22
row --> R20
1F2 940E 0339 CALL push_xgsetF000
1F4 2F62 MOV R22,R18
1F5 2F40 MOV R20,R16
(0178) }
(0179) }
(0180) //====================================================
(0181) // 描述:在任意位置写数字函数
(0182) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0183) // ’col‘表示要写数字所在的列地址,只能为0--15
(0184) // ‘num’表示要写的数字,只能为0--9
(0185) // 出口:无
(0186) //===================================================
(0187) void WriteNum(uchar row,uchar col,uchar num)
(0188) {
(0189) if (row == 1) row = 0x80 + col;
1F6 3041 CPI R20,1
1F7 F419 BNE 0x01FB
1F8 2F46 MOV R20,R22
1F9 5840 SUBI R20,0x80
1FA C002 RJMP 0x01FD
(0190) else row = 0xC0 + col;
1FB 2F46 MOV R20,R22
1FC 5440 SUBI R20,0x40
(0191) writecom(row);
1FD 2F04 MOV R16,R20
1FE DEBA RCALL _writecom
(0192)
(0193) PORTG|=(1<<RS);
1FF 9180 0065 LDS R24,0x0065
201 6081 ORI R24,1
202 9380 0065 STS 0x0065,R24
(0194) s_ms(500);
204 EF04 LDI R16,0xF4
205 E011 LDI R17,1
206 DE6E RCALL _s_ms
(0195) PORTG&=~(1<<RW);
207 9180 0065 LDS R24,0x0065
209 7F8D ANDI R24,0xFD
20A 9380 0065 STS 0x0065,R24
(0196) s_ms(500);
20C EF04 LDI R16,0xF4
20D E011 LDI R17,1
20E DE66 RCALL _s_ms
(0197) PORTA = num;
20F 800C LDD R0,Y+4
210 BA0B OUT 0x1B,R0
(0198) s_ms(500);
211 EF04 LDI R16,0xF4
212 E011 LDI R17,1
213 DE61 RCALL _s_ms
(0199) PORTG|=(1<<EN);
214 9180 0065 LDS R24,0x0065
216 6084 ORI R24,4
217 9380 0065 STS 0x0065,R24
(0200) s_ms(500);
219 EF04 LDI R16,0xF4
21A E011 LDI R17,1
21B DE59 RCALL _s_ms
(0201) PORTG&=~(1<<EN);
21C 9180 0065 LDS R24,0x0065
21E 7F8B ANDI R24,0xFB
21F 9380 0065 STS 0x0065,R24
(0202) s_ms(500);
221 EF04 LDI R16,0xF4
222 E011 LDI R17,1
223 DE51 RCALL _s_ms
224 940C 033E JMP pop_xgsetF000
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
226 940E 0351 CALL push_xgsetF03C
228 2EA2 MOV R10,R18
229 2F60 MOV R22,R16
22A 854A LDD R20,Y+10
22B 855B LDD R21,Y+11
(0203) }
(0204) //================================================================
(0205) // 描述:在任意位置写任意多个字符
(0206) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0207) // ‘col’要写的字符所在的列,只能为0---15
(0208) // ‘num’要写字符的个数
(0209) // ‘pbuffer’要写字符的首地址
(0210) //==================================================================
(0211) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0212) {
(0213) uchar i,t;
(0214) if (row == 1) row = 0x80 + col;
22C 3061 CPI R22,1
22D F419 BNE 0x0231
22E 2D6A MOV R22,R10
22F 5860 SUBI R22,0x80
230 C002 RJMP 0x0233
(0215) else row = 0xC0 + col;
231 2D6A MOV R22,R10
232 5460 SUBI R22,0x40
(0216) writecom(row);
233 2F06 MOV R16,R22
234 DE84 RCALL _writecom
(0217)
(0218)
(0219) PORTG|=(1<<RS);
235 9180 0065 LDS R24,0x0065
237 6081 ORI R24,1
238 9380 0065 STS 0x0065,R24
(0220) s_ms(500);
23A EF04 LDI R16,0xF4
23B E011 LDI R17,1
23C DE38 RCALL _s_ms
(0221) PORTG&=~(1<<RW);
23D 9180 0065 LDS R24,0x0065
23F 7F8D ANDI R24,0xFD
240 9380 0065 STS 0x0065,R24
(0222) s_ms(500);
242 EF04 LDI R16,0xF4
243 E011 LDI R17,1
244 DE30 RCALL _s_ms
(0223) for(i=num;i!=0;i--)
245 84A8 LDD R10,Y+8
246 C01C RJMP 0x0263
(0224) {
(0225) t = *pBuffer;
247 01FA MOVW R30,R20
248 80C0 LDD R12,Z+0
(0226) s_ms(500);
249 EF04 LDI R16,0xF4
24A E011 LDI R17,1
24B DE29 RCALL _s_ms
(0227) PORTA = t;
24C BACB OUT 0x1B,R12
(0228) s_ms(500);
24D EF04 LDI R16,0xF4
24E E011 LDI R17,1
24F DE25 RCALL _s_ms
(0229) PORTG|=(1<<EN);
250 9180 0065 LDS R24,0x0065
252 6084 ORI R24,4
253 9380 0065 STS 0x0065,R24
(0230) s_ms(500);
255 EF04 LDI R16,0xF4
256 E011 LDI R17,1
257 DE1D RCALL _s_ms
(0231) PORTG&=~(1<<EN);
258 9180 0065 LDS R24,0x0065
25A 7F8B ANDI R24,0xFB
25B 9380 0065 STS 0x0065,R24
(0232) s_ms(500);
25D EF04 LDI R16,0xF4
25E E011 LDI R17,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -