📄 1602_duoji.lst
字号:
(0133) k=((read_data(0x81))&0xf0);
(0134) LCD_write_char(0,k+48);
(0135) break;//0
(0136) }
(0137)
(0138) //else goto ret;
(0139) case 2 :dout=PINC;j=((dout&0x80)==0x80);
(0140) if(j)
(0141) { t++;
(0142) write_data(0x80,((read_data(0x81))&0x0f)|(t<<4));
(0143) LCD_set_xy(2,1);
(0144) k=(read_data(0x81));
(0145) k=(k>>4);
(0146) LCD_write_char(0,k+48);
(0147) break;
(0148) }
(0149) //else goto ret;
(0150) case 4 :dout=PINC;j=((dout&0x80)==0x80);
(0151) if(j)
(0152) { t++;
(0153) write_data(0x82,((read_data(0x83))&0xf0)|t);
(0154) LCD_set_xy(4,1);
(0155) k=((read_data(0x83))&0xf0);
(0156) LCD_write_char(0,k+48);
(0157) break;
(0158) }
(0159) case 5 :dout=PINC;j=((dout&0x80)==0x80);
(0160) if(j)
(0161) { t++;
(0162) write_data(0x82,((read_data(0x83))&0x0f)|(t<<4));
(0163) LCD_set_xy(5,1);
(0164) k=(read_data(0x83));
(0165) k=(k>>4);
(0166) LCD_write_char(0,k+48);
(0167) break;
(0168) }
(0169) case 7 :dout=PINC;j=((dout&0x80)==0x80);
(0170) if(j)
(0171) { t++;
(0172) write_data(0x84,((read_data(0x85))&0xf0)|t);
(0173) LCD_set_xy(7,1);
(0174) k=((read_data(0x85))&0xf0);
(0175) LCD_write_char(0,k+48);
(0176) break;
(0177) }
(0178) case 8 :dout=PINC;j=((dout&0x80)==0x80);
(0179) if(j)
(0180) { t++;
(0181) write_data(0x84,((read_data(0x85))&0x0f)|(t<<4));
(0182) LCD_set_xy(8,1);
(0183) k=(read_data(0x85));
(0184) k=(k>>4);
(0185) LCD_write_char(0,k+48);
(0186) break;
(0187) }
(0188) case 10 :dout=PINC;j=((dout&0x80)==0x80);
(0189) if(j)
(0190) { t++;
(0191) write_data(0x86,((read_data(0x87))&0xf0)|t);
(0192) LCD_set_xy(10,1);
(0193) k=((read_data(0x87))&0xf0);
(0194) LCD_write_char(0,k+48);
(0195) break;
(0196) }
(0197) case 11 :dout=PINC;j=((dout&0x80)==0x80);
(0198) if(j)
(0199) { t++;
(0200) write_data(0x86,((read_data(0x87))&0x0f)|(t<<4));
(0201) LCD_set_xy(11,1);
(0202) k=(read_data(0x87));
(0203) k=(k>>4);
(0204) LCD_write_char(0,k+48);
(0205) break;
(0206) }
(0207) case 13 :dout=PINC;j=((dout&0x80)==0x80);
(0208) if(j)
(0209) { t++;
(0210) write_data(0x88,((read_data(0x89))&0xf0)|t);
(0211) LCD_set_xy(13,1);
(0212) k=((read_data(0x89))&0xf0);
(0213) LCD_write_char(0,k+48);
(0214) break;
(0215) }
(0216) case 14 :dout=PINC;j=((dout&0x80)==0x80);
(0217) if(j)
(0218) { t++;
(0219) write_data(0x88,((read_data(0x89))&0x0f)|(t<<4));
(0220) LCD_set_xy(14,1);
(0221) k=(read_data(0x89));
(0222) k=(k>>4);
(0223) LCD_write_char(0,k+48);
(0224) break;
(0225) }
(0226) else break;
(0227) }
(0228) }*/
(0229) void main(void)
(0230) {
(0231) volatile char aa=20,i=0,dout;
0275 E184 LDI R24,0x14
0276 8789 STD Y+9,R24
0277 2422 CLR R2
0278 862A STD Y+10,R2
(0232) OSCCAL=0X95;
0279 E985 LDI R24,0x95
027A BF81 OUT 0x31,R24
(0233) /********************************************/
(0234) CLI();
027B 94F8 BCLR 7
(0235) PORTD=0x00;
027C BA22 OUT 0x12,R2
(0236) DDRD |= LCD_DATA | LCD_RW;
027D B381 IN R24,0x11
027E 6F88 ORI R24,0xF8
027F BB81 OUT 0x11,R24
(0237) DDRD |= LCD_RS | LCD_EN;
0280 B381 IN R24,0x11
0281 6380 ORI R24,0x30
0282 BB81 OUT 0x11,R24
(0238) PORTA = 0xc7;//端口设置
0283 EC87 LDI R24,0xC7
0284 BB8B OUT 0x1B,R24
(0239) DDRA = 0xff;
0285 EF8F LDI R24,0xFF
0286 BB8A OUT 0x1A,R24
(0240) // PORTC = 0x00;
(0241) //DDRC = 0xff;
(0242) init_1302();
0287 940E03DB CALL _init_1302
(0243) init_1302();
0289 940E03DB CALL _init_1302
(0244) init_time(0x00,0x58,0x20,0x19,0x04,0x06,0x08);//秒、分、时、日、月、星期、年
028B E088 LDI R24,0x8
028C 8788 STD Y+8,R24
028D E086 LDI R24,6
028E 838E STD Y+6,R24
028F E084 LDI R24,4
0290 838C STD Y+4,R24
0291 E189 LDI R24,0x19
0292 838A STD Y+2,R24
0293 E280 LDI R24,0x20
0294 8388 STD Y+0,R24
0295 E528 LDI R18,0x58
0296 2700 CLR R16
0297 940E03E5 CALL _init_time
(0245) DDRC|=0x01; //置为输出
0299 9AA0 SBI 0x14,0
(0246) PORTC|=0x01;
029A 9AA8 SBI 0x15,0
(0247) timer2_init();
029B DEB6 RCALL _timer2_init
(0248) MCUCR = 0x00;
029C 2422 CLR R2
029D BE25 OUT 0x35,R2
(0249) GICR = 0x00;
029E BE2B OUT 0x3B,R2
(0250) TIMSK = 0x40;
029F E480 LDI R24,0x40
02A0 BF89 OUT 0x39,R24
(0251) LCD_init();
02A1 940E0069 CALL _LCD_init
(0252) /*初始化参数*/
(0253) zkb=1500;
02A3 ED8C LDI R24,0xDC
02A4 E095 LDI R25,5
02A5 939000A2 STS zkb+1,R25
02A7 938000A1 STS zkb,R24
(0254) t1=zkb/20;
02A9 E124 LDI R18,0x14
02AA E030 LDI R19,0
02AB 910000A1 LDS R16,zkb
02AD 911000A2 LDS R17,zkb+1
02AF 940E0405 CALL div16s
02B1 9310009E STS t1+1,R17
02B3 9300009D STS t1,R16
(0255) t2=(20000-zkb)/20;
02B5 902000A1 LDS R2,zkb
02B7 903000A2 LDS R3,zkb+1
02B9 E200 LDI R16,0x20
02BA E41E LDI R17,0x4E
02BB 1902 SUB R16,R2
02BC 0913 SBC R17,R3
02BD E124 LDI R18,0x14
02BE E030 LDI R19,0
02BF 940E0405 CALL div16s
02C1 9310009C STS t2+1,R17
02C3 9300009B STS t2,R16
(0256) zq=t1;
02C5 9020009D LDS R2,t1
02C7 9030009E LDS R3,t1+1
02C9 923000A0 STS zq+1,R3
02CB 9220009F STS zq,R2
(0257) // Global enable interrupts
(0258) SEI();
02CD 9478 BSET 7
02CE C03E RJMP 0x030D
(0259) while(1)
(0260) {
(0261) //settime();
(0262) // showtime();
(0263) delay2_nms(100);
02CF E604 LDI R16,0x64
02D0 E010 LDI R17,0
02D1 D048 RCALL _delay2_nms
(0264) zkb+=aa;
02D2 8429 LDD R2,Y+9
02D3 2433 CLR R3
02D4 904000A1 LDS R4,zkb
02D6 905000A2 LDS R5,zkb+1
02D8 0C42 ADD R4,R2
02D9 1C53 ADC R5,R3
02DA 925000A2 STS zkb+1,R5
02DC 924000A1 STS zkb,R4
(0265) if(zkb==500||zkb==2500){ //标准应该是1000至2000
02DE 918000A1 LDS R24,zkb
02E0 919000A2 LDS R25,zkb+1
02E2 3F84 CPI R24,0xF4
02E3 E0E1 LDI R30,1
02E4 079E CPC R25,R30
02E5 F041 BEQ 0x02EE
02E6 918000A1 LDS R24,zkb
02E8 919000A2 LDS R25,zkb+1
02EA 3C84 CPI R24,0xC4
02EB E0E9 LDI R30,0x9
02EC 079E CPC R25,R30
02ED F419 BNE 0x02F1
(0266) aa=-aa;
02EE 8429 LDD R2,Y+9
02EF 9421 NEG R2
02F0 8629 STD Y+9,R2
(0267) }
(0268) t1=zkb/20;
02F1 E124 LDI R18,0x14
02F2 E030 LDI R19,0
02F3 910000A1 LDS R16,zkb
02F5 911000A2 LDS R17,zkb+1
02F7 940E0405 CALL div16s
02F9 9310009E STS t1+1,R17
02FB 9300009D STS t1,R16
(0269) t2=(20000-zkb)/20;
02FD 902000A1 LDS R2,zkb
02FF 903000A2 LDS R3,zkb+1
0301 E200 LDI R16,0x20
0302 E41E LDI R17,0x4E
0303 1902 SUB R16,R2
0304 0913 SBC R17,R3
0305 E124 LDI R18,0x14
0306 E030 LDI R19,0
0307 940E0405 CALL div16s
0309 9310009C STS t2+1,R17
030B 9300009B STS t2,R16
030D CFC1 RJMP 0x02CF
030E 962C ADIW R28,0xC
030F 9508 RET
(0270) //////////////////////////////////////////////
(0271) /* LCD_write_char(0x01,0); //显示清屏
(0272) LCD_write_string(3,0,"Welcome");
(0273) LCD_write_string(1,1,"www.527dz.com!");
(0274) delay_nms(5000);
(0275) LCD_write_char(0x01,0); //显示清屏
(0276) LCD_write_string(0,0,"Tel:13308844201");
(0277) LCD_write_string(0,1,"527dz@527dz.com");
(0278) delay_nms(5000);*/
(0279) }
(0280) }
(0281) void delay2_1ms(void)//1ms延时函数
(0282) {
(0283) unsigned int i;
(0284) for (i=0;i<150;i++)
_delay2_1ms:
i --> R16
0310 2700 CLR R16
0311 2711 CLR R17
0312 C002 RJMP 0x0315
0313 5F0F SUBI R16,0xFF
0314 4F1F SBCI R17,0xFF
0315 3906 CPI R16,0x96
0316 E0E0 LDI R30,0
0317 071E CPC R17,R30
0318 F3D0 BCS 0x0313
0319 9508 RET
_delay2_nms:
i --> R20
n --> R22
031A 940E044A CALL push_gset2
031C 01B8 MOVW R22,R16
(0285) {
(0286) }
(0287) }
(0288)
(0289) void delay2_nms(unsigned int n)//延时n毫秒
(0290) {
(0291) unsigned int i;
(0292) for (i=0;i<n;i++)//执行n次1毫秒延时
031D 2744 CLR R20
031E 2755 CLR R21
031F C003 RJMP 0x0323
(0293) delay2_1ms();
0320 DFEF RCALL _delay2_1ms
0321 5F4F SUBI R20,0xFF
0322 4F5F SBCI R21,0xFF
0323 1746 CP R20,R22
0324 0757 CPC R21,R23
0325 F3D0 BCS 0x0320
0326 940E043B CALL pop_gset2
0328 9508 RET
FILE: E:\mcu\avr\test\1602_duoji\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void) //1us延时函数
(0006) {
(0007) asm("nop");
_delay_1us:
0329 0000 NOP
032A 9508 RET
_delay_nus:
i --> R20
n --> R22
032B 940E044A CALL push_gset2
032D 01B8 MOVW R22,R16
(0008) }
(0009)
(0010) void delay_nus(unsigned int n) //N us延时函数
(0011) {
(0012) unsigned int i=0;
032E 2744 CLR R20
032F 2755 CLR R21
(0013) for (i=0;i<n;i++)
0330 C003 RJMP 0x0334
(0014) delay_1us();
0331 DFF7 RCALL _delay_1us
0332 5F4F SUBI R20,0xFF
0333 4F5F SBCI R21,0xFF
0334 1746 CP R20,R22
0335 0757 CPC R21,R23
0336 F3D0 BCS 0x0331
0337 940E043B CALL pop_gset2
0339 9508 RET
(0015) }
(0016)
(0017) void delay_1ms(void) //1ms延时函数
(0018) {
(0019) unsigned int i;
(0020) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
033A 2700 CLR R16
033B 2711 CLR R17
033C C002 RJMP 0x033F
033D 5F0F SUBI R16,0xFF
033E 4F1F SBCI R17,0xFF
033F 3704 CPI R16,0x74
0340 E0E4 LDI R30,4
0341 071E CPC R17,R30
0342 F3D0 BCS 0x033D
0343 9508 RET
_delay_nms:
i --> R20
n --> R22
0344 940E044A CALL push_gset2
0346 01B8 MOVW R22,R16
(0021) }
(0022)
(0023) void delay_nms(unsigned int n) //N ms延时函数
(0024) {
(0025) unsigned int i=0;
0347 2744 CLR R20
0348 2755 CLR R21
(0026) for (i=0;i<n;i++)
0349 C003 RJMP 0x034D
(0027) delay_1ms();
034A DFEF RCALL _delay_1ms
034B 5F4F SUBI R20,0xFF
034C 4F5F SBCI R21,0xFF
034D 1746 CP R20,R22
034E 0757 CPC R21,R23
034F F3D0 BCS 0x034A
0350 940E043B CALL pop_gset2
0352 9508 RET
_delay:
a --> R20
n --> R16
0353 940E044C CALL push_gset1
FILE: E:\mcu\avr\test\1602_duoji\ds1302.c
(0001)
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include "1602LCD.h"
(0005) /************************************************
(0006) 延时程序
(0007) ************************************************/
(0008) void delay(uchar n)
(0009) {
(0010) uchar a;
(0011) for(a=0;a<n;a++)
0355 2744 CLR R20
0356 C001 RJMP 0x0358
0357 9543 INC R20
0358 1740 CP R20,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -