📄 smg12232zk.lst
字号:
(0093) {
(0094) Lcd_Write(0xfa,*lcd_pointer);
011F 01FB MOVW R30,R22
0120 8120 LDD R18,Z+0
0121 EF0A LDI R16,0xFA
0122 D094 RCALL _Lcd_Write
(0095) lcd_pointer++;
0123 5F6F SUBI R22,0xFF
0124 4F7F SBCI R23,0xFF
0125 954A DEC R20
0126 2422 CLR R2
0127 1624 CP R2,R20
0128 F3B0 BCS 0x011F
0129 D13D RCALL pop_gset5
012A 9508 RET
_Hzk_Dis_Data:
ram_address --> R14
i --> R10
num --> R12
data --> Y+14
xpos --> Y+12
ypos --> Y+10
012B D0C3 RCALL push_arg4
012C D13C RCALL push_gset5
012D 88CA LDD R12,Y+18
(0096) }
(0097)
(0098) }
(0099)
(0100) /****************发送数据子程序******************
(0101) ** xpos为列数,ypos为行数
(0102) **data为数据
(0103) **num数据占用得位数
(0104) *********************************************************/
(0105) void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)
(0106) {
(0107) Byte i=0,ram_address;//ram_address:首地址
012E 24AA CLR R10
(0108) if(num<16)
012F 2D8C MOV R24,R12
0130 3180 CPI R24,0x10
0131 F008 BCS 0x0133
0132 C06C RJMP 0x019F
(0109) {
(0110) for(i=0;i<num;i++)
0133 C03B RJMP 0x016F
(0111) {
(0112) lcd_buf[num-i-1]= data%10+0x30;
0134 E04A LDI R20,0xA
0135 E050 LDI R21,0
0136 E060 LDI R22,0
0137 E070 LDI R23,0
0138 01FE MOVW R30,R28
0139 8426 LDD R2,Z+14
013A 8437 LDD R3,Z+15
013B 8840 LDD R4,Z+16
013C 8851 LDD R5,Z+17
013D 937A ST R23,-Y
013E 936A ST R22,-Y
013F 935A ST R21,-Y
0140 934A ST R20,-Y
0141 0181 MOVW R16,R2
0142 0192 MOVW R18,R4
0143 D0B2 RCALL mod32u
0144 0118 MOVW R2,R16
0145 0129 MOVW R4,R18
0146 E340 LDI R20,0x30
0147 E050 LDI R21,0
0148 E060 LDI R22,0
0149 E070 LDI R23,0
014A 0E24 ADD R2,R20
014B 1E35 ADC R3,R21
014C 1E46 ADC R4,R22
014D 1E57 ADC R5,R23
014E 2C3A MOV R3,R10
014F 2444 CLR R4
0150 2DEC MOV R30,R12
0151 27FF CLR R31
0152 19E3 SUB R30,R3
0153 09F4 SBC R31,R4
0154 E189 LDI R24,0x19
0155 E091 LDI R25,1
0156 0FE8 ADD R30,R24
0157 1FF9 ADC R31,R25
0158 8220 STD Z+0,R2
(0113) data /= 10;
0159 E04A LDI R20,0xA
015A E050 LDI R21,0
015B E060 LDI R22,0
015C E070 LDI R23,0
015D 01FE MOVW R30,R28
015E 8426 LDD R2,Z+14
015F 8437 LDD R3,Z+15
0160 8840 LDD R4,Z+16
0161 8851 LDD R5,Z+17
0162 937A ST R23,-Y
0163 936A ST R22,-Y
0164 935A ST R21,-Y
0165 934A ST R20,-Y
0166 0181 MOVW R16,R2
0167 0192 MOVW R18,R4
0168 D08B RCALL div32u
0169 01FE MOVW R30,R28
016A 8706 STD Z+14,R16
016B 8717 STD Z+15,R17
016C 8B20 STD Z+16,R18
016D 8B31 STD Z+17,R19
016E 94A3 INC R10
016F 14AC CP R10,R12
0170 F408 BCC 0x0172
0171 CFC2 RJMP 0x0134
(0114) }
(0115) //输入灭零程序
(0116) if(ypos==1)
0172 858A LDD R24,Y+10
0173 3081 CPI R24,1
0174 F429 BNE 0x017A
(0117) {
(0118) ram_address = 0x80+xpos-1;
0175 858C LDD R24,Y+12
0176 5880 SUBI R24,0x80
0177 5081 SUBI R24,1
0178 2EE8 MOV R14,R24
(0119) }
0179 C007 RJMP 0x0181
(0120) else if(ypos==2)
017A 858A LDD R24,Y+10
017B 3082 CPI R24,2
017C F421 BNE 0x0181
(0121) {
(0122) ram_address = 0x90+xpos-1;
017D 858C LDD R24,Y+12
017E 5780 SUBI R24,0x70
017F 5081 SUBI R24,1
0180 2EE8 MOV R14,R24
(0123) }
(0124) Lcd_Write(0xf8,ram_address);
0181 2D2E MOV R18,R14
0182 EF08 LDI R16,0xF8
0183 D033 RCALL _Lcd_Write
(0125) pointer = lcd_buf;
0184 E18A LDI R24,0x1A
0185 E091 LDI R25,1
0186 93900119 STS pointer+1,R25
0188 93800118 STS pointer,R24
(0126) for(i=0;i<num;i++)
018A 24AA CLR R10
018B C011 RJMP 0x019D
(0127) {
(0128) Lcd_Write(0xfa,*pointer);
018C 91E00118 LDS R30,pointer
018E 91F00119 LDS R31,pointer+1
0190 8120 LDD R18,Z+0
0191 EF0A LDI R16,0xFA
0192 D024 RCALL _Lcd_Write
(0129) pointer++;
0193 91800118 LDS R24,pointer
0195 91900119 LDS R25,pointer+1
0197 9601 ADIW R24,1
0198 93900119 STS pointer+1,R25
019A 93800118 STS pointer,R24
019C 94A3 INC R10
019D 14AC CP R10,R12
019E F368 BCS 0x018C
(0130) }
(0131) }
019F D0C7 RCALL pop_gset5
01A0 9624 ADIW R28,4
01A1 9508 RET
(0132) }
(0133)
(0134)
(0135) void Lcd_Reset(void)
(0136) {
(0137) LCD_CS_H;//片选置高
_Lcd_Reset:
01A2 9A5A SBI 0x0B,2
(0138) Delay_Ms(1);//等待内部复位
01A3 E001 LDI R16,1
01A4 E010 LDI R17,0
01A5 DEC0 RCALL _Delay_Ms
(0139) Lcd_Write(0xf8,0x30);//使用基本指令集
01A6 E320 LDI R18,0x30
01A7 EF08 LDI R16,0xF8
01A8 D00E RCALL _Lcd_Write
(0140) Lcd_Write(0xf8,0x0c);//整体显示on
01A9 E02C LDI R18,0xC
01AA EF08 LDI R16,0xF8
01AB D00B RCALL _Lcd_Write
(0141) Lcd_Write(0xf8,0x01);//清除显示
01AC E021 LDI R18,1
01AD EF08 LDI R16,0xF8
01AE D008 RCALL _Lcd_Write
(0142) Delay_Ms(5);//4.6ms
01AF E005 LDI R16,5
01B0 E010 LDI R17,0
01B1 DEB4 RCALL _Delay_Ms
(0143) Lcd_Write(0xf8,0x06);//显示右移
01B2 E026 LDI R18,6
01B3 EF08 LDI R16,0xF8
01B4 D002 RCALL _Lcd_Write
(0144) LCD_CS_L;//片选置低
01B5 985A CBI 0x0B,2
01B6 9508 RET
_Lcd_Write:
com --> R20
start --> R22
01B7 D0B7 RCALL push_gset2
01B8 2F42 MOV R20,R18
01B9 2F60 MOV R22,R16
(0145) }
(0146)
(0147) void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据
(0148) {
(0149) LCD_CS_H;//片选置高
01BA 9A5A SBI 0x0B,2
(0150) Send_8bit(start);
01BB 2F06 MOV R16,R22
01BC 2711 CLR R17
01BD D01B RCALL _Send_8bit
(0151) Delay_Us(100);//72us
01BE E604 LDI R16,0x64
01BF DE92 RCALL _Delay_Us
(0152) //将data变为datal 0000 datah 0000
(0153) Send_8bit(com&0xf0);
01C0 2F04 MOV R16,R20
01C1 2711 CLR R17
01C2 7F00 ANDI R16,0xF0
01C3 7010 ANDI R17,0
01C4 D014 RCALL _Send_8bit
(0154) Delay_Us(100);//72us
01C5 E604 LDI R16,0x64
01C6 DE8B RCALL _Delay_Us
(0155) Send_8bit((com&0x0f)<<4);
01C7 2F04 MOV R16,R20
01C8 2711 CLR R17
01C9 700F ANDI R16,0xF
01CA 7010 ANDI R17,0
01CB 0F00 LSL R16
01CC 1F11 ROL R17
01CD 0F00 LSL R16
01CE 1F11 ROL R17
01CF 0F00 LSL R16
01D0 1F11 ROL R17
01D1 0F00 LSL R16
01D2 1F11 ROL R17
01D3 D005 RCALL _Send_8bit
(0156) Delay_Us(100);//72us
01D4 E604 LDI R16,0x64
01D5 DE7C RCALL _Delay_Us
(0157) LCD_CS_L;//片选置低
01D6 985A CBI 0x0B,2
01D7 D08D RCALL pop_gset2
01D8 9508 RET
_Send_8bit:
i --> R20
x --> R22
01D9 D095 RCALL push_gset2
01DA 01B8 MOVW R22,R16
(0158) }
(0159)
(0160) void Send_8bit(Word x)
(0161) {
(0162) Byte i;
(0163) for(i=0;i<8;i++)
01DB 2744 CLR R20
01DC C00E RJMP 0x01EB
(0164) {
(0165) if(x&0x80)//数据线发送数据
01DD FF67 SBRS R22,7
01DE C002 RJMP 0x01E1
(0166) {
(0167) LCD_STD_H;
01DF 9A59 SBI 0x0B,1
(0168) }
01E0 C001 RJMP 0x01E2
(0169) else
(0170) {
(0171) LCD_STD_L;
01E1 9859 CBI 0x0B,1
(0172) }
(0173) LCD_SCLK_L;//产生同步时钟
01E2 9858 CBI 0x0B,0
(0174) Delay_Us(2);
01E3 E002 LDI R16,2
01E4 DE6D RCALL _Delay_Us
(0175) LCD_SCLK_H;
01E5 9A58 SBI 0x0B,0
(0176) Delay_Us(2);
01E6 E002 LDI R16,2
01E7 DE6A RCALL _Delay_Us
(0177) x <<= 1;
FILE: <library>
01E8 0F66 LSL R22
01E9 1F77 ROL R23
01EA 9543 INC R20
01EB 3048 CPI R20,0x8
01EC F380 BCS 0x01DD
01ED D077 RCALL pop_gset2
01EE 9508 RET
push_arg4:
01EF 933A ST R19,-Y
01F0 932A ST R18,-Y
push_arg2:
01F1 931A ST R17,-Y
01F2 930A ST R16,-Y
01F3 9508 RET
div32u:
01F4 94E8 BCLR 6
01F5 C001 RJMP 0x01F7
mod32u:
01F6 9468 BSET 6
01F7 D02F RCALL long_div_prolog
01F8 24CC CLR R12
01F9 C008 RJMP 0x0202
div32s:
01FA 94E8 BCLR 6
01FB C001 RJMP 0x01FD
mod32s:
01FC 9468 BSET 6
01FD D029 RCALL long_div_prolog
01FE FD37 SBRC R19,7
01FF D053 RCALL neg_R16_R19
0200 FDB7 SBRC R27,7
0201 D05A RCALL neg_R24_R27
0202 2477 CLR R7
0203 2488 CLR R8
0204 2499 CLR R9
0205 24AA CLR R10
0206 24BB CLR R11
0207 D041 RCALL tst_R16_R19
0208 F0C1 BEQ 0x0221
0209 D044 RCALL tst_R24_R27
020A F0B1 BEQ 0x0221
020B E2E8 LDI R30,0x28
020C 0F00 LSL R16
020D 1F11 ROL R17
020E 1F22 ROL R18
020F 1F33 ROL R19
0210 1C77 ROL R7
0211 1C88 ROL R8
0212 1C99 ROL R9
0213 1CAA ROL R10
0214 1CBB ROL R11
0215 1688 CP R8,R24
0216 0699 CPC R9,R25
0217 06AA CPC R10,R26
0218 06BB CPC R11,R27
0219 F028 BCS 0x021F
021A 1A88 SUB R8,R24
021B 0A99 SBC R9,R25
021C 0AAA SBC R10,R26
021D 0ABB SBC R11,R27
021E 9503 INC R16
021F 95EA DEC R30
0220 F759 BNE 0x020C
0221 F426 BRTC 0x0226
0222 2D08 MOV R16,R8
0223 2D19 MOV R17,R9
0224 2D2A MOV R18,R10
0225 2D3B MOV R19,R11
0226 C013 RJMP long_div_epilog
long_div_prolog:
0227 927A ST R7,-Y
0228 928A ST R8,-Y
0229 929A ST R9,-Y
022A 92AA ST R10,-Y
022B 92BA ST R11,-Y
022C 92CA ST R12,-Y
022D 93EA ST R30,-Y
022E 938A ST R24,-Y
022F 939A ST R25,-Y
0230 93AA ST R26,-Y
0231 93BA ST R27,-Y
0232 858B LDD R24,Y+11
0233 859C LDD R25,Y+12
0234 85AD LDD R26,Y+13
0235 85BE LDD R27,Y+14
0236 2EC3 MOV R12,R19
0237 F00E BRTS 0x0239
0238 26CB EOR R12,R27
0239 9508 RET
long_div_epilog:
023A FCC7 SBRC R12,7
023B D017 RCALL neg_R16_R19
023C 91B9 LD R27,Y+
023D 91A9 LD R26,Y+
023E 9199 LD R25,Y+
023F 9189 LD R24,Y+
0240 91E9 LD R30,Y+
0241 90C9 LD R12,Y+
0242 90B9 LD R11,Y+
0243 90A9 LD R10,Y+
0244 9099 LD R9,Y+
0245 9089 LD R8,Y+
0246 9079 LD R7,Y+
0247 9624 ADIW R28,4
0248 9508 RET
tst_R16_R19:
0249 2FE0 MOV R30,R16
024A 2BE1 OR R30,R17
024B 2BE2 OR R30,R18
024C 2BE3 OR R30,R19
024D 9508 RET
tst_R24_R27:
024E 2FE8 MOV R30,R24
024F 2BE9 OR R30,R25
0250 2BEA OR R30,R26
0251 2BEB OR R30,R27
0252 9508 RET
neg_R16_R19:
0253 9500 COM R16
0254 9510 COM R17
0255 9520 COM R18
0256 9530 COM R19
0257 5F0F SUBI R16,0xFF
0258 4F1F SBCI R17,0xFF
0259 4F2F SBCI R18,0xFF
025A 4F3F SBCI R19,0xFF
025B 9508 RET
neg_R24_R27:
025C 9580 COM R24
025D 9590 COM R25
025E 95A0 COM R26
025F 95B0 COM R27
0260 5F8F SUBI R24,0xFF
0261 4F9F SBCI R25,0xFF
0262 4FAF SBCI R26,0xFF
0263 4FBF SBCI R27,0xFF
0264 9508 RET
pop_gset2:
0265 E0E2 LDI R30,2
0266 C00E RJMP pop
pop_gset5:
0267 27EE CLR R30
0268 C00C RJMP pop
push_gset5:
0269 92FA ST R15,-Y
026A 92EA ST R14,-Y
push_gset4:
026B 92DA ST R13,-Y
026C 92CA ST R12,-Y
push_gset3:
026D 92BA ST R11,-Y
026E 92AA ST R10,-Y
push_gset2:
026F 937A ST R23,-Y
0270 936A ST R22,-Y
push_gset1:
0271 935A ST R21,-Y
0272 934A ST R20,-Y
0273 9508 RET
pop_gset1:
0274 E0E1 LDI R30,1
pop:
0275 9149 LD R20,Y+
0276 9159 LD R21,Y+
0277 FDE0 SBRC R30,0
0278 9508 RET
0279 9169 LD R22,Y+
027A 9179 LD R23,Y+
027B FDE1 SBRC R30,1
027C 9508 RET
027D 90A9 LD R10,Y+
027E 90B9 LD R11,Y+
027F FDE2 SBRC R30,2
0280 9508 RET
0281 90C9 LD R12,Y+
0282 90D9 LD R13,Y+
0283 FDE3 SBRC R30,3
0284 9508 RET
0285 90E9 LD R14,Y+
0286 90F9 LD R15,Y+
0287 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -