📄 no2.lst
字号:
164 92AA ST R10,-Y
165 92CA ST R12,-Y
166 2EC2 MOV R12,R18
167 2EA0 MOV R10,R16
(0153) }
(0154)
(0155)
(0156) /********************************************************************************************
(0157) * 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
(0158) * 功 能:LCD设置x y坐标
(0159) * 入口参数:x y
(0160) * 出口参数:无
(0161) *********************************************************************************************/
(0162) void Lcd_Set_X_Y(uchar x, uchar y)
(0163) {
(0164) if(y<64)
168 2D8C MOV R24,R12
169 3480 CPI R24,0x40
16A F428 BCC 0x0170
(0165) { PORTB&=~BIT(3);
16B 98C3 CBI 0x18,3
(0166) PORTB|=BIT(2);
16C 9AC2 SBI 0x18,2
(0167)
(0168) set_col_addr_L(y);
16D 2F08 MOV R16,R24
16E DFE7 RCALL _set_col_addr_L
(0169) }
16F C004 RJMP 0x0174
(0170) else
(0171) {
(0172) PORTB|=BIT(3);
170 9AC3 SBI 0x18,3
(0173) PORTB&=~BIT(2);
171 98C2 CBI 0x18,2
(0174) set_col_addr_R(y);
172 2D0C MOV R16,R12
173 DFE9 RCALL _set_col_addr_R
(0175) }
(0176) set_page_L( x);
174 2D0A MOV R16,R10
175 DFD2 RCALL _set_page_L
(0177) set_page_R( x);
176 2D0A MOV R16,R10
177 DFD7 RCALL _set_page_R
178 90C9 LD R12,Y+
179 90A9 LD R10,Y+
17A 9508 RET
_Lcd_Character_16X16:
temp --> Y,+0
i --> R10
j --> R12
point --> Y,+11
y --> R14
x --> Y,+7
bit_flag --> R10
17B 933A ST R19,-Y
17C 932A ST R18,-Y
17D 940E 0318 CALL push_xgset00FC
17F 2EA0 MOV R10,R16
180 9721 SBIW R28,1
181 84E9 LDD R14,Y+9
(0178) }
(0179)
(0180) /****************************************************************************
(0181) * 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
(0182) * 功能:显示16*16字符(汉字)
(0183) * 入口参数:x y data
(0184) * 出口参数:无
(0185) *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
(0186) ****************************************************************************/
(0187) void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar *point )
(0188) {
(0189) uchar i,j,temp ;
(0190) temp=y;
182 82E8 STD Y+0,R14
(0191) if( bit_flag )
183 20AA TST R10
184 F111 BEQ 0x01A7
(0192) {
(0193) for( i=0; i<2; i++ )
185 24AA CLR R10
186 C01C RJMP 0x01A3
(0194) {
(0195) x+=i;
187 800F LDD R0,Y+7
188 0C0A ADD R0,R10
189 820F STD Y+7,R0
(0196) y=temp;
18A 80E8 LDD R14,Y+0
(0197) for( j=0;j<16;j++ )
18B 24CC CLR R12
18C C012 RJMP 0x019F
(0198) {
(0199) Lcd_Set_X_Y( x, y ); y++;
18D 2D2E MOV R18,R14
18E 810F LDD R16,Y+7
18F DFD4 RCALL _Lcd_Set_X_Y
190 94E3 INC R14
(0200) Lcd_Write_Byte( point[ i*16 + j] );
191 E180 LDI R24,0x10
192 9D8A MUL R24,R10
193 01F0 MOVW R30,R0
194 2C2C MOV R2,R12
195 2433 CLR R3
196 0DE2 ADD R30,R2
197 1DF3 ADC R31,R3
198 840B LDD R0,Y+11
199 841C LDD R1,Y+12
19A 0DE0 ADD R30,R0
19B 1DF1 ADC R31,R1
19C 8100 LDD R16,Z+0
19D DF91 RCALL _Lcd_Write_Byte
19E 94C3 INC R12
19F 2D8C MOV R24,R12
1A0 3180 CPI R24,0x10
1A1 F358 BCS 0x018D
1A2 94A3 INC R10
1A3 2D8A MOV R24,R10
1A4 3082 CPI R24,2
1A5 F308 BCS 0x0187
(0201) }
(0202) }
(0203) }
1A6 C022 RJMP 0x01C9
(0204) else
(0205) {
(0206) for( i =0; i<2; i++ )
1A7 24AA CLR R10
1A8 C01D RJMP 0x01C6
(0207) {
(0208) x+=i;
1A9 800F LDD R0,Y+7
1AA 0C0A ADD R0,R10
1AB 820F STD Y+7,R0
(0209) y=temp;
1AC 80E8 LDD R14,Y+0
(0210) for( j = 0; j < 16; j++ )
1AD 24CC CLR R12
1AE C013 RJMP 0x01C2
(0211) {
(0212) Lcd_Set_X_Y( x, y );
1AF 2D2E MOV R18,R14
1B0 810F LDD R16,Y+7
1B1 DFB2 RCALL _Lcd_Set_X_Y
(0213) y++;
1B2 94E3 INC R14
(0214) Lcd_Write_Byte( ~ point[ i * 16 + j ] );
1B3 E180 LDI R24,0x10
1B4 9D8A MUL R24,R10
1B5 01F0 MOVW R30,R0
1B6 2C2C MOV R2,R12
1B7 2433 CLR R3
1B8 0DE2 ADD R30,R2
1B9 1DF3 ADC R31,R3
1BA 840B LDD R0,Y+11
1BB 841C LDD R1,Y+12
1BC 0DE0 ADD R30,R0
1BD 1DF1 ADC R31,R1
1BE 8100 LDD R16,Z+0
1BF 9500 COM R16
1C0 DF6E RCALL _Lcd_Write_Byte
1C1 94C3 INC R12
1C2 2D8C MOV R24,R12
1C3 3180 CPI R24,0x10
1C4 F350 BCS 0x01AF
1C5 94A3 INC R10
1C6 2D8A MOV R24,R10
1C7 3082 CPI R24,2
1C8 F300 BCS 0x01A9
(0215)
(0216) }
(0217)
(0218) }
(0219) }
1C9 9621 ADIW R28,1
1CA 940E 030D CALL pop_xgset00FC
1CC 9622 ADIW R28,2
1CD 9508 RET
(0220) }
(0221) uchar key_press()
(0222) {
(0223) uchar j;
(0224) DDRD|=0X0F;
_key_press:
j --> R16
1CE B381 IN R24,0x11
1CF 608F ORI R24,0xF
1D0 BB81 OUT 0x11,R24
(0225) PORTD|=0X0F;
1D1 B382 IN R24,0x12
1D2 608F ORI R24,0xF
1D3 BB82 OUT 0x12,R24
(0226)
(0227) DDRD&=0XF0;
1D4 B381 IN R24,0x11
1D5 7F80 ANDI R24,0xF0
1D6 BB81 OUT 0x11,R24
(0228)
(0229) j=PIND;
1D7 B300 IN R16,0x10
(0230) j=j&0X0F;//00001111
1D8 700F ANDI R16,0xF
(0231) if(j==0X0F)
1D9 300F CPI R16,0xF
1DA F411 BNE 0x01DD
(0232) {
(0233) return 0;
1DB 2700 CLR R16
1DC C001 RJMP 0x01DE
(0234) }
(0235) else
(0236) {
(0237) return 1;
1DD E001 LDI R16,1
1DE 9508 RET
_key_scan:
key --> R10
1DF 940E 031A CALL push_xgset003C
(0238) }
(0239)
(0240) }
(0241)
(0242) uchar key_scan()
(0243) {
(0244) uchar key;
(0245) delay(10);
1E1 E00A LDI R16,0xA
1E2 E010 LDI R17,0
1E3 DF33 RCALL _delay
(0246) if(key_press())
1E4 DFE9 RCALL _key_press
1E5 2300 TST R16
1E6 F151 BEQ 0x0211
(0247) {
(0248) key=PIND;
1E7 B2A0 IN R10,0x10
(0249) key&=0X0F;
1E8 2D8A MOV R24,R10
1E9 708F ANDI R24,0xF
1EA 2EA8 MOV R10,R24
(0250) switch(key)
1EB 2EC8 MOV R12,R24
1EC 24DD CLR R13
1ED 01C6 MOVW R24,R12
1EE 3087 CPI R24,7
1EF E0E0 LDI R30,0
1F0 079E CPC R25,R30
1F1 F0B1 BEQ 0x0208
1F2 308B CPI R24,0xB
1F3 E0E0 LDI R30,0
1F4 079E CPC R25,R30
1F5 F079 BEQ 0x0205
1F6 308D CPI R24,0xD
1F7 E0E0 LDI R30,0
1F8 079E CPC R25,R30
1F9 F041 BEQ 0x0202
1FA 308E CPI R24,0xE
1FB E0E0 LDI R30,0
1FC 079E CPC R25,R30
1FD F009 BEQ 0x01FF
1FE C00C RJMP 0x020B
(0251) {
(0252) case 0X0E:
(0253) key=1;
1FF 24AA CLR R10
200 94A3 INC R10
(0254) break;
201 C00B RJMP 0x020D
(0255) case 0X0D:
(0256) key=2;
202 E082 LDI R24,2
203 2EA8 MOV R10,R24
(0257) break;
204 C008 RJMP 0x020D
(0258) case 0X0B:
(0259) key=3;
205 E083 LDI R24,3
206 2EA8 MOV R10,R24
(0260) break;
207 C005 RJMP 0x020D
(0261) case 0X07:
(0262) key=4;
208 E084 LDI R24,4
209 2EA8 MOV R10,R24
(0263) break;
20A C002 RJMP 0x020D
(0264) default:
(0265) key=16;
20B E180 LDI R24,0x10
20C 2EA8 MOV R10,R24
(0266) }
(0267) while(key_press());
20D DFC0 RCALL _key_press
20E 2300 TST R16
20F F7E9 BNE 0x020D
(0268) }
210 C002 RJMP 0x0213
(0269) else
(0270) {
(0271) key=16;
211 E180 LDI R24,0x10
212 2EA8 MOV R10,R24
(0272) }
(0273) return key;
213 2D0A MOV R16,R10
214 940C 0308 JMP pop_xgset003C
_Lcd_Function:
n --> R10
m --> R12
alarm_flag --> Y,+5
time_flag --> Y,+4
temp --> R14
216 940E 0318 CALL push_xgset00FC
218 2EE0 MOV R14,R16
219 9726 SBIW R28,6
(0274) }
(0275)
(0276) void Lcd_Function( uchar temp )
(0277) {
(0278) uchar time_flag = 0;
21A 2400 CLR R0
21B 820C STD Y+4,R0
(0279) uchar alarm_flag = 0;
21C 820D STD Y+5,R0
(0280) uchar m=0;
21D 24CC CLR R12
(0281) uchar n=0;
21E 24AA CLR R10
(0282) switch(temp)
21F 24FF CLR R15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -