📄 nrf2401.lst
字号:
__text_start:
__start:
0051 E5CF LDI R28,0x5F
0052 E0D4 LDI R29,4
0053 BFCD OUT 0x3D,R28
0054 BFDE OUT 0x3E,R29
0055 51CE SUBI R28,0x1E
0056 40D0 SBCI R29,0
0057 EA0A LDI R16,0xAA
0058 8308 STD Y+0,R16
0059 2400 CLR R0
005A EBE9 LDI R30,0xB9
005B E0F0 LDI R31,0
005C E010 LDI R17,0
005D 3DE0 CPI R30,0xD0
005E 07F1 CPC R31,R17
005F F011 BEQ 0x0062
0060 9201 ST R0,Z+
0061 CFFB RJMP 0x005D
0062 8300 STD Z+0,R16
0063 E4E8 LDI R30,0x48
0064 E0F0 LDI R31,0
0065 E6A0 LDI R26,0x60
0066 E0B0 LDI R27,0
0067 E010 LDI R17,0
0068 3AE1 CPI R30,0xA1
0069 07F1 CPC R31,R17
006A F021 BEQ 0x006F
006B 95C8 LPM
006C 9631 ADIW R30,1
006D 920D ST R0,X+
006E CFF9 RJMP 0x0068
006F D224 RCALL _main
_exit:
0070 CFFF RJMP _exit
_display4:
kk --> R20
0071 D441 RCALL push_gset2
0072 2F40 MOV R20,R16
FILE: F:\programme\nrf2401\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);
0073 E300 LDI R16,0x30
0074 E010 LDI R17,0
0075 D144 RCALL _lcd_write_comm
(0014) lcd_write_comm(0x0c);
0076 E00C LDI R16,0xC
0077 E010 LDI R17,0
0078 D141 RCALL _lcd_write_comm
(0015) switch(kk)
0079 2F64 MOV R22,R20
007A 2777 CLR R23
007B 3263 CPI R22,0x23
007C E0E0 LDI R30,0
007D 077E CPC R23,R30
007E F409 BNE 0x0080
007F C05B RJMP 0x00DB
0080 E283 LDI R24,0x23
0081 E090 LDI R25,0
0082 1786 CP R24,R22
0083 0797 CPC R25,R23
0084 F0BC BLT 0x009C
0085 3060 CPI R22,0
0086 E0E0 LDI R30,0
0087 077E CPC R23,R30
0088 F40C BGE 0x008A
0089 C05B RJMP 0x00E5
008A E180 LDI R24,0x10
008B E090 LDI R25,0
008C 1786 CP R24,R22
008D 0797 CPC R25,R23
008E F40C BGE 0x0090
008F C055 RJMP 0x00E5
0090 E286 LDI R24,0x26
0091 E090 LDI R25,0
0092 2F06 MOV R16,R22
0093 2F17 MOV R17,R23
0094 0F00 LSL R16
0095 1F11 ROL R17
0096 0F08 ADD R16,R24
0097 1F19 ADC R17,R25
0098 D433 RCALL lpm16
0099 2FE0 MOV R30,R16
009A 2FF1 MOV R31,R17
009B 9409 IJMP
009C 326A CPI R22,0x2A
009D E0E0 LDI R30,0
009E 077E CPC R23,R30
009F F409 BNE 0x00A1
00A0 C030 RJMP 0x00D1
00A1 C043 RJMP 0x00E5
(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;
00A2 E908 LDI R16,0x98
00A3 E010 LDI R17,0
00A4 D115 RCALL _lcd_write_comm
00A5 2F04 MOV R16,R20
00A6 2711 CLR R17
00A7 D077 RCALL _displaybyte2
00A8 C045 RJMP 0x00EE
(0026) case 13: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('1'); break;
00A9 E908 LDI R16,0x98
00AA E010 LDI R17,0
00AB D10E RCALL _lcd_write_comm
00AC E406 LDI R16,0x46
00AD E010 LDI R17,0
00AE D0F6 RCALL _lcd_write_data
00AF E301 LDI R16,0x31
00B0 E010 LDI R17,0
00B1 D0F3 RCALL _lcd_write_data
00B2 C03B RJMP 0x00EE
(0027) case 14: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('2'); break;
00B3 E908 LDI R16,0x98
00B4 E010 LDI R17,0
00B5 D104 RCALL _lcd_write_comm
00B6 E406 LDI R16,0x46
00B7 E010 LDI R17,0
00B8 D0EC RCALL _lcd_write_data
00B9 E302 LDI R16,0x32
00BA E010 LDI R17,0
00BB D0E9 RCALL _lcd_write_data
00BC C031 RJMP 0x00EE
(0028) case 15: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('2'); break;
00BD E908 LDI R16,0x98
00BE E010 LDI R17,0
00BF D0FA RCALL _lcd_write_comm
00C0 E406 LDI R16,0x46
00C1 E010 LDI R17,0
00C2 D0E2 RCALL _lcd_write_data
00C3 E302 LDI R16,0x32
00C4 E010 LDI R17,0
00C5 D0DF RCALL _lcd_write_data
00C6 C027 RJMP 0x00EE
(0029) case 16: lcd_write_comm(0x98);lcd_write_data('F');lcd_write_data('4'); break;
00C7 E908 LDI R16,0x98
00C8 E010 LDI R17,0
00C9 D0F0 RCALL _lcd_write_comm
00CA E406 LDI R16,0x46
00CB E010 LDI R17,0
00CC D0D8 RCALL _lcd_write_data
00CD E304 LDI R16,0x34
00CE E010 LDI R17,0
00CF D0D5 RCALL _lcd_write_data
00D0 C01D RJMP 0x00EE
(0030) case '*':lcd_write_comm(0x98);lcd_write_data(' ');lcd_write_data('*'); break;
00D1 E908 LDI R16,0x98
00D2 E010 LDI R17,0
00D3 D0E6 RCALL _lcd_write_comm
00D4 E200 LDI R16,0x20
00D5 E010 LDI R17,0
00D6 D0CE RCALL _lcd_write_data
00D7 E20A LDI R16,0x2A
00D8 E010 LDI R17,0
00D9 D0CB RCALL _lcd_write_data
00DA C013 RJMP 0x00EE
(0031) case '#':lcd_write_comm(0x98);lcd_write_data(' ');lcd_write_data('#'); break;
00DB E908 LDI R16,0x98
00DC E010 LDI R17,0
00DD D0DC RCALL _lcd_write_comm
00DE E200 LDI R16,0x20
00DF E010 LDI R17,0
00E0 D0C4 RCALL _lcd_write_data
00E1 E203 LDI R16,0x23
00E2 E010 LDI R17,0
00E3 D0C1 RCALL _lcd_write_data
00E4 C009 RJMP 0x00EE
(0032) default: lcd_write_comm(0x98);lcd_write_data('N');lcd_write_data('O'); break;
00E5 E908 LDI R16,0x98
00E6 E010 LDI R17,0
00E7 D0D2 RCALL _lcd_write_comm
00E8 E40E LDI R16,0x4E
00E9 E010 LDI R17,0
00EA D0BA RCALL _lcd_write_data
00EB E40F LDI R16,0x4F
00EC E010 LDI R17,0
00ED D0B7 RCALL _lcd_write_data
00EE D3B8 RCALL pop_gset2
00EF 9508 RET
_displaybyte:
data --> R20
00F0 D3C4 RCALL push_gset1
00F1 2F40 MOV R20,R16
(0033) }
(0034)
(0035) }
(0036)
(0037) void displaybyte(unsigned char data)
(0038) {
(0039) lcd_write_data(data/100%10+0x30);
00F2 E624 LDI R18,0x64
00F3 E030 LDI R19,0
00F4 2F04 MOV R16,R20
00F5 2711 CLR R17
00F6 D37B RCALL div16s
00F7 E02A LDI R18,0xA
00F8 E030 LDI R19,0
00F9 D374 RCALL mod16s
00FA 5D00 SUBI R16,0xD0
00FB 4F1F SBCI R17,0xFF
00FC D0A8 RCALL _lcd_write_data
(0040) lcd_write_data(data/10%10+0x30);
00FD E02A LDI R18,0xA
00FE E030 LDI R19,0
00FF 2F04 MOV R16,R20
0100 2711 CLR R17
0101 D370 RCALL div16s
0102 E02A LDI R18,0xA
0103 E030 LDI R19,0
0104 D369 RCALL mod16s
0105 5D00 SUBI R16,0xD0
0106 4F1F SBCI R17,0xFF
0107 D09D RCALL _lcd_write_data
(0041) lcd_write_data(data%10+0x30);
0108 E02A LDI R18,0xA
0109 E030 LDI R19,0
010A 2F04 MOV R16,R20
010B 2711 CLR R17
010C D361 RCALL mod16s
010D 5D00 SUBI R16,0xD0
010E 4F1F SBCI R17,0xFF
010F D095 RCALL _lcd_write_data
0110 D3A7 RCALL pop_gset1
0111 9508 RET
_displayint:
data --> R20
address --> R22
0112 D3A0 RCALL push_gset2
0113 2F42 MOV R20,R18
0114 2F60 MOV R22,R16
(0042) }
(0043) void displayint(unsigned char address,unsigned char data)
(0044) { lcd_write_comm(0x30);
0115 E300 LDI R16,0x30
0116 E010 LDI R17,0
0117 D0A2 RCALL _lcd_write_comm
(0045) lcd_write_comm(address);
0118 2F06 MOV R16,R22
0119 2711 CLR R17
011A D09F RCALL _lcd_write_comm
(0046) displaybyte(data);
011B 2F04 MOV R16,R20
011C DFD3 RCALL _displaybyte
011D D389 RCALL pop_gset2
011E 9508 RET
_displaybyte2:
data --> R20
011F D395 RCALL push_gset1
0120 2F40 MOV R20,R16
(0047) }
(0048)
(0049) void displaybyte2(unsigned char data)
(0050) {
(0051) lcd_write_data(data/10%10+0x30);
0121 E02A LDI R18,0xA
0122 E030 LDI R19,0
0123 2F04 MOV R16,R20
0124 2711 CLR R17
0125 D34C RCALL div16s
0126 E02A LDI R18,0xA
0127 E030 LDI R19,0
0128 D345 RCALL mod16s
0129 5D00 SUBI R16,0xD0
012A 4F1F SBCI R17,0xFF
012B D079 RCALL _lcd_write_data
(0052) lcd_write_data(data%10+0x30);
012C E02A LDI R18,0xA
012D E030 LDI R19,0
012E 2F04 MOV R16,R20
012F 2711 CLR R17
0130 D33D RCALL mod16s
0131 5D00 SUBI R16,0xD0
0132 4F1F SBCI R17,0xFF
0133 D071 RCALL _lcd_write_data
0134 D383 RCALL pop_gset1
0135 9508 RET
_display_char:
i --> R20
len --> R22
address --> R20
Ptr --> R10
0136 D37A RCALL push_gset3
0137 2F42 MOV R20,R18
0138 2EA0 MOV R10,R16
0139 2EB1 MOV R11,R17
013A 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);
013B E300 LDI R16,0x30
013C E010 LDI R17,0
013D D07C RCALL _lcd_write_comm
(0063) lcd_write_comm(address);
013E 2F04 MOV R16,R20
013F 2711 CLR R17
0140 D079 RCALL _lcd_write_comm
(0064) lcd_write_comm(0x0c);
0141 E00C LDI R16,0xC
0142 E010 LDI R17,0
0143 D076 RCALL _lcd_write_comm
(0065) for(i=0;i<len;i++)
0144 2744 CLR R20
0145 C00F RJMP 0x0155
(0066) {
(0067) if(*Ptr!='/0')
0146 2DEA MOV R30,R10
0147 2DFB MOV R31,R11
0148 8180 LDD R24,Z+0
0149 328F CPI R24,0x2F
014A F031 BEQ 0x0151
(0068) lcd_write_data(*Ptr++);
014B 9101 LD R16,Z+
014C 2EAE MOV R10,R30
014D 2EBF MOV R11,R31
014E 2711 CLR R17
014F D055 RCALL _lcd_write_data
0150 C003 RJMP 0x0154
(0069) else
(0070) lcd_write_data(' ');
0151 E200 LDI R16,0x20
0152 E010 LDI R17,0
0153 D051 RCALL _lcd_write_data
0154 9543 INC R20
0155 1746 CP R20,R22
0156 F378 BCS 0x0146
0157 D351 RCALL pop_gset3
0158 9508 RET
_display_int:
i --> R20
len --> R22
address --> R20
Ptr --> R10
0159 D357 RCALL push_gset3
015A 2F42 MOV R20,R18
015B 2EA0 MOV R10,R16
015C 2EB1 MOV R11,R17
015D 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);
015E E300 LDI R16,0x30
015F E010 LDI R17,0
0160 D059 RCALL _lcd_write_comm
(0083) lcd_write_comm(address);
0161 2F04 MOV R16,R20
0162 2711 CLR R17
0163 D056 RCALL _lcd_write_comm
(0084) lcd_write_comm(0x0c);
0164 E00C LDI R16,0xC
0165 E010 LDI R17,0
0166 D053 RCALL _lcd_write_comm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -