📄 new.lst
字号:
(0129) {
(0130) KeyV>>=1;
030F 902000C8 LDS R2,KeyV
0311 9426 LSR R2
0312 922000C8 STS KeyV,R2
(0131) if(PINB&0x80)
0314 9BB7 SBIS 0x16,7
0315 C004 RJMP 0x031A
(0132) KeyV|=0x80;
0316 2D82 MOV R24,R2
0317 6880 ORI R24,0x80
0318 938000C8 STS KeyV,R24
(0133) }
(0134)
(0135) IntNum++;
031A 918000C4 LDS R24,IntNum
031C 5F8F SUBI R24,0xFF
031D 938000C4 STS IntNum,R24
(0136) // while (!Key_CLK); //等待PS/2CLK拉高 use??????
(0137) if(IntNum>10)
031F E08A LDI R24,0xA
0320 902000C4 LDS R2,IntNum
0322 1582 CP R24,R2
0323 F430 BCC 0x032A
(0138) {
(0139) IntNum=0;
0324 2422 CLR R2
0325 922000C4 STS IntNum,R2
(0140) KeyFlag=1;
0327 E081 LDI R24,1
0328 938000C7 STS KeyFlag,R24
(0141) }
032A 9029 LD R2,Y+
032B BE2F OUT 0x3F,R2
032C 9199 LD R25,Y+
032D 9189 LD R24,Y+
032E 9039 LD R3,Y+
032F 9029 LD R2,Y+
0330 9518 RETI
_display4:
kk --> R20
0331 D490 RCALL push_gset2
0332 2F40 MOV R20,R16
FILE: F:\programme\RF905\display.c
(0001) //************************************************************//
(0002) //本模块用于显示程序运行过程中需要显示的一些数据,可按需要改动
(0003) //注意:将要显示的数据设为外部变量
(0004) //周金广做
(0005) //**********************************************************//
(0006) #include <stdio.h>
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009)
(0010)
(0011) void display4(unsigned char kk) //临时少麻烦
(0012) {
(0013) lcd_write_comm(0x30);
0333 E300 LDI R16,0x30
0334 E010 LDI R17,0
0335 D13E RCALL _lcd_write_comm
(0014) lcd_write_comm(0x0c);
0336 E00C LDI R16,0xC
0337 E010 LDI R17,0
0338 D13B RCALL _lcd_write_comm
(0015) switch(kk)
0339 2F64 MOV R22,R20
033A 2777 CLR R23
033B 3263 CPI R22,0x23
033C E0E0 LDI R30,0
033D 077E CPC R23,R30
033E F409 BNE 0x0340
033F C05C RJMP 0x039C
0340 E283 LDI R24,0x23
0341 E090 LDI R25,0
0342 1786 CP R24,R22
0343 0797 CPC R25,R23
0344 F0C4 BLT 0x035D
0345 3060 CPI R22,0
0346 E0E0 LDI R30,0
0347 077E CPC R23,R30
0348 F40C BGE 0x034A
0349 C05C RJMP 0x03A6
034A E180 LDI R24,0x10
034B E090 LDI R25,0
034C 1786 CP R24,R22
034D 0797 CPC R25,R23
034E F40C BGE 0x0350
034F C056 RJMP 0x03A6
0350 E002 LDI R16,2
0351 E010 LDI R17,0
0352 019B MOVW R18,R22
0353 D452 RCALL empy16s
0354 01F8 MOVW R30,R16
0355 E286 LDI R24,0x26
0356 E090 LDI R25,0
0357 0FE8 ADD R30,R24
0358 1FF9 ADC R31,R25
0359 9005 LPM R0,Z+
035A 9014 LPM R1,0(Z)
035B 01F0 MOVW R30,R0
035C 9409 IJMP
035D 326A CPI R22,0x2A
035E E0E0 LDI R30,0
035F 077E CPC R23,R30
0360 F409 BNE 0x0362
0361 C030 RJMP 0x0392
0362 C043 RJMP 0x03A6
(0016) {case 1:
(0017) case 2:
(0018) case 3:
(0019) case 4:
(0020) case 5:
(0021) case 6:
(0022) case 7:
(0023) case 8:
(0024) case 9:
(0025) case 0: lcd_write_comm(0x98); displaybyte2(kk); break;
0363 E908 LDI R16,0x98
0364 E010 LDI R17,0
0365 D10E RCALL _lcd_write_comm
0366 2F04 MOV R16,R20
0367 2711 CLR R17
0368 D077 RCALL _displaybyte2
0369 C045 RJMP 0x03AF
(0026) case 13: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('1'); break;
036A E908 LDI R16,0x98
036B E010 LDI R17,0
036C D107 RCALL _lcd_write_comm
036D E406 LDI R16,0x46
036E E010 LDI R17,0
036F D0EF RCALL _lcd_write_data
0370 E301 LDI R16,0x31
0371 E010 LDI R17,0
0372 D0EC RCALL _lcd_write_data
0373 C03B RJMP 0x03AF
(0027) case 14: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('2'); break;
0374 E908 LDI R16,0x98
0375 E010 LDI R17,0
0376 D0FD RCALL _lcd_write_comm
0377 E406 LDI R16,0x46
0378 E010 LDI R17,0
0379 D0E5 RCALL _lcd_write_data
037A E302 LDI R16,0x32
037B E010 LDI R17,0
037C D0E2 RCALL _lcd_write_data
037D C031 RJMP 0x03AF
(0028) case 15: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('2'); break;
037E E908 LDI R16,0x98
037F E010 LDI R17,0
0380 D0F3 RCALL _lcd_write_comm
0381 E406 LDI R16,0x46
0382 E010 LDI R17,0
0383 D0DB RCALL _lcd_write_data
0384 E302 LDI R16,0x32
0385 E010 LDI R17,0
0386 D0D8 RCALL _lcd_write_data
0387 C027 RJMP 0x03AF
(0029) case 16: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('4'); break;
0388 E908 LDI R16,0x98
0389 E010 LDI R17,0
038A D0E9 RCALL _lcd_write_comm
038B E406 LDI R16,0x46
038C E010 LDI R17,0
038D D0D1 RCALL _lcd_write_data
038E E304 LDI R16,0x34
038F E010 LDI R17,0
0390 D0CE RCALL _lcd_write_data
0391 C01D RJMP 0x03AF
(0030) case '*':lcd_write_comm(0x98);lcd_write_data(' ');lcd_write_data('*'); break;
0392 E908 LDI R16,0x98
0393 E010 LDI R17,0
0394 D0DF RCALL _lcd_write_comm
0395 E200 LDI R16,0x20
0396 E010 LDI R17,0
0397 D0C7 RCALL _lcd_write_data
0398 E20A LDI R16,0x2A
0399 E010 LDI R17,0
039A D0C4 RCALL _lcd_write_data
039B C013 RJMP 0x03AF
(0031) case '#':lcd_write_comm(0x98);lcd_write_data(' ');lcd_write_data('#'); break;
039C E908 LDI R16,0x98
039D E010 LDI R17,0
039E D0D5 RCALL _lcd_write_comm
039F E200 LDI R16,0x20
03A0 E010 LDI R17,0
03A1 D0BD RCALL _lcd_write_data
03A2 E203 LDI R16,0x23
03A3 E010 LDI R17,0
03A4 D0BA RCALL _lcd_write_data
03A5 C009 RJMP 0x03AF
(0032) default: lcd_write_comm(0x98);lcd_write_data('N');lcd_write_data('O'); break;
03A6 E908 LDI R16,0x98
03A7 E010 LDI R17,0
03A8 D0CB RCALL _lcd_write_comm
03A9 E40E LDI R16,0x4E
03AA E010 LDI R17,0
03AB D0B3 RCALL _lcd_write_data
03AC E40F LDI R16,0x4F
03AD E010 LDI R17,0
03AE D0B0 RCALL _lcd_write_data
03AF D406 RCALL pop_gset2
03B0 9508 RET
_displaybyte:
data --> R20
03B1 D412 RCALL push_gset1
03B2 2F40 MOV R20,R16
(0033) }
(0034)
(0035) }
(0036)
(0037) void displaybyte(unsigned char data)
(0038) {
(0039) lcd_write_data(data/100%10+0x30);
03B3 E624 LDI R18,0x64
03B4 E030 LDI R19,0
03B5 2F04 MOV R16,R20
03B6 2711 CLR R17
03B7 D348 RCALL div16s
03B8 E02A LDI R18,0xA
03B9 E030 LDI R19,0
03BA D341 RCALL mod16s
03BB 5D00 SUBI R16,0xD0
03BC 4F1F SBCI R17,0xFF
03BD D0A1 RCALL _lcd_write_data
(0040) lcd_write_data(data/10%10+0x30);
03BE E02A LDI R18,0xA
03BF E030 LDI R19,0
03C0 2F04 MOV R16,R20
03C1 2711 CLR R17
03C2 D33D RCALL div16s
03C3 E02A LDI R18,0xA
03C4 E030 LDI R19,0
03C5 D336 RCALL mod16s
03C6 5D00 SUBI R16,0xD0
03C7 4F1F SBCI R17,0xFF
03C8 D096 RCALL _lcd_write_data
(0041) lcd_write_data(data%10+0x30);
03C9 E02A LDI R18,0xA
03CA E030 LDI R19,0
03CB 2F04 MOV R16,R20
03CC 2711 CLR R17
03CD D32E RCALL mod16s
03CE 5D00 SUBI R16,0xD0
03CF 4F1F SBCI R17,0xFF
03D0 D08E RCALL _lcd_write_data
03D1 D3F5 RCALL pop_gset1
03D2 9508 RET
_displayint:
data --> R20
address --> R22
03D3 D3EE RCALL push_gset2
03D4 2F42 MOV R20,R18
03D5 2F60 MOV R22,R16
(0042) }
(0043) void displayint(unsigned char address,unsigned char data)
(0044) { lcd_write_comm(0x30);
03D6 E300 LDI R16,0x30
03D7 E010 LDI R17,0
03D8 D09B RCALL _lcd_write_comm
(0045) lcd_write_comm(address);
03D9 2F06 MOV R16,R22
03DA 2711 CLR R17
03DB D098 RCALL _lcd_write_comm
(0046) displaybyte(data);
03DC 2F04 MOV R16,R20
03DD DFD3 RCALL _displaybyte
03DE D3D7 RCALL pop_gset2
03DF 9508 RET
_displaybyte2:
data --> R20
03E0 D3E3 RCALL push_gset1
03E1 2F40 MOV R20,R16
(0047) }
(0048)
(0049) void displaybyte2(unsigned char data)
(0050) {
(0051) lcd_write_data(data/10%10+0x30);
03E2 E02A LDI R18,0xA
03E3 E030 LDI R19,0
03E4 2F04 MOV R16,R20
03E5 2711 CLR R17
03E6 D319 RCALL div16s
03E7 E02A LDI R18,0xA
03E8 E030 LDI R19,0
03E9 D312 RCALL mod16s
03EA 5D00 SUBI R16,0xD0
03EB 4F1F SBCI R17,0xFF
03EC D072 RCALL _lcd_write_data
(0052) lcd_write_data(data%10+0x30);
03ED E02A LDI R18,0xA
03EE E030 LDI R19,0
03EF 2F04 MOV R16,R20
03F0 2711 CLR R17
03F1 D30A RCALL mod16s
03F2 5D00 SUBI R16,0xD0
03F3 4F1F SBCI R17,0xFF
03F4 D06A RCALL _lcd_write_data
03F5 D3D1 RCALL pop_gset1
03F6 9508 RET
_display_char:
i --> R20
len --> R22
address --> R20
Ptr --> R10
03F7 D3C8 RCALL push_gset3
03F8 2F42 MOV R20,R18
03F9 0158 MOVW R10,R16
03FA 816E LDD R22,Y+6
(0053) }
(0054) //////////////////////////////////////////////////////////////////////
(0055) //*Ptr 字符串的首地址
(0056) //address 液晶屏的地址0x80-0x8f,0x90-0x9f之间
(0057) //len 显示的数据的长度,如果不够后面补空格
(0058) /////////////////////////////////////////////////////////////////////
(0059) void display_char(unsigned char *Ptr ,unsigned char address,unsigned char len)
(0060) { unsigned char i;
(0061)
(0062) lcd_write_comm(0x30);
03FB E300 LDI R16,0x30
03FC E010 LDI R17,0
03FD D076 RCALL _lcd_write_comm
(0063) lcd_write_comm(address);
03FE 2F04 MOV R16,R20
03FF 2711 CLR R17
0400 D073 RCALL _lcd_write_comm
(0064) lcd_write_comm(0x0c);
0401 E00C LDI R16,0xC
0402 E010 LDI R17,0
0403 D070 RCALL _lcd_write_comm
(0065) for(i=0;i<len;i++)
0404 2744 CLR R20
0405 C00D RJMP 0x0413
(0066) {
(0067) if(*Ptr!='/0')
0406 01F5 MOVW R30,R10
0407 8180 LDD R24,Z+0
0408 328F CPI R24,0x2F
0409 F029 BEQ 0x040F
(0068) lcd_write_data(*Ptr++);
040A 9101 LD R16,Z+
040B 015F MOVW R10,R30
040C 2711 CLR R17
040D D051 RCALL _lcd_write_data
040E C003 RJMP 0x0412
(0069) else
(0070) lcd_write_data(' ');
040F E200 LDI R16,0x20
0410 E010 LDI R17,0
0411 D04D RCALL _lcd_write_data
0412 9543 INC R20
0413 1746 CP R20,R22
0414 F388 BCS 0x0406
0415 D3A2 RCALL pop_gset3
0416 9508 RET
_display_int:
i --> R20
len --> R22
address --> R20
Ptr --> R10
0417 D3A8 RCALL push_gset3
0418 2F42 MOV R20,R18
0419 0158 MOVW R10,R16
041A 816E LDD R22,Y+6
(0071) }
(0072) }
(0073)
(0074) //////////////////////////////////////////////////////////////////////
(0075) //*Ptr 字符串的首地址
(0076) //address 液晶屏的地址0x80-0x8f,0x90-0x9f之间
(0077) //len 显示的数据的长度,如果不够后面补空格
(0078) /////////////////////////////////////////////////////////////////////
(0079) void display_int(unsigned char *Ptr ,unsigned char address,unsigned char len)
(0080) { unsigned char i;
(0081)
(0082) lcd_write_comm(0x30);
041B E300 LDI R16,0x30
041C E010 LDI R17,0
041D D056 RCALL _lcd_write_comm
(0083) lcd_write_comm(address);
041E 2F04 MOV R16,R20
041F 2711 CLR R17
0420 D053 RCALL _lcd_write_comm
(0084) lcd_write_comm(0x0c);
0421 E00C LDI R16,0xC
0422 E010 LDI R17,0
0423 D050 RCALL _lcd_write_comm
(0085) for(i=0;i<len;i++)
0424 2744 CLR R20
0425 C00A RJMP 0x0430
(0086) {
(0087) //if(*Ptr!='/0')
(0088) //if(*Ptr!=0)
(0089) {
(0090) displaybyte(*Ptr);
0426 01F5 MOVW R30,R10
0427 8100 LDD R16,Z+0
0428 DF88 RCALL _displaybyte
(0091) Ptr++ ;
0429 01C5 MOVW R24,R10
042A 9601 ADIW R24,1
042B 015C MOVW R10,R24
(0092) lcd_write_data(' ');
042C E200 LDI R16,0x20
042D E010 LDI R17,0
042E D030 RCALL _lcd_write_data
042F 9543 INC R20
0430 1746 CP R20,R22
0431 F3A0 BCS 0x0426
0432 D385 RCALL pop_gset3
0433 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -