📄 yj12864.lst
字号:
_DS1302_init:
05FF 2722 CLR R18
0600 E80E LDI R16,0x8E
0601 DF77 RCALL _DS1302_writeD
(0197) DS1302_writeD(C_SEC|WR,CLK_START); //启动振荡器,DS1302开始工作
0602 2722 CLR R18
0603 E800 LDI R16,0x80
0604 DF74 RCALL _DS1302_writeD
(0198) DS1302_writeD(C_WP|WR,PROTECT); //控制命令,WP位为1,不允许写操作
0605 E820 LDI R18,0x80
0606 E80E LDI R16,0x8E
0607 DF71 RCALL _DS1302_writeD
0608 9508 RET
(0199) }
(0200) /*******************************************
(0201) 函数名称: BCD_ASCII
(0202) 功 能: 将压缩BCD码转换成ascii码
(0203) 参 数: BCD--将要转换的压缩BCD码
(0204) ptasc--转换后的ASCII码数组指针
(0205) 返回值 : 无
(0206) /********************************************/
(0207) void BCD_ASCII(uchar BCD,uchar *ptasc)
(0208) {
(0209) *ptasc=BCD/16|0x30; //转换十位
_BCD_ASCII:
ptasc --> R18
BCD --> R16
0609 2F80 MOV R24,R16
060A 9582 SWAP R24
060B 708F ANDI R24,0xF
060C 6380 ORI R24,0x30
060D 01F9 MOVW R30,R18
060E 8380 STD Z+0,R24
(0210) *(ptasc+1)=BCD&0x0F|0x30; //转换个位
060F 2F80 MOV R24,R16
0610 708F ANDI R24,0xF
0611 6380 ORI R24,0x30
0612 8381 STD Z+1,R24
0613 9508 RET
_Disp_time:
i --> Y+1
linex2_2 --> Y+34
linex2 --> Y+29
linex1_1 --> Y+24
linex1 --> Y+19
linex3 --> Y+2
asc --> Y+0
time --> R20
0614 940E0A80 CALL push_gset1
0616 01A8 MOVW R20,R16
0617 97A5 SBIW R28,0x25
(0211) }
(0212) /*******************************************
(0213) 函数名称: Disp_time
(0214) 功 能: 在1602液晶上显示当前时间(第1行格式:年-月-日 星期;第2行格式:时-分-秒)
(0215) 参 数: time[]--时间数组
(0216) 返回值 : 无
(0217) /********************************************/
(0218) void Disp_time(uchar time[])
(0219) {
(0220) uchar i,asc[2];
(0221) //uchar line1[11]={0,0,'-',0,0,'-',0,0,' ',0,'\0'};//显示第1行的字符数组
(0222) // uchar line2[9]={0,0,':',0,0,':',0,0,'\0'}; //显示第2行的字符数组
(0223)
(0224)
(0225) uchar linex1[5]={' ','0',' ','0','\0'};//显示第1行的字符数组
0618 E584 LDI R24,0x54
0619 E094 LDI R25,4
061A 01FE MOVW R30,R28
061B 9673 ADIW R30,0x13
061C E005 LDI R16,5
061D E010 LDI R17,0
061E 93FA ST R31,-Y
061F 93EA ST R30,-Y
0620 939A ST R25,-Y
0621 938A ST R24,-Y
0622 940E0A97 CALL asgncblk
(0226) uchar linex1_1[5]={' ','0',' ','0','\0'};//显示第1行的字符数组
0624 E589 LDI R24,0x59
0625 E094 LDI R25,4
0626 01FE MOVW R30,R28
0627 9678 ADIW R30,0x18
0628 E005 LDI R16,5
0629 E010 LDI R17,0
062A 93FA ST R31,-Y
062B 93EA ST R30,-Y
062C 939A ST R25,-Y
062D 938A ST R24,-Y
062E 940E0A97 CALL asgncblk
(0227) uchar linex2[5]={' ',0,' ',0,'\0'};//显示第1行的字符数组
0630 E58E LDI R24,0x5E
0631 E094 LDI R25,4
0632 01FE MOVW R30,R28
0633 967D ADIW R30,0x1D
0634 E005 LDI R16,5
0635 E010 LDI R17,0
0636 93FA ST R31,-Y
0637 93EA ST R30,-Y
0638 939A ST R25,-Y
0639 938A ST R24,-Y
063A 940E0A97 CALL asgncblk
(0228) uchar linex2_2[3]={' ','0','\0'};//显示第1行的字符数组
063C E683 LDI R24,0x63
063D E094 LDI R25,4
063E 01FE MOVW R30,R28
063F 96B2 ADIW R30,0x22
0640 E003 LDI R16,3
0641 E010 LDI R17,0
0642 93FA ST R31,-Y
0643 93EA ST R30,-Y
0644 939A ST R25,-Y
0645 938A ST R24,-Y
0646 940E0A97 CALL asgncblk
(0229) uchar linex3[17]={' ',0,' ',0,' ',':',' ','0',' ','0',' ',':',' ','0',' ','0','\0'};//显示第1行的字符数组
0648 E686 LDI R24,0x66
0649 E094 LDI R25,4
064A 01FE MOVW R30,R28
064B 9632 ADIW R30,2
064C E101 LDI R16,0x11
064D E010 LDI R17,0
064E 93FA ST R31,-Y
064F 93EA ST R30,-Y
0650 939A ST R25,-Y
0651 938A ST R24,-Y
0652 940E0A97 CALL asgncblk
(0230) // uchar linex4[11]={'\0'};//显示第1行的字符数组
(0231)
(0232)
(0233) /*
(0234) for(i=0;i<3;i++) //为第2行的字符数组赋值
(0235) {
(0236) BCD_ASCII(time[2-i],asc);
(0237) line2[i*3]=asc[0]&0x7F;
(0238) line2[i*3+1]=asc[1];
(0239) } */
(0240)
(0241) BCD_ASCII(time[0],asc); //秒 //为第1行的年赋值
0654 019E MOVW R18,R28
0655 01FA MOVW R30,R20
0656 8100 LDD R16,Z+0
0657 DFB1 RCALL _BCD_ASCII
(0242) linex3[13]=asc[0];
0658 8028 LDD R2,Y+0
0659 862F STD Y+15,R2
(0243) linex3[15]=asc[1];
065A 8029 LDD R2,Y+1
065B 8A29 STD Y+17,R2
(0244)
(0245) BCD_ASCII(time[1],asc); //分 //为第1行的年赋值
065C 019E MOVW R18,R28
065D 01FA MOVW R30,R20
065E 8101 LDD R16,Z+1
065F DFA9 RCALL _BCD_ASCII
(0246) linex3[7]=asc[0];
0660 8028 LDD R2,Y+0
0661 8629 STD Y+9,R2
(0247) linex3[9]=asc[1];
0662 8029 LDD R2,Y+1
0663 862B STD Y+11,R2
(0248)
(0249) BCD_ASCII(time[2],asc); //时 //为第1行的年赋值
0664 019E MOVW R18,R28
0665 01FA MOVW R30,R20
0666 8102 LDD R16,Z+2
0667 DFA1 RCALL _BCD_ASCII
(0250) linex3[1]=asc[0];
0668 8028 LDD R2,Y+0
0669 822B STD Y+3,R2
(0251) linex3[3]=asc[1];
066A 8029 LDD R2,Y+1
066B 822D STD Y+5,R2
(0252)
(0253)
(0254) BCD_ASCII(time[6],asc); //年 //为第1行的年赋值
066C 019E MOVW R18,R28
066D 01FA MOVW R30,R20
066E 8106 LDD R16,Z+6
066F DF99 RCALL _BCD_ASCII
(0255) linex1[1]=asc[0];
0670 8028 LDD R2,Y+0
0671 8A2C STD Y+20,R2
(0256) linex1[3]=asc[1];
0672 8029 LDD R2,Y+1
0673 8A2E STD Y+22,R2
(0257)
(0258) BCD_ASCII(time[4],asc); //月 //为第1行的年赋值
0674 019E MOVW R18,R28
0675 01FA MOVW R30,R20
0676 8104 LDD R16,Z+4
0677 DF91 RCALL _BCD_ASCII
(0259) linex1_1[1]=asc[0];
0678 8028 LDD R2,Y+0
0679 8E29 STD Y+25,R2
(0260) linex1_1[3]=asc[1];
067A 8029 LDD R2,Y+1
067B 8E2B STD Y+27,R2
(0261)
(0262) BCD_ASCII(time[3],asc); //日 //为第1行的年赋值
067C 019E MOVW R18,R28
067D 01FA MOVW R30,R20
067E 8103 LDD R16,Z+3
067F DF89 RCALL _BCD_ASCII
(0263) linex2[1]=asc[0];
0680 8028 LDD R2,Y+0
0681 8E2E STD Y+30,R2
(0264) linex2[3]=asc[1];
0682 8029 LDD R2,Y+1
0683 A228 STD Y+32,R2
(0265)
(0266)
(0267) BCD_ASCII(time[5],asc); //星期 //为第1行的年赋值
0684 019E MOVW R18,R28
0685 01FA MOVW R30,R20
0686 8105 LDD R16,Z+5
0687 DF81 RCALL _BCD_ASCII
(0268) linex2_2[1]=asc[1];
0688 8029 LDD R2,Y+1
0689 A22B STD Y+35,R2
(0269)
(0270)
(0271) while(LCD12864_readBF());
068A DDED RCALL _LCD12864_readBF
068B 2300 TST R16
068C F7E9 BNE 0x068A
(0272) LCD12864_gotoXY(1,0); //第1行,第1列显示
068D 2722 CLR R18
068E E001 LDI R16,1
068F DDF6 RCALL _LCD12864_gotoXY
(0273) // Delayms(200);
(0274) LCD12864_sendstr(" 2 0");
0690 EE01 LDI R16,0xE1
0691 E011 LDI R17,1
0692 DDCB RCALL _LCD12864_sendstr
(0275) LCD12864_sendstr(linex1);
0693 018E MOVW R16,R28
0694 5E0D SUBI R16,0xED
0695 4F1F SBCI R17,0xFF
0696 DDC7 RCALL _LCD12864_sendstr
(0276) LCD12864_sendstr("年");
0697 ED0E LDI R16,0xDE
0698 E011 LDI R17,1
0699 DDC4 RCALL _LCD12864_sendstr
(0277) LCD12864_sendstr(linex1_1);
069A 018E MOVW R16,R28
069B 5E08 SUBI R16,0xE8
069C 4F1F SBCI R17,0xFF
069D DDC0 RCALL _LCD12864_sendstr
(0278) LCD12864_sendstr("月");
069E ED0B LDI R16,0xDB
069F E011 LDI R17,1
06A0 DDBD RCALL _LCD12864_sendstr
(0279)
(0280) // while(LCD12864_readBF());
(0281) LCD12864_gotoXY(2,0); //第2行,第3列显示
06A1 2722 CLR R18
06A2 E002 LDI R16,2
06A3 DDE2 RCALL _LCD12864_gotoXY
(0282) // Delayms(200);
(0283) LCD12864_sendstr(linex2);
06A4 018E MOVW R16,R28
06A5 5E03 SUBI R16,0xE3
06A6 4F1F SBCI R17,0xFF
06A7 DDB6 RCALL _LCD12864_sendstr
(0284) LCD12864_sendstr("号");
06A8 ED08 LDI R16,0xD8
06A9 E011 LDI R17,1
06AA DDB3 RCALL _LCD12864_sendstr
(0285) LCD12864_sendstr(" 星期");
06AB ED01 LDI R16,0xD1
06AC E011 LDI R17,1
06AD DDB0 RCALL _LCD12864_sendstr
(0286) LCD12864_sendstr(linex2_2);
06AE 018E MOVW R16,R28
06AF 5D0E SUBI R16,0xDE
06B0 4F1F SBCI R17,0xFF
06B1 DDAC RCALL _LCD12864_sendstr
(0287) // while(LCD12864_readBF());
(0288) LCD12864_gotoXY(3,0); //第2行,第3列显示
06B2 2722 CLR R18
06B3 E003 LDI R16,3
06B4 DDD1 RCALL _LCD12864_gotoXY
(0289) // Delayms(200);
(0290) LCD12864_sendstr(linex3);
06B5 018E MOVW R16,R28
06B6 5F0E SUBI R16,0xFE
06B7 4F1F SBCI R17,0xFF
06B8 DDA5 RCALL _LCD12864_sendstr
(0291) while(LCD12864_readBF());
06B9 DDBE RCALL _LCD12864_readBF
06BA 2300 TST R16
06BB F7E9 BNE 0x06B9
(0292) LCD12864_gotoXY(4,2); //第2行,第3列显示
06BC E022 LDI R18,2
06BD E004 LDI R16,4
06BE DDC7 RCALL _LCD12864_gotoXY
(0293) // Delayms(200);
(0294) LCD12864_sendstr("4 取消");
06BF EC0A LDI R16,0xCA
06C0 E011 LDI R17,1
06C1 DD9C RCALL _LCD12864_sendstr
06C2 96A5 ADIW R28,0x25
06C3 940E0A83 CALL pop_gset1
06C5 9508 RET
_shizhong:
dis_y --> Y+1
dis_x --> Y+1
shift --> Y+1
setdat --> Y+1
setadd --> Y+1
settime --> Y+7
set_num --> R20
i --> R10
gettime --> Y+0
RD_TFLAG --> R12
n --> R22
06C6 940E0A7A CALL push_gset4
06C8 972E SBIW R28,0xE
(0295)
(0296)
(0297) /*
(0298) BCD_ASCII(time[6],asc); //为第1行的年赋值
(0299) line1[0]=asc[0];
(0300) line1[1]=asc[1];
(0301) BCD_ASCII(time[4],asc); //为第1行的月赋值
(0302) line1[3]=asc[0];
(0303) line1[4]=asc[1];
(0304) BCD_ASCII(time[3],asc); //为第1行的日赋值
(0305) line1[6]=asc[0];
(0306) line1[7]=asc[1];
(0307) BCD_ASCII(time[5],asc); //为第1行的星期赋值
(0308) line1[9]=asc[1];
(0309)
(0310)
(0311) while(LCD12864_readBF());
(0312) LCD12864_gotoXY(2,1); //第1行,第1列显示
(0313) // Delayms(200);
(0314) LCD12864_sendstr("20");
(0315) LCD12864_sendstr(line1);
(0316) while(LCD12864_readBF());
(0317) LCD12864_gotoXY(3,2); //第2行,第3列显示
(0318) // Delayms(200);
(0319) LCD12864_sendstr(line2);
(0320)
(0321) LCD12864_gotoXY(4,2); //第2行,第3列显示
(0322) // Delayms(200);
(0323) LCD12864_sendstr("4 取消");
(0324)
(0325) */
(0326) /*
(0327)
(0328) while(LCD1602_readBF());
(0329) LCD1602_gotoXY(1,2); //第1行从第3个位置开始显示
(0330) LCD1602_sendstr("20"); //将07年显示为2007的形式
(0331) LCD1602_sendstr(line1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -