TG2518万年历原理图

合集下载

51单片机实现万年历程序

51单片机实现万年历程序

51单片机实现万年历程序51单片机实现万年历利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。

设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。

原理图:pcb图:源程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^0;//蜂鸣器控制口sbit timeadd=P2^1;//调节时间加sbit timesub=P2^2;//调节时间减sbit timeclk=P2^3;//闹钟设定键sbit timefun=P2^4;//时间设定键sbit lcdrs=P2^5;//液晶的命令和数据控制口sbit ledrw=P2^6;//液晶的写数据口sbit lcden=P2^7;//液晶显示模块的使能端sbit timeds=P3^3;//时钟芯片地址闸sbit timerw=P3^4;//时钟芯片读写sbit timeas=P3^5;//时钟芯片地址闸sbit timeen=P3^6;//时钟芯片片选uchar code table[]="20 - - week ";uchar code table1[]=" : : ";//要显示的字符串char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void write_zhou(uchar add,uchar date) {write_com(0x80+add);write_date(0x30+date);}void write_ds(uchar add,uchar date){ timeen=0;timeas=1;timeds=1;timerw=1;P1=add;timeas=0;timerw=0;P1=date;timerw=1;timeas=1;timeen=1;}uchar read_ds(uchar add){uchar ds_date;timeas=1;timeds=1;timerw=1;timeen=0;P1=add;timeas=0;timeds=0;P1=0xff;ds_date=P1;timeds=1;timeas=1;timeen=1;return ds_date;}void keyscan(){if(flag1==1)//用来关闭闹钟铃声{if(timeadd==0){delay(5);if(timeadd==0){while(!timeadd==0);flag1=0;}}if(timesub==0){delay(5);if(timesub==0){while(!timesub==0);flag1=0;}}}if(timefun==0){delay(5);if(timefun==0){while(!timefun);flag=1;numfun++;if(numfun==1){write_com(0x80+0x40+0x0a);write_com(0x0f);}if(numfun==2){write_com(0x80+0x40+0x07);write_com(0x0f);}if(numfun==3){write_com(0x80+0x40+0x04);write_com(0x0f);}if(numfun==4){write_com(0x80+0x0f);write_com(0x0f);}if(numfun==5){write_com(0x80+0x09);write_com(0x0f);}if(numfun==6){write_com(0x80+0x06);write_com(0x0f);}if(numfun==7){write_com(0x80+0x03);write_com(0x0f);}if(numfun==8){numfun=0;flag=0;}}}if(numfun!=0){if(timeadd==0){delay(5);while(!timeadd);if(numfun==1){miao++;if(miao==60)miao=0;write_sfm(9,miao);write_com(0x80+0x40+9);write_ds(0,miao);}if(numfun==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+6);write_ds(2,fen);}if(numfun==3){shi++;if(shi==24)shi=0;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week++;if(week==8)week=1;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri++;if(ri==32) ri=1;break;case 2:ri++;if(ri==30) ri=1;break;case 3:ri++;if(ri==32) ri=1;break;case 4:ri++;if(ri==31) ri=1;break;case 5:ri++;if(ri==32) ri=1;break;case 6:ri++;if(ri==31) ri=1;break;case 7:ri++;if(ri==32) ri=1;break;case 8:ri++;if(ri==32) ri=1;break;case 9:ri++;if(ri==31)ri=1;break;case 10:ri++;if(ri==32)ri=1;break;case 11:ri++;if(ri==31)ri=1;break;case 12:ri++;if(ri==32)ri=1;break;}}else if(leap&&yue==2){ri++;if(ri==30)ri=1;}else if(yue==2&&leap==0){ri++;if(ri==29)ri=1;}elseswitch(yue){case 1:ri++;if(ri==32) ri=1;break;case 3:ri++;if(ri==32) ri=1;break;case 4:ri++;if(ri==31) ri=1;break;case 5:ri++;if(ri==32) ri=1;break;case 6:ri++;if(ri==31) ri=1;break;case 7:ri++;if(ri==32) ri=1;break;case 8:ri++;if(ri==32) ri=1;break;case 9:ri++;if(ri==31) ri=1;break;case 10:ri++;if(ri==32) ri=1;break;case 11:ri++;if(ri==31) ri=1;break;case 12:ri++;if(ri==32) ri=1;break;}write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue++;if(yue==13)yue=0;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian++;if(nian==100)nian=0;leap=nian%4==0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}if(timesub==0){delay(5);while(!timesub);if(numfun==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+9);write_ds(0,miao);}if(numfun==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+6);write_ds(2,fen);}if(numfun==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week--;if(week==0)week=7;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri--;if(ri==0) ri=31;break;case 2:ri--;if(ri==0) ri=29;break;case 3:ri--;if(ri==0) ri=31;break;case 4:ri--;if(ri==0) ri=30;break;case 5:ri--;if(ri==0) ri=31;break;case 6:ri--;if(ri==0) ri=30;break;case 7:ri--;if(ri==0) ri=31;break;case 8:ri--;if(ri==0) ri=31;break;case 9:ri--;if(ri==0) ri=30;break;case 10:ri--;if(ri==0) ri=31;break;case 11:ri--;if(ri==0) ri=30;break;case 12:ri--;if(ri==0) ri=31;break;}}else if(leap&&yue==2){ri--;if(ri==0)ri=29;}else if(yue==2&&leap==0){ri--;if(ri==0)ri=28;}elseswitch(yue){case 1:ri--;if(ri==0) ri=31;break;case 3:ri--;if(ri==0) ri=31;break;case 4:ri--;if(ri==0) ri=30;break;case 5:ri--;if(ri==0) ri=31;break;case 6:ri--;if(ri==0) ri=30;break;case 7:ri--;if(ri==0) ri=31;break;case 8:ri--;if(ri==0) ri=31;break;case 9:ri--;if(ri==0) ri=30;break;case 10:ri--;if(ri==0) ri=31;break;case 11:ri--;if(ri==0) ri=30;break;case 12:ri--;if(ri==0) ri=31;break;}write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue--;if(yue==-1)yue=12;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian--;if(nian==-1)nian=99;leap=nian%4==0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}}}void set_alarm(){uchar ashi,afen,amiao;if(timeclk==0)//判断是否按下闹钟设定键{delay(5);//延时消抖if(timeclk==0){while(!timeclk);anumfun++;//按键次数加1if(anumfun==1){flag=1;write_com(0x80+0x40+0x0a);write_com(0x0f);}if(anumfun==2){flag=1;write_com(0x80+0x40+0x07);write_com(0x0f);}if(anumfun==3){flag=1;write_com(0x80+0x40+0x04);write_com(0x0f);}if(anumfun==4){flag=0;anumfun=0;}}}if(anumfun!=0){if(timeadd==0)//如果加功能键按下{delay(5);while(!timeadd);if(anumfun==1) //设定秒{amiao++;if(amiao==60)amiao=0;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);}if(anumfun==2){afen++;if(afen==60)afen=0;write_sfm(6,afen);write_com(0x80+0x40+6);write_ds(3,afen);}if(anumfun==3){ashi++;if(ashi==24)ashi=0;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);}}}if(anumfun!=0){if(timesub==0){delay(5);while(!timesub);if(anumfun==1){amiao--;if(amiao==-1)amiao=59;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);}if(anumfun==2){afen--;if(afen==-1)afen=59;write_sfm(6,afen);write_com(0x80+0x40+6);write_ds(3,afen);}if(anumfun==3){ashi--;if(ashi==-1)ashi=23;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);}}}}void init(){EA=1;//开总中断EX0=1;//开外部中断0IT0=1;//设定触发方式为负跳变沿有效lcden=0;//选通液晶显示屏ledrw=0;//设定液晶显示屏的读写方式为读write_com(0x38);//设置液晶显示模式为16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//打开显示,并使光标不显示也不闪烁write_com(0x06);//光标指针每次自动加1write_com(1);//清屏write_com(0x80);//送地址指针for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);//写到第二行for(num=0;num<11;num++){write_date(table1[num]);delay(5);}write_ds(0x0a,0x20);//开启时钟芯片振荡器write_ds(0x0b,0x26);//开启闹钟read_ds(0x0c);//读取时钟芯片c寄存器}void main(){init();while(1){keyscan();set_alarm();if(flag1==1)didi();if(flag==0){//读取时间miao=read_ds(0x00);fen=read_ds(0x02);shi=read_ds(0x04);yue=read_ds(0x08);ri=read_ds(0x07);nian=read_ds(0x09);week=read_ds(0x06);//写入液晶显示屏write_sfm(9,miao);write_sfm(6,fen);write_sfm(3,shi);write_nyr(2,nian);write_nyr(5,yue);write_nyr(8,ri);write_zhou(0x0f,week);}}}void exter() interrupt 0{flag1=1;read_ds(0x0c);//读时钟芯片c寄存器。

XH2518万年历芯片

XH2518万年历芯片

理图
8 公历/农历轮换显示
XH2518 公农历转换原理图
P23 脚下拉 30K
9 基本万年历+遥控控制七组开关 XH2518 房价表原理图(共两页) P22 脚/ P23 脚和 P26 脚各下拉
日光灯或马达+12 组房价表
30K,外挂 N 个 595
10 基本万年历+遥控控制七组开关 XH2518 房价表原理图(共两页) 22 脚和 P26 脚各下拉 30K,
3. 12/24 小时制切换: 在正常走时状态,按住“上调”键 3 秒钟,则可进行 12 小时制与 24 小时制的切换。 上电复位时,可默认为 24 小时制或 12 小时制,由选项决定。
2
地址:深圳市福田区深南中路安徽大厦创展中心1311-1312室 电话:83588274 传真:83588284
XH2518 万年历芯片应用手册
4. 开/关整点报时: 在正常走时状态,按一下“上调”键,则可以打开整点报时指示灯和整点报时功能;按一下“上调”键,则 可以关闭整点报时指示灯和整点报时功能。
5. 天数倒计时或顺计时(由选项决定) 在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示
P9 脚下拉 30K,外挂一个 595
2 基本万年历+农历 24 节气
XH2518 基本+24 节气原理图
P10 脚下拉 30K,外挂一个 595
3 基本万年历+四位天数倒计
XH2518 基本+正计或倒计原理图 P22 脚下拉 30K,外挂一个 595
4 基本万年历+四位天数正计
XH2518 基本+正计或倒计原理图 P22 脚和 P25 脚各下拉 30K,外

液晶显示万年历(汇编程序+原理图)

液晶显示万年历(汇编程序+原理图)

TEMPER_L EQU 40H;用于保存读出温度的高8位TEMPER_H EQU 41H;用于保存读出温度的低8位FLAG1 EQU 42H;是否检测到DS18B20标志位a_bit equ 43h ;数码管个位数存放内存位置b_bit equ 44h ;数码管十位数存放内存位置T_RST Bit P3.6 ;实时时钟复位线引脚T_CLK Bit P3.4 ;实时时钟时钟线引脚T_IO Bit P3.5 ;实时时钟数据线引脚SECOND EQU 45HMINUTE EQU 46HHOUR EQU 47HDAY EQU 48HMONTH EQU 49HWEEK EQU 4AHYEARL EQU 4BHCSA EQU p2.4CSB EQU p2.3rs EQU P2.2rw EQU P2.1E EQU P2.0COM EQU 21HDAT EQU 22Hcolumn EQU 23Hpagef EQU 24hcpage EQU 25Hccolumn EQU 26Hcodes EQU 27hcolumn2 EQU 28Hpagef2 equ 29hcpage2 EQU 2aHccolumn2 EQU 2bHcolumn3 EQU 2eHpagef3 equ 2fhcpage3 EQU 30Hccolumn3 EQU 31Hcolumn4 EQU 32Hpagef4 equ 33hcpage4 EQU 34Hccolumn4 EQU 35Hcolumn5 EQU 36Hpagef5 equ 37hcpage5 EQU 38Hccolumn5 EQU 39HORG 0LJMP STARTORG 3LJMP XX0ORG 13HLJMP XX1;*********************************************主程序开始START: MOV TMOD,#01HMOV TH0,#03CH ;置定时器初值(定时50ms)MOV TL0,#0B0HSETB TR0 ;启动定时器0MOV SP,#60H ;修改堆栈LCALL INT ;调用初始化子程序LCALL CLEAR ;调用清屏子程序;*********************************************固定显示字符mov column3,#48mov pagef3,#0mov codes,#8 ;年lcall writeleft2mov column4,#16mov pagef4,#0mov codes,#9 ;;;;;月lcall writeright2mov column4,#48mov pagef4,#0 ;;;;;;日mov codes,#10lcall writeright2mov column3,#0mov pagef3,#2 ;;;星mov codes,#11lcall writeleft2mov column3,#16mov pagef3,#2 ;;;;;;期mov codes,#12lcall writeleft2mov column4,#0mov pagef4,#2 ;;;;;; :mov codes,#13lcall writeright2mov column4,#32mov pagef4,#2mov codes,#13 ;;;;;; :lcall writeright2mov column4,#48mov pagef4,#4mov codes,#15 ;;;;;;;度lcall writeright2mov column,#16mov pagef,#0mov codes,#2 ;;;;;;;2lcall writeleftmov column,#24mov pagef,#0mov codes,#0 ;;;;;0lcall writeleftmov column4,#0mov pagef4,#4mov codes,#17 ;;;;;;;; 日lcall writeright2;************************** 笨小孩制作,860822lcall a26lcall a27lcall a28lcall a29lcall a30lcall a31lcall a32lcall a33lcall a34lcall a35lcall a36;*************************************************固定显示字符结束MOV DAY,#01H ;初始日期设为08年1月1日星期一MOV MONTH,#01HMOV YEARL,#08HLCALL SETDS1302 ;设置DS1302初始时间LCALL GET1302 ;从DS1302读取时间LCALL DISPLAY ;数码显示子程序MOV R3,#4 ;循环20次到一秒SETB EASETB EX0setb IT0SETB EX1SETB IT1LP1: JNB P3.1 ,QQ0 ;当p3.1口为低电平时跳过读取时间子程序lJMP QQ2QQ0: MOV TH0,#03CHMOV TL0,#0B0HSETB TR0MOV 93H,#0LCALL NIU ;将调整后的时间放入时分秒星期年月日寄存器中LCALL SETDS1302 ;设置DS1302初始时间LCALL GET1302 ;从DS1302读取时间LCALL DISPLAY ;用12864显示QQ2: JBC TF0,QQ1lJMP LP1QQ1: MOV TH0,#03CHMOV TL0,#0B0HLCALL GET1302 ;每过50Ms从DS1302读取一次时间LCALL DISPLAY;************************************节日控制程序开始,所有公历节日都能显示MOV A,49HCJNE A,#01H,ZZ0MOV A,48HCJNE A,#01H,VV0MOV 71H,#19LCALL A8MOV 70H,#18LCALL A7MOV 92H,#210LCALL A40MOV 91H,#210LCALL A41LJMP QQQVV0:CJNE A,#15H,SS0MOV 70H,#20LCALL A7MOV 71H,#21 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQSS0:LCALL HAHA LJMP QQQZZ0:CJNE A,#02H,ZZ1 MOV A,48HCJNE A,#14H,vv4 MOV 70H,#22 LCALL A7MOV 71H,#23 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQvv4:CJNE A,#02H,vv5 MOV 70H,#53 LCALL A7MOV 71H,#54 LCALL A8MOV 92H,#55 LCALL A40MOV 91H,#56 LCALL A41LJMP QQQvv5:CJNE A,#10H,SS99 MOV 70H,#41 LCALL A7MOV 71H,#57 LCALL A8MOV 92H,#58 LCALL A40MOV 91H,#59 LCALL A41LJMP QQQSS99:LCALL HAHA LJMP QQQYOU0:LJMP ZZ2ZZ1:CJNE A,#03H,YOU0 MOV A,48HCJNE A,#08H,VV6 MOV 70H,#24 LCALL A7MOV 71H,#25 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV6:CJNE A,#01H,VV7 MOV 70H,#41 LCALL A7MOV 71H,#57 LCALL A8MOV 92H,#60 LCALL A40MOV 91H,#61 LCALL A41LJMP QQQVV7:CJNE A,#03H,VV8 MOV 70H,#62 LCALL A7MOV 71H,#41 LCALL A8MOV 92H,#63 LCALL A40MOV 91H,#64 LCALL A41LJMP QQQVV8:CJNE A,#05H,VV9 MOV 70H,#65 LCALL A7MOV 71H,#66 LCALL A8MOV 92H,#67 LCALL A40MOV 91H,#68 LCALL A41LJMP QQQVV9:CJNE A,#12H,VV10LCALL A7MOV 71H,#70LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV10:CJNE A,#14H,VV11 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#71LCALL A40MOV 91H,#72LCALL A41LJMP QQQVV11:CJNE A,#15H,VV12 MOV 70H,#73LCALL A7MOV 71H,#74LCALL A8MOV 92H,#75LCALL A40MOV 91H,#76LCALL A41LJMP QQQVV12:CJNE A,#17H,VV13 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#77LCALL A40MOV 91H,#60LCALL A41LJMP QQQVV13:CJNE A,#21H,VV14 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8LCALL A40MOV 91H,#79LCALL A41LJMP QQQVV14:CJNE A,#22H,VV15 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#80LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV15:CJNE A,#23H,VV16 MOV 70H,#81LCALL A7MOV 71H,#82LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV16:CJNE A,#24H,VV17 MOV 70H,#83LCALL A7MOV 71H,#84LCALL A8MOV 92H,#85LCALL A40MOV 91H,#86LCALL A41LJMP QQQVV17:CJNE A,#25H,SS1 MOV 70H,#87LCALL A7MOV 71H,#62LCALL A8MOV 92H,#39LCALL A40MOV 91H,#88LCALL A41SS1:LCALL HAHA LJMP QQQYOU1:LJMP ZZ3ZZ2:CJNE A,#04H,YOU1 MOV A,48HCJNE A,#01H,VV1 MOV 70H,#26LCALL A7MOV 71H,#27LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV1:CJNE A,#04H,VV18 MOV 70H,#28LCALL A7MOV 71H,#29LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV18:CJNE A,#07H,VV19 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#89LCALL A40MOV 91H,#90LCALL A41LJMP QQQVV19:CJNE A,#22H,VV20 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#56LCALL A40MOV 91H,#91LJMP QQQVV20:CJNE A,#23H,SS2 MOV 70H,#92 LCALL A7MOV 71H,#93 LCALL A8MOV 92H,#94 LCALL A40MOV 91H,#75 LCALL A41LJMP QQQSS2:LCALL HAHA LJMP QQQYOU2:LJMP ZZ4ZZ3:CJNE A,#05H,YOU2 MOV A,48HCJNE A,#01H,VV2 MOV 70H,#30 LCALL A7MOV 71H,#31 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV2:CJNE A,#04H,VV3 MOV 70H,#32 LCALL A7MOV 71H,#33 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV3:CJNE A,#11H,VV21 MOV 70H,#34 LCALL A7MOV 71H,#35 LCALL A8MOV 92H,#210 LCALL A40LCALL A41LJMP QQQVV21:CJNE A,#05H,VV22 MOV 70H,#95LCALL A7MOV 71H,#96LCALL A8MOV 92H,#83LCALL A40MOV 91H,#204 LCALL A41LJMP QQQVV22:CJNE A,#08H,VV23 MOV 70H,#97LCALL A7MOV 71H,#98LCALL A8MOV 92H,#99LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV23:CJNE A,#12H,VV24 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#100 LCALL A40MOV 91H,#101 LCALL A41LJMP QQQVV24:CJNE A,#15H,VV25 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#102 LCALL A40MOV 91H,#103 LCALL A41LJMP QQQVV25:CJNE A,#17H,VV26LCALL A7MOV 71H,#57LCALL A8MOV 92H,#119 LCALL A40MOV 91H,#120 LCALL A41LJMP QQQVV26:CJNE A,#18H,VV27 MOV 70H,#62LCALL A7MOV 71H,#41LCALL A8MOV 92H,#121 LCALL A40MOV 91H,#122 LCALL A41LJMP QQQVV27:CJNE A,#20H,VV28 MOV 70H,#123 LCALL A7MOV 71H,#90LCALL A8MOV 92H,#124 LCALL A40MOV 91H,#125 LCALL A41LJMP QQQVV28:CJNE A,#23H,VV29 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#126 LCALL A40MOV 91H,#127 LCALL A41LJMP QQQVV29:CJNE A,#31H,ss3 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8LCALL A40MOV 91H,#129 LCALL A41LJMP QQQSS3:LCALL HAHA LJMP QQQYOU3:LJMP ZZ10ZZ4:CJNE A,#06H,YOU3 MOV A,48HCJNE A,#15H,VV30 MOV 70H,#36LCALL A7MOV 71H,#35LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV30:CJNE A,#01H,VV31 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#131 LCALL A40MOV 91H,#132 LCALL A41LJMP QQQVV31:CJNE A,#17H,VV32 MOV 70H,#83LCALL A7MOV 71H,#204 LCALL A8MOV 92H,#133 LCALL A40MOV 91H,#134 LCALL A41LJMP QQQVV32:CJNE A,#23H,VV33 MOV 70H,#135 LCALL A7MOV 71H,#79LCALL A8MOV 92H,#136 LCALL A40MOV 91H,#137 LCALL A41LJMP QQQVV33:CJNE A,#25H,VV34 MOV 70H,#62LCALL A7MOV 71H,#41LCALL A8MOV 92H,#138 LCALL A40MOV 91H,#56LCALL A41LJMP QQQVV34:CJNE A,#26H,SS4 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#139 LCALL A40MOV 91H,#140 LCALL A41LJMP QQQSS4:LCALL HAHA LJMP QQQYOU4:LJMP ZZ5ZZ10:CJNE A,#07H,YOU4 MOV A,48HCJNE A,#01H,VV35 MOV 70H,#141 LCALL A7MOV 71H,#142 LCALL A8MOV 92H,#106 LCALL A40MOV 91H,#107 LCALL A41LJMP QQQVV35:CJNE A,#02H,VV36 MOV 70H,#143 LCALL A7MOV 71H,#88LCALL A8MOV 92H,#144 LCALL A40MOV 91H,#145 LCALL A41LJMP QQQVV36:CJNE A,#07H,VV37 MOV 70H,#146 LCALL A7MOV 71H,#147 LCALL A8MOV 92H,#67LCALL A40MOV 91H,#68LCALL A41LJMP QQQVV37:CJNE A,#11H,VV38 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#23LCALL A40MOV 91H,#148 LCALL A41LJMP QQQVV38:CJNE A,#30H,SS10 MOV 70H,#149 LCALL A7MOV 71H,#150 LCALL A8MOV 92H,#24LCALL A40MOV 91H,#25LCALL A41LJMP QQQSS10:LCALL HAHA LJMP QQQYOU5:LJMP ZZ6ZZ5:CJNE A,#08H,YOU5 MOV A,48HCJNE A,#01H,VV39 MOV 70H,#37LCALL A7MOV 71H,#38LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV39:CJNE A,#08H,VV40 MOV 70H,#153 LCALL A7MOV 71H,#153 LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV40:CJNE A,#15H,SS5 MOV 70H,#146 LCALL A7MOV 71H,#147 LCALL A8MOV 92H,#154 LCALL A40MOV 91H,#155 LCALL A41LJMP QQQSS5:LCALL HAHA LJMP QQQYOU6:LJMP ZZ7ZZ6:CJNE A,#09H,YOU6 MOV A,48HCJNE A,#10H,VV41 MOV 70H,#39LCALL A7MOV 71H,#40LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV41:CJNE A,#08H,VV42LCALL A7MOV 71H,#57LCALL A8MOV 92H,#109 LCALL A40MOV 91H,#110 LCALL A41LJMP QQQVV42:CJNE A,#16H,VV43 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#111 LCALL A40MOV 91H,#112 LCALL A41LJMP QQQVV43:CJNE A,#20H,VV44 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#63LCALL A40MOV 91H,#113 LCALL A41LJMP QQQVV44:CJNE A,#27H,VV45 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#114 LCALL A40MOV 91H,#115 LCALL A41LJMP QQQVV45:CJNE A,#28H,vv75 MOV 70H,#116 LCALL A7MOV 71H,#117 LCALL A8LCALL A40MOV 91H,#90LCALL A41LJMP QQQVV75:CJNE A,#18H,ss6 LCALL A42LCALL A43LCALL A44LCALL A45MOV 92H,#205 LCALL A40MOV 91H,#199 LCALL A41LJMP QQQSS6:LCALL HAHA LJMP QQQYOU7:LJMP ZZ8ZZ7:CJNE A,#10H,YOU7 MOV A,48HCJNE A,#01H,VV46 MOV 70H,#41LCALL A7MOV 71H,#42LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV46:CJNE A,#04H,VV47 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#31LCALL A40MOV 91H,#118 LCALL A41LJMP QQQVV47:CJNE A,#06H,VV48 MOV 70H,#156 LCALL A7MOV 71H,#23MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV48:CJNE A,#08H,VV49 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#157 LCALL A40MOV 91H,#158 LCALL A41LJMP QQQVV49:CJNE A,#09H,VV50 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#159 LCALL A40MOV 91H,#160 LCALL A41LJMP QQQVV50:CJNE A,#10H,VV51 MOV 70H,#161 LCALL A7MOV 71H,#162 LCALL A8MOV 92H,#163 LCALL A40MOV 91H,#164 LCALL A41LJMP QQQVV51:CJNE A,#13H,VV52 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#165 LCALL A40MOV 91H,#166LJMP QQQVV52:CJNE A,#14H,VV53 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#167 LCALL A40MOV 91H,#168 LCALL A41LJMP QQQVV53:CJNE A,#15H,VV54 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#110 LCALL A40MOV 91H,#23LCALL A41LJMP QQQVV54:CJNE A,#16H,VV55 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#169 LCALL A40MOV 91H,#170 LCALL A41LJMP QQQVV55:CJNE A,#17H,VV56 MOV 70H,#73LCALL A7MOV 71H,#171 LCALL A8MOV 92H,#172 LCALL A40MOV 91H,#173 LCALL A41LJMP QQQVV56:CJNE A,#22H,VV57 MOV 70H,#174LCALL A7MOV 71H,#175 LCALL A8MOV 92H,#176 LCALL A40MOV 91H,#177 LCALL A41LJMP QQQVV57:CJNE A,#24H,VV58 MOV 70H,#178 LCALL A7MOV 71H,#179 LCALL A8MOV 92H,#41LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV58:CJNE A,#31H,SS7 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#180 LCALL A40MOV 91H,#181 LCALL A41LJMP QQQSS7:LCALL HAHA LJMP QQQYOU8:LJMP ZZ9ZZ8:CJNE A,#11H,YOU8 MOV A,48HCJNE A,#27H,VV59 MOV 70H,#43LCALL A7MOV 71H,#44LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV59:CJNE A,#08H,VV60LCALL A7MOV 71H,#41LCALL A8MOV 92H,#144 LCALL A40MOV 91H,#145 LCALL A41LJMP QQQVV60:CJNE A,#09H,VV61 MOV 70H,#73LCALL A7MOV 71H,#83LCALL A8MOV 92H,#87LCALL A40MOV 91H,#62LCALL A41LJMP QQQVV61:CJNE A,#10H,VV62 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#32LCALL A40MOV 91H,#8LCALL A41LJMP QQQVV62:CJNE A,#14H,VV63 MOV 70H,#183 LCALL A7MOV 71H,#184 LCALL A8MOV 92H,#86LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV63:CJNE A,#17H,VV64 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8LCALL A40MOV 91H,#90LCALL A41LJMP QQQVV64:CJNE A,#20H,SS8 MOV 70H,#185 LCALL A7MOV 71H,#186 LCALL A8MOV 92H,#8LCALL A40MOV 91H,#210 LCALL A41LJMP QQQSS8:LCALL HAHA LJMP QQQYOU9:LJMP SS9ZZ9:CJNE A,#12H,YOU9 MOV A,48HCJNE A,#25H,VV65 MOV 70H,#45LCALL A7MOV 71H,#46LCALL A8MOV 92H,#210 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV65:CJNE A,#01H,VV66 MOV 70H,#191 LCALL A7MOV 71H,#192 LCALL A8MOV 92H,#86LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV66:CJNE A,#03H,VV67 MOV 70H,#122 LCALL A7MOV 71H,#193MOV 92H,#23LCALL A40MOV 91H,#210 LCALL A41LJMP QQQVV67:CJNE A,#08H,VV68 MOV 70H,#131 LCALL A7MOV 71H,#132 LCALL A8MOV 92H,#194 LCALL A40MOV 91H,#157 LCALL A41LJMP QQQVV68:CJNE A,#09H,VV69 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#196 LCALL A40MOV 91H,#91LCALL A41LJMP QQQVV69:CJNE A,#10H,VV70 MOV 70H,#53LCALL A7MOV 71H,#54LCALL A8MOV 92H,#23LCALL A40MOV 91H,#197 LCALL A41LJMP QQQVV70:CJNE A,#12H,VV71 MOV 70H,#198 LCALL A7MOV 71H,#87LCALL A8MOV 92H,#205 LCALL A40MOV 91H,#199LJMP QQQVV71:CJNE A,#13H,VV72 MOV 70H,#200 LCALL A7MOV 71H,#201 LCALL A8MOV 92H,#202 LCALL A40MOV 91H,#203 LCALL A41LJMP QQQVV72:CJNE A,#20H,VV73 MOV 70H,#104 LCALL A7MOV 71H,#105 LCALL A8MOV 92H,#106 LCALL A40MOV 91H,#107 LCALL A41LJMP QQQVV73:CJNE A,#21H,VV74 MOV 70H,#41LCALL A7MOV 71H,#57LCALL A8MOV 92H,#108 LCALL A40MOV 91H,#91LCALL A41LJMP QQQVV74:CJNE A,#24H,ss9 MOV 70H,#151 LCALL A7MOV 71H,#87LCALL A8MOV 92H,#152 LCALL A40MOV 91H,#210 LCALL A41LJMP QQQri1:ljmp lp1ss9:LCALL HAHA;******************************************节日设置结束QQQ: DJNZ R3,SS100 ;未到1 S继续循环LCALL GET_TEMPER ;每过1s从DS18B20读取一次温度mov R3,#4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;整点闹铃1分钟同时在最左上角显示铃铛符号,合上闹铃开关可以提前关掉闹铃MOV A,46HCJNE A,#0,SS100LCALL NAOLCALL NAOLCALL NAOLCALL NAOLCALL NAOmov column3,#0mov pagef3,#0mov codes,#206 ;开闹铃符号lcall writeleft2SS100:MOV A,45HCJNE A,#59H,RI1mov column3,#0mov pagef3,#0mov codes,#210 ;关闹铃符号lcall writeleft2LJMP lp1;************************主程序结束,子程序开始HAHA:MOV 70H,#151LCALL A7MOV 71H,#52LCALL A8MOV 92H,#210LCALL A40MOV 91H,#210LCALL A41RETNIU:MOV A,51HSWAP AADD A,50HMOV 45H,Amov a,53hswap aadd a,52hmov 46h,amov a,55hadd a,54hmov 47h,amov a,57hswap aadd a,56hmov 48h,amov a,59hswap aadd a,58hmov 49h,amov a,5dhswap aadd a,5chmov 4bh,amov 4ah,5ahRET;********************************************中断0开始xx0:PUSH ACCclr tr0MOV A,93HCJNE A,#0,ZD0000 ;秒低位inc 50hLCALL A13mov A,50HCJNE A,#10,KK0MOV 50H,#0kk0:POP ACCRETIZD0000:CJNE A,#1,ZD001 ;秒高位inc 51hlcall a14MOV A,51HCJNE A,#10,KK1MOV 51H,#0kk1:POP ACCRETIZD001:CJNE A,#2,ZD002 ;分低位INC 52Hlcall a15MOV A,52HCJNE A,#10,KK3MOV 52H,#0kk3:POP ACCZD002:CJNE A,#3,ZD003 ;分高位INC 53Hlcall a16MOV A,53HCJNE A,#10,KK4MOV 53H,#0inc 52hkk4:POP ACCRETIzd003:CJNE A,#4,ZD004 ;时低位INC 54Hlcall a17MOV A,54HCJNE A,#10,KK5MOV 54H,#0kk5:POP ACCRETIZD004:CJNE A,#5,ZD005 ;时高位INC 55Hlcall a18MOV A,55HCJNE A,#9,KK6MOV 55H,#0kk6:POP ACCRETIZD005:CJNE A,#6,ZD006 ;星期INC 5aHlcall a19MOV A,5aHCJNE A,#7,KK7MOV 5aH,#0kk7:POP ACCRETIZD006:CJNE A,#7,ZD007 ;日低位INC 56Hlcall a20MOV A,56HCJNE A,#10,KK8MOV 56H,#0kk8:POP ACCRETIZD007:CJNE A,#8,ZD008 ;日高位INC 57Hlcall a21MOV A,57HCJNE A,#10,KK9MOV 57H,#0kk9:POP ACCRETIZD008:CJNE A,#9,ZD009 ;月低位INC 58Hlcall a22MOV A,58HCJNE A,#10,KK10MOV 58H,#0kk10:POP ACCRETIZD009:CJNE A,#10,ZD0010 ;月高位INC 59Hlcall a23MOV A,59HCJNE A,#10,KK11MOV 59H,#0kk11:POP ACCRETIZD0010:CJNE A,#11,ZD0011 ;年低位INC 5cHlcall a24MOV A,5cHCJNE A,#10,KK12MOV 5cH,#0kk12:POP ACCRETIZD0011:INC 5dHlcall a25 ;年高位MOV A,5dHCJNE A,#10,KK13MOV 5dH,#0kk13:POP ACCRETI;******************************************************中断1开始XX1:PUSH ACCINC 93HMOV A,02HCJNE A,#13,ZD10MOV 93H,#0ZD10:pop accreti;温度显示子程序------------------------------------------------------------------------------- INIT_1820: SETB P3.7CLR P3.7MOV R1,#3TSR1: MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P3.7MOV R0,#25HTSR2: JNB P3.7,TSR3DJNZ R0,TSR2LJMP TSR4TSR3: SETB FLAG1LJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6TSR7: SETB P3.7RETGET_TEMPER: SETB P3.7LCALL INIT_1820JB FLAG1,TSS2RETTSS2: MOV A,#0CCHLCALL WRITE_1820MOV A,#44HLCALL WRITE_1820LCALL DISPLAY1LCALL INIT_1820MOV A,#0CCHLCALL WRITE_1820MOV A,#0BEHLCALL WRITE_1820LCALL READ_18200RETWRITE_1820: MOV R2,#8CLR CWR1: CLR P3.7MOV R3,#6DJNZ R3,$RRC AMOV P3.7,CDJNZ R3,$SETB P3.7NOPDJNZ R2,WR1SETB P3.7RETREAD_18200: MOV R5,#2 MOV R1,#41hRE00: MOV R2,#8RE01: CLR CSETB P3.7CLR P3.7SETB P3.7MOV R3,#7RE10: DJNZ R3,RE10MOV C,P3.7MOV R3,#23RE20: DJNZ R3,RE20RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R5,RE00RETDISPLAY1:MOV A,40HJB ACC.7,ZF1mov column4,#16mov pagef4,#4mov codes,#250lcall writeright2ljmp zhijieZF1:mov column4,#16mov pagef4,#4mov codes,#16 ;;;;;;;;- lcall writeright2mov a,40hcpl amov dph,amov a,41hcpl amov dpl,ainc dptrmov 40h,dphzhijie:MOV A,40HSWAP AANL A,#0F0HMOV 40H,AMOV A,41HSWAP AANL A,#0FHADD A,40HMOV 41H,AMOV B,#10DIV ABMOV b_bit,AMOV a_bit,Bmov column2,#32mov pagef2,#4mov codes,b_bit ;;;;;;;;;十位lcall writerightmov column2,#40mov pagef2,#4mov codes,a_bit ;;;;;;;个位lcall writerightRET;--------------------------------------------------------------------------------------------------- ;数码显示子程序DISPLAY:;*******************************************;显示秒MOV A,SECONDANL A,#0FHMOV 50H,ALCALL A13MOV A,SECONDSWAP AANL A,#07HMOV 51H,ALCALL A14;*******************************************;显示分MOV A,MINUTEANL A,#0FHMOV 52H,ALCALL A15MOV A,MINUTESWAP AANL A,#07HMOV 53H,ALCALL A16;******************************************* ;显示小时MOV A,HOURANL A,#0FHMOV 54H,ALCALL A17MOV A,HOURSWAP AANL A,#03HMOV 55H,ALCALL A18;显示星期MOV A,WEEKMOV 5AH,ALCALL A19;显示日MOV A,DAYANL A,#0FHMOV 56H,ALCALL A20MOV A,DAYSWAP AANL A,#03HMOV 57H,ALCALL A21;显示月MOV A,MONTHANL A,#0FHMOV 58H,ALCALL A22MOV A,MONTHSWAP AANL A,#03HMOV 59H,ALCALL A23;显示年MOV A,YEARLANL A,#0FHMOV 5CH,ALCALL A24MOV A,YEARLSWAP AANL A,#0FHMOV 5DH,ALCALL A25RET;--------------------------------------------------------------------------------------------------- ;设置DS1302初始时间,并启动计时SETDS1302:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,#8EH ;写控制命令字LCALL INPUTBYTEMOV B,#00H ;写保护关闭LCALL INPUTBYTESETB T_CLKnopCLR T_RSTMOV R0,#SECOND ;内存中的时间首地址MOV R1,#80H ;DS1302中的时间首地址MOV R7,#7 ;字节数SETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1 ;写命令字LCALL INPUTBYTEMOV A,@R0 ;设置时间MOV B,ALCALL INPUTBYTEINC R0INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,SETLOOPCLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,#8EHLCALL INPUTBYTEMOV B,#80H ;开写保护LCALL INPUTBYTESETB T_CLKnopCLR T_RSTnopRET;---------------------------------------------------------------------------------------------------;从DS1302读取时间GET1302:MOV R0,#SECONDMOV R1,#81H ;DS1302中读时间的首地址MOV R7,#7GETLOOP:CLR T_RSTnopCLR T_CLKnopSETB T_RSTnopMOV B,R1LCALL INPUTBYTE ;写命令字LCALL OUTPUTBYTE ;读时间MOV @R0,A ;将从DS1302中读取的时间从内存中保存INC R0 ;修改地址指针INC R1INC R1SETB T_CLKnopCLR T_RSTnopDJNZ R7,GETLOOPRET;---------------------------------------------------------------------------------------------------;向DS1302写一个字节MOV R4,#8INPUTLOOP:MOV A,BRRC AMOV B,AMOV T_IO,CSETB T_CLKNOP;NOP;NOPCLR T_CLKDJNZ R4,INPUTLOOPRET;--------------------------------------------------------------------------------------------------- ;从DS1302读一个字节OUTPUTBYTE:clr aclr cMOV R4,#8OUTPUTLOOP:NOPMOV C,T_IORRC ASETB T_CLKNOPCLR T_CLKDJNZ R4,OUTPUTLOOPRETwriteleft2: ; 左半屏写入16*16汉字子程序mov dptr,#table2push column3mov cpage3,#2mov ccolumn3,#0mov a,pagef3anl a,#07horl a,#0b8hmov com,alcall prm0mov a,column3anl a,#3fhorl a,#40hmov com,alcall prm0mov b,#32mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,alp3:mov a,#00hmovc a,@a+dptrmov dat,alcall prm1inc ccolumn3mov a,ccolumn3inc dptrcjne a,#16,lp3dec cpage3inc pagef3mov a,cpage3jz over3mov a,pagef3anl a,#07horl a,#0b8hmov com,alcall prm0pop column3mov a,column3anl a,#3fhorl a,#40hmov com,alcall prm0mov ccolumn3,#0ljmp lp3over3:retwriteright2: ; 右半屏写入16*16汉字子程序mov dptr,#table2push column4mov cpage4,#2mov ccolumn4,#0mov a,pagef4anl a,#07horl a,#0b8hmov com,alcall prr0anl a,#3fhorl a,#40hmov com,alcall prr0mov a,codesmov b,#32mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,alp4:mov a,#00hmovc a,@a+dptrmov dat,alcall prr1inc ccolumn4mov a,ccolumn4inc dptrcjne a,#16,lp4dec cpage4inc pagef4mov a,cpage4jz over4mov a,pagef4anl a,#07horl a,#0b8hmov com,alcall prr0pop column4mov a,column4anl a,#3fhorl a,#40hmov com,alcall prr0mov ccolumn4,#0ljmp lp4over4:retwriteleft: ; 左半屏写入8*16数字子程序mov dptr,#table1push columnmov cpage,#2mov ccolumn,#0anl a,#07horl a,#0b8hmov com,alcall prm0mov a,columnanl a,#3fhorl a,#40hmov com,alcall prm0mov a,codesmov b,#16mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,alOOp1:mov a,#00h movc a,@a+dptr mov dat,alcall prm1inc ccolumnmov a,ccolumn inc dptrcjne a,#8,lOOp1 dec cpageinc pagefmov a,cpagejz over1mov a,pagefanl a,#07horl a,#0b8hmov com,alcall prm0pop columnmov a,columnanl a,#3fhorl a,#40hmov com,alcall prm0mov ccolumn,#0 ljmp lOOp1over1:retwriteright: ; 右半屏写入8*16数字子程序mov dptr,#table1push column2mov cpage2,#2mov ccolumn2,#0mov a,pagef2anl a,#07horl a,#0b8hmov com,alcall prr0mov a,column2anl a,#3fhorl a,#40hmov com,alcall prr0mov a,codesmov b,#16mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,alOOp2:mov a,#00hmovc a,@a+dptrmov dat,alcall prr1inc ccolumn2mov a,ccolumn2inc dptrcjne a,#8,lOOp2dec cpage2inc pagef2mov a,cpage2jz over2mov a,pagef2anl a,#07horl a,#0b8hmov com,alcall prr0pop column2mov a,column2anl a,#3fhorl a,#40hmov com,alcall prr0mov ccolumn2,#0ljmp lOOp2over2:retPRM0:CLR CSA ;写指令代码子程序(左) SETB CSBCLR rsSETB rwPRM01:MOV P0,#0FFHSETB EMOV A,P0CLR EJB ACC.7,PRM01CLR rwMOV P0,COMSETB ECLR ERETPRM1:CLR CSA ;写显示数据子程序(左) SETB CSBCLR rsSETB rwPRM11:MOV P0,#0FFHSETB EMOV A,P0CLR EJB ACC.7,PRM11SETB rsCLR rwMOV P0,DATSETB ECLR ERETPRR0:CLR CSB ;写指令代码子程序(右) SETB CSACLR rsSETB rwPRR01:MOV P0,#0FFHSETB EMOV A,P0CLR EJB ACC.7,PRR01CLR rwMOV P0,COMSETB ECLR ERETPRR1:CLR CSB ;写显示数据子程序(右)SETB CSACLR rsSETB rwPRR11:MOV P0,#0FFHSETB EMOV A,P0CLR EJB ACC.7,PRR11SETB rsCLR rwMOV P0,DATSETB ECLR ERETINT:MOV COM,#0C0H ;初始化子程序,设置显示起始行为第一行LCALL PRM0LCALL PRR0MOV COM,#3FH ;开显示设置LCALL PRM0LCALL PRR0RETCLEAR:MOV R4,#00H ;清屏子程序CLEAR1:MOV A,R4ORL A,#0B8HMOV COM,ALCALL PRM0LCALL PRR0MOV COM,#40HLCALL PRM0LCALL PRR0MOV R3,#40HCLEAR2:MOV DAT,#00HLCALL PRM1LCALL PRR1DJNZ R3,CLEAR2INC R4CJNE R4,#08H,CLEAR1RET;***********************************************节日子程序A7:mov column3,#0mov pagef3,#4mov codes,70Hlcall writeleft2RETA8:mov column3,#16mov pagef3,#4mov codes,71Hlcall writeleft2RETA40:mov column3,#32mov pagef3,#4mov codes,92Hlcall writeleft2RETA41:mov column3,#48mov pagef3,#4mov codes,91Hlcall writeleft2RETA42:mov column,#0mov pagef,#4mov codes,#9 ;;;;;;;9lcall writeleftRETA43:mov column3,#8mov pagef3,#4mov codes,#207 ;;;;;.lcall writeleft2RETA44:mov column,#16mov pagef,#4mov codes,#1 ;;;;;;;1lcall writeleftRETA45:mov column,#24mov pagef,#4mov codes,#8 ;;;;;8lcall writeleftRET;********************************************************** A13:mov column2,#56。

自己制作的单片机万年历程序+原理图

自己制作的单片机万年历程序+原理图

自己制作的单片机万年历程序+原理图单片机万年历仿真原理图如下仿真Altium Designer画的万年历原理图和PCB图如下:PCB原理图基于51单片机,可以完成时钟显示、公历显示、农历显示、温度显示、闹钟报警定时的LCD时钟PPT内容预览:本设计使用AT89C51来做主控芯片,其强大的功能足够实现我们设计的所有功能。

使用LCD1602的液晶显示器来进行显示。

使用Keil uVision5进行编程。

通过Proteus8.6来进行仿真。

点击一次K1进入时钟设置页面,通过点击K2切换时、秒、分、星期、年、月、日,通过K3与K4实现加减来完成时钟的设置点击两次K1进入闹钟设置页面,通过点击K2切换开关、时、秒、分,通过K3与K4实现加减完成闹钟的设置。

单片机源程序如下注释是很全的#include //调用单片机头文件#define uchar unsigned char //无符号字符型宏定义变量范围0~255#define uint unsigned int //无符号整型宏定义变量范围0~65535#include "eeprom52.h"#include "nongli.h"#include "intrins.h"bit flag_200ms ;bit flag_100ms ;sbit beep = P3^7; //蜂鸣器定义bit flag_beep_en;uint clock_value; //用作闹钟用的sbit dq = P3^1; //18b20 IO口的定义uint temperature ; //温度变量uchar flag_nl; //农历阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value; //用做连加的中间变量bit key_500ms ;uchar n_nian,n_yue,n_ri; //农历显示的函数#include "ds1302.h"#include "lcd1602.h"/******************把数据保存到单片机内部eeprom中******************/void write_eeprom(){SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002, open1);byte_write(0x2058, a_a);}/******************把数据从单片机内部eeprom中读出来*****************/void read_eeprom(){fen1 = byte_read(0x2000);shi1 = byte_read(0x2001);open1 = byte_read(0x2002);a_a = byte_read(0x2058);}/**************开机自检eeprom初始化*****************/void init_eeprom(){read_eeprom(); //先读if(a_a != 1) //新的单片机初始单片机内问eeprom{fen1 = 3;shi1 = 8;a_a = 1;write_eeprom(); //保存数据}}/***********************18b20初始化函数*****************************/void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲delay_uint(80); //750usdq = 1; //把总线拿高等待delay_uint(10); //110usq = dq; //读取18b20初始化信号delay_uint(20); //200usdq = 1; //把总线拿高释放总线}/*************写18b20内的数据***************/void write_18b20(uchar dat){uchar i;for(i=0;i<8;i++){ //写数据是低位开始dq = 0; //把总线拿低写时间隙开始dq = dat & 0x01; //向18b20总线写数据了delay_uint(5); // 60usdq = 1; //释放总线}}/*************读取18b20内的数据***************/uchar read_18b20(){uchar i,value;for(i=0;i<8;i++){dq = 0; //把总线拿低读时间隙开始value >>= 1; //读数据是低位开始dq = 1; //释放总线if(dq == 1) //开始读写数据value |= 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us 的时间}return value; //返回数据}/*************读取温度的值读出来的是小数***************/uint read_temp(){uint value;uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令delay_uint(50); //500usinit_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe); //发出读取暂存器命令EA = 0;low = read_18b20(); //读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8位value |= low; //把读出的温度低位放到value的低八位中value *= 0.625; //转换到温度值小数return value; //返回读出的温度带小数}/******************1ms 延时函数*******************/void delay_1ms(uint q){uint i,j;for(i=0;i<>< p=""><>for(j=0;j<120;j++);}/******************写星期函数*******************/void write_week(uchar hang,uchar add,uchar week)//写星期函数{if(hang==1)write_com(0x80+add);elsewrite_com(0x80+0x40+add);。

智能单片机万年历时钟电路讲解

智能单片机万年历时钟电路讲解

一、设计任务与要求:本设计准备实现的功能:(1) 显示公历日期功能(年、月、日、星期)。

(2) 可通过按键切换年、月、日、星期的显示状态。

(3) 可随时调校年、月、日及星期。

(4) 可每次增减一进行时间调节。

(5) 可动态完整显示年份,实现真正的万年历显示。

二、方案设计与论证:1.方案一:通过一段时间对专业书籍及多种设计方案的研究及分析,在计数电路芯片的选择上可以采用74LS160或74LS90,在实现的电路中有两种方案来实现清零(异步置数和同步清零);对于实现年、月、日、星期的显示,可采用LED液晶显示屏、点阵式数码管、LED数码管中的一种;在实现年、月、日、星期的校时方面,可设置K3 、K2、K1三个开关分别作为年、月、日的校时控制开关,由于“日”与“星期”同步,因而控制“日”的同时也控制了“星期”。

另外通过按钮开关可以在日期与时间间切换和对时钟进行调整。

该方案的系统原理框图如下:图中各单元电路的工作原理如下:(1)计数器电路:包括年计数器、月计数器、日计数器、星期计数器四部分。

各部分分别完成对“年”、“月”、“日”、“星期”的计数。

(2)译码显示电路:译码显示电路的功能是将年、月、日、星期计数器输出的4位二进制码进行翻译后显示出相应的十进制数字。

(3)校时电路:当数字钟计时出现误差时,必须对时间进行校正,通常称为“校时”,校时是数字钟应该具备的基本功能,一般要求能对年、月、日分别进行校正。

2.方案二:对于本题目的设计,我们不仅可以运用以前学过的课程——《数字电路逻辑设计》里边的知识来完成,也可以运用我们所学过的单片机知识来完成本设计,我们可以直接用叫简单的单片机芯片AT89C51再加上其周围的外设电路结构来完成。

该方案的系统原理框图如下:图中各单元电路的工作原理如下:(1)晶体电路:晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。

不管是指针式的电子钟还是数字显示的电子钟都使用了晶体荡器电路。

TG2518应用手册

TG2518应用手册
八 兼容TG2488/TG2498
TG2518芯片可直接兼容TG2488/TG2498,如果兼容后要要做流水鸟叫功能需按下图示稍做修改:
1.用户可在原用TG2488/TG2498方案LAY的PCB板上加一个开关即可实现此功能,在芯片P15脚与P20脚之间加一个轻触开关SW1即可.
2.如需要调节流水鸟叫声音的大小,可参考下图增加一个4.7K欧的电位器VR,串接在R1到Q9基极间。
16.流水鸟叫
在走时状态下按一下“流水鸟叫”键打开流水鸟叫功能,再按一下开关关闭流水鸟叫功能。
三 电气参数
1.工作电压:DC2.4—5.5V
2.静态电流:不大于3UA
3.工作电流:视版面而不同
4.工作温度:-1℃~+70℃(但温度显示围是-9~+50℃)
四 键盘矩阵图及功能定义
※:以下PX表示芯片引脚
TG2518自动开关灯原理图
P8脚和P26脚各下拉30K
12
带秒跳基本万年历
TG2518有秒基本原理图
P26脚下拉30K
13
用蜂鸣器代替喇叭
TG2518有秒基本原理图
P26Байду номын сангаас下拉30K,P8与P9或P10短接
14
用2个米字管显示星期
(英/德/意/法/西5国可选)
TG2518五十年版米字管原理图
P12脚和P26脚各下拉30K+所选国家选项下拉(原理图有说明),P8脚和P11脚短接
5.天数倒计时或顺计时(由选项决定)
在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“――――”,表示计时“无效”;若显示具体数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且左边第一位(千位)闪烁,按“上调”或“下调”键修改容,按“设置”键移动闪烁位置到第二位(百位),按“上调”或“下调”键修改闪烁位的容,同样方法可设置十位与个位。

12864大字符万年历程序加原理图

12864大字符万年历程序加原理图

/***************************************************************************** ///头文件#include <AT89X52.h>#include <string.h>#include <intrins.h>#include "SoundPlay.h"//音乐文件#define uchar unsigned char#define uint unsigned int/***************************************************************************** ///扬声器定义sbit beep = P3^7;//扬声器/***************************************************************************** ///温度传感器定义sbit DQ = P2 ^ 0;//ds18B20uint tvalue;//温度值uchar tflag,flagdat,t,hh1;//温度正负标志/***************************************************************************** ///键盘引脚定义//sbit KEY_1 = P2^7; //左上sbit KEY_2 = P2^6; //左下sbit KEY_3 = P2^5; //右上sbit KEY_4 = P2^4; //右下/****************************************************************************/ //LCD接口定义sbit RS = P1^5;//模式位,为0输入指令,为1输入数据sbit RW = P1^6;//读写位,为0读,为1写sbit E = P1^7;//使能位#define Lcd_Bus P0 //数据总线/***************************************************************************** ///定义DS1302时钟接口sbit clock_clk = P2 ^ 1;//ds1302_clk(时钟线)sbit clock_dat = P2 ^ 2;//ds1302_dat(数据线)sbit clock_Rst = P2 ^ 3;//ds1302_Rst(复位线)//定义累加器A中的各位sbit a0 = ACC ^ 0;sbit a1 = ACC ^ 1;sbit a2 = ACC ^ 2;sbit a3 = ACC ^ 3;sbit a4 = ACC ^ 4;sbit a5 = ACC ^ 5;sbit a6 = ACC ^ 6;sbit a7 = ACC ^ 7;/****************************************************************************/ //定义全局变量unsigned char yy,mo,dd,xq,hh,mm,ss,n,n1,n2,hh1,mm1,year,year1;//定义时间映射全局变量(专用寄存器)unsigned char shi,ge,sec_temp,min_temp,hour_temp,secl,selx,e=0;bit w = 0; //调时标志位static unsigned char menu = 0;//定义静态小时更新用数据变量static unsigned char keys = 0;//定义静态小时更新用数据变量static unsigned char timecount = 0;//定义静态软件计数器变量/****************************************************************************/ /***************************************************************************** *///LCD驱动(DY12864CBL液晶显示屏并口驱动程序)/***************************************************************************** */void chk_busy(){//检查忙位(底层)RS=0;RW=1;E=1;Lcd_Bus=0xff;while((Lcd_Bus&0x80)==0x80);E=0;}/***************************************************************************** */void write_com(unsigned char cmdcode){//写命令到LCD(底层)chk_busy();RS=0;RW=0;E=1;Lcd_Bus=cmdcode;E=0;}/***************************************************************************** */void write_data(unsigned char Dispdata){ //写数据到LCD(底层)chk_busy();RS=1;RW=0;E=1;Lcd_Bus=Dispdata;E=0;}/***************************************************************************** */void lcm_init(){//初始化LCD屏(被调用层)write_com(0x30); //选择8bit数据流write_com(0x0c); //开显示(无游标、不反白)write_com(0x01); //清除显示,并且设定地址指针为00H}/***************************************************************************** /void lcm_w_word(unsigned char *s){//向LCM发送一个字符串,长度64字符之内。

TG2518万年历原理图

TG2518万年历原理图

A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
LED11 LED12 LED13
A F G E C E B F
A B G C E F
A B G C E F
A B G C E F
TG2518基本+生肖+星座原理图
深圳市南方泰科软件技术有限公司 XBW20050702
A
OUT
A P1 2 1 AC9V
C6 47 0u
C7 10 4
C8 47 0u
注意: 1. 此图适合1英寸以下的数码管,如有1.2英寸数码管以上的原理图要做调整。 2. P24接30K电阻到地,上电初始显示12小时制;否则为24小时制。 3. R10为10K的热敏电阻,B值为3550;R9为10K精密电阻,其精度为1%。 4. P16接30K电阻到地,星期为7个LED显示,不用数码管U19,有和弦,无中文报时。 5. P19接30K电阻到地,为越南版,星期为数码管显示2—8,不用7个LED,有和弦,无中文报时。 6. P19和P16各接30K电阻到地,为俄文版,星期为数码管显示1—7,不用7个LED,有和弦,无中文报时。 7. 如果用5V供电,喇叭应接到5V上。 8. 如果不要流水鸟叫功能,此原理图也适合经济型的TG2488芯片。
1
2 VCC
3
4
5
6
7
8
IC2 SER
VC C
VCC
P1 2 P1 1
14 11 10
16
O0 O1 O2 O3 O4 O5 O6 O7

项目四数字万年历制作与调试

项目四数字万年历制作与调试

项目四数字万年历的制作与调试一、项目要求:⑴熟悉元器件的特点、规格,性能指标、外形尺寸、识别标志以及包装形式。

⑵分析电路原理,绘图设计PCB板。

⑶注意元件的极性,合理调试。

二、项目目标:⑴熟练掌握焊接技术,保证质量,了解自动焊接技术。

⑵掌握手工焊接SMT元器件的要求与条件步骤、SMT元器件的焊接与手工拆焊工艺。

⑶掌握浸焊、波峰焊、回流焊SMT焊接检查设备及工艺方法。

⑷掌握电子产品生产操作的基本技能及其调试方法。

⑸培养自身安全意识。

二.知识链接1.集成电路:定义:集成电路是利用半导体工艺、厚薄膜工艺、薄膜工艺,将有源器件、无源器件按照设计要求连接起来,制作在同一硅片上,形成具有特定功能的电路,并封装在管壳之中,英文为缩写为IC,也俗称芯片。

特点:体积小,重量轻,功耗低,成本低,可靠性低,性能稳定。

分类:按照制作工艺分为:半导体集成电路,薄膜集成电路,厚膜集成电路,混合集成电路;按照功能分为:模拟集成电路,数字集成电路,微波集成电路;按照集成规模分为:小规模(SSI),中规模(MSI),大规模(LSI),超大规模(VLSI);按照电路中晶体管的类别分为:双极型集成电路,单极性集成电路。

封装:封装形式:指安装半导体集成电路芯片用的外壳封装作用:起着安装、固定、密封、保护芯片等方面的作用常用的封装材料:塑料,陶瓷,金属。

金属封装特点:散热性好,可靠性高,但安装使用不方便,成本高。

一般高精密度集成电路或大功率器件均以此形式封装。

按国家标准有T和K型两种;陶瓷封装特点:散热性差,但体积小,成本低。

陶瓷封装的形式可分为扁平型和双列直插式型;塑料封装特点:这是目前使用最多的封装形式。

)圆形分装:将管底对准集成电路,引脚编号按顺时针方向排列(现应用较少)单列直插式封装(SIP):集成电路引脚朝下,以缺口、凹槽或色点作为引脚参考标记,引脚编号顺序一般从左到右排列双列直插是封装(DIP):集成电路引脚朝上,以缺口或色点等标记为参考标记,引脚编号按顺时针方向排列;反之,引脚按逆时针方向排列三脚封装:正面(印有型号商标的一面)朝向集成电路,引脚编号顺序自左向右方向排列。

TG2518万年历原理图

TG2518万年历原理图

P26 P11
R 5 8 3 0K R 5 9 3 0K
C 11
R8 4 70 K
R 11 3 90 K
IC 1
1 04
TG2518
R32 R31 1 .5 K 1 .5 K
P27
B A T1
C5
3V
1 04
Y1
3 27 6 8 H z
C1 2 2P
C2
2 2P
P7
P9 P10 P11 P12 P13 P14
Q6 8 55 0
Q7 8 55 0
R1
1K
R2
1K
R3
1K
R4
1K
R5
LM 7 8 05
VDD
1K
R6
1K
R7
1K
V3
D8
R 30
IN 6 0
2 0R
GND 2
1
IN
OUT
3
R 13
D9
1 0K
深圳南方泰科软件技术有限公司
IN 4 0 0 4 D4
IN 4 0 0 4 D7
AC 9V
C6
C7
1 00 0 u
1 04
IN 4 0 0 4
VCC
C8 4 70 u
R30 R31 1K5 1K5
P17
P28 P14 P29 P7 P13 P21
R 1 3 10K R 7 1K
A B C D E F G
D
A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
A B C D E F G
A
F
B

51单片机实现万年历程序文件

51单片机实现万年历程序文件

51单片机实现万年历利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。

设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。

原理图:pcb图:源程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^0;//蜂鸣器控制口sbit timeadd=P2^1;//调节时间加sbit timesub=P2^2;//调节时间减sbit timeclk=P2^3;//闹钟设定键sbit timefun=P2^4;//时间设定键sbit lcdrs=P2^5;//液晶的命令和数据控制口sbit ledrw=P2^6;//液晶的写数据口sbit lcden=P2^7;//液晶显示模块的使能端sbit timeds=P3^3;//时钟芯片地址闸sbit timerw=P3^4;//时钟芯片读写sbit timeas=P3^5;//时钟芯片地址闸sbit timeen=P3^6;//时钟芯片片选uchar code table[]="20 - - week ";uchar code table1[]=" : : ";//要显示的字符串char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;void delay(uint x){uchar i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void didi(){beep=0;delay(1000);beep=1;delay(1000);}void write_com(uchar com){lcdrs=0;P0=com;delay(5);lcden=1;delay(20);lcden=0;}void write_date(uchar date){lcdrs=1;P0=date;delay(5);lcden=1;delay(20);lcden=0;}void write_sfm(uchar add,uchar date){ uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_nyr(uchar add,uchar date){ uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void write_zhou(uchar add,uchar date) {write_com(0x80+add);write_date(0x30+date);}void write_ds(uchar add,uchar date){timeas=1;timeds=1;timerw=1;P1=add;timeas=0;timerw=0;P1=date;timerw=1;timeas=1;timeen=1;}uchar read_ds(uchar add){ uchar ds_date;timeas=1;timeds=1;timerw=1;timeen=0;P1=add;timeas=0;timeds=0;ds_date=P1;timeds=1;timeas=1;timeen=1;return ds_date;}void keyscan(){if(flag1==1)//用来关闭闹钟铃声{if(timeadd==0){delay(5);if(timeadd==0){while(!timeadd==0); flag1=0;}}if(timesub==0){delay(5);if(timesub==0){while(!timesub==0);flag1=0;}}}if(timefun==0){delay(5);if(timefun==0){while(!timefun);flag=1;numfun++;if(numfun==1){write_com(0x80+0x40+0x0a); write_com(0x0f);}if(numfun==2){write_com(0x80+0x40+0x07); write_com(0x0f);}if(numfun==3){write_com(0x80+0x40+0x04); write_com(0x0f);}if(numfun==4){write_com(0x80+0x0f);write_com(0x0f);}if(numfun==5){write_com(0x80+0x09);write_com(0x0f);}if(numfun==6){write_com(0x80+0x06);write_com(0x0f);}if(numfun==7){write_com(0x80+0x03); write_com(0x0f);}if(numfun==8){numfun=0;flag=0;}}}if(numfun!=0){if(timeadd==0){delay(5);while(!timeadd);if(numfun==1){miao++;if(miao==60)miao=0;write_sfm(9,miao);write_com(0x80+0x40+9); write_ds(0,miao);}if(numfun==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+6); write_ds(2,fen);}if(numfun==3){shi++;if(shi==24)shi=0;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week++;if(week==8)week=1;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri++;if(ri==32) ri=1;break; case 2:ri++;if(ri==30) ri=1;break; case 3:ri++;if(ri==32) ri=1;break; case 4:ri++;if(ri==31) ri=1;break; case 5:ri++;if(ri==32) ri=1;break;case 6:ri++;if(ri==31) ri=1;break; case 7:ri++;if(ri==32) ri=1;break; case 8:ri++;if(ri==32) ri=1;break; case 9:ri++;if(ri==31) ri=1;break; case 10:ri++;if(ri==32) ri=1;break; case 11:ri++;if(ri==31) ri=1;break; case 12:ri++;if(ri==32) ri=1;break; }}else if(leap&&yue==2){ri++;if(ri==30)ri=1;}else if(yue==2&&leap==0){ri++;if(ri==29)ri=1;}elseswitch(yue){case 1:ri++;if(ri==32) ri=1;break; case 3:ri++;if(ri==32) ri=1;break; case 4:ri++;if(ri==31) ri=1;break; case 5:ri++;if(ri==32) ri=1;break; case 6:ri++;if(ri==31) ri=1;break; case 7:ri++;if(ri==32) ri=1;break; case 8:ri++;if(ri==32) ri=1;break; case 9:ri++;if(ri==31) ri=1;break; case 10:ri++;if(ri==32) ri=1;break; case 11:ri++;if(ri==31) ri=1;break; case 12:ri++;if(ri==32) ri=1;break; }write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue++;if(yue==13)yue=0;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian++;if(nian==100)nian=0;leap=nian%4==0&&nian%100!=0; write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}if(timesub==0){delay(5);while(!timesub);if(numfun==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+9); write_ds(0,miao);}if(numfun==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+6); write_ds(2,fen);}if(numfun==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week--;if(week==0)week=7;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri--;if(ri==0) ri=31;break; case 2:ri--;if(ri==0) ri=29;break; case 3:ri--;if(ri==0) ri=31;break; case 4:ri--;if(ri==0) ri=30;break; case 5:ri--;if(ri==0) ri=31;break; case 6:ri--;if(ri==0) ri=30;break;case 7:ri--;if(ri==0) ri=31;break; case 8:ri--;if(ri==0) ri=31;break; case 9:ri--;if(ri==0) ri=30;break; case 10:ri--;if(ri==0) ri=31;break; case 11:ri--;if(ri==0) ri=30;break; case 12:ri--;if(ri==0) ri=31;break; }}else if(leap&&yue==2){ri--;if(ri==0)ri=29;}else if(yue==2&&leap==0){ri--;if(ri==0)ri=28;}elseswitch(yue){case 1:ri--;if(ri==0) ri=31;break; case 3:ri--;if(ri==0) ri=31;break; case 4:ri--;if(ri==0) ri=30;break; case 5:ri--;if(ri==0) ri=31;break; case 6:ri--;if(ri==0) ri=30;break; case 7:ri--;if(ri==0) ri=31;break; case 8:ri--;if(ri==0) ri=31;break; case 9:ri--;if(ri==0) ri=30;break; case 10:ri--;if(ri==0) ri=31;break; case 11:ri--;if(ri==0) ri=30;break; case 12:ri--;if(ri==0) ri=31;break; }write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue--;if(yue==-1)yue=12;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian--;if(nian==-1)nian=99;leap=nian%4==0&&nian%100!=0; write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}}}void set_alarm(){uchar ashi,afen,amiao;if(timeclk==0)//判断是否按下闹钟设定键{delay(5);//延时消抖if(timeclk==0){while(!timeclk);anumfun++;//按键次数加1if(anumfun==1){flag=1;write_com(0x80+0x40+0x0a); write_com(0x0f);}if(anumfun==2){flag=1;write_com(0x80+0x40+0x07); write_com(0x0f);}if(anumfun==3){flag=1;write_com(0x80+0x40+0x04); write_com(0x0f);}{flag=0;anumfun=0;}}}if(anumfun!=0){if(timeadd==0)//如果加功能键按下{delay(5);while(!timeadd);if(anumfun==1) //设定秒{amiao++;if(amiao==60)amiao=0;write_sfm(9,amiao);write_com(0x80+0x40+9); write_ds(1,amiao);}{afen++;if(afen==60)afen=0;write_sfm(6,afen);write_com(0x80+0x40+6); write_ds(3,afen);}if(anumfun==3){ashi++;if(ashi==24)ashi=0;write_sfm(3,ashi);write_com(0x80+0x40+3); write_ds(5,ashi);}}}if(anumfun!=0){if(timesub==0){delay(5);while(!timesub);if(anumfun==1){amiao--;if(amiao==-1)amiao=59;write_sfm(9,amiao);write_com(0x80+0x40+9); write_ds(1,amiao);}if(anumfun==2){afen--;if(afen==-1)afen=59;write_sfm(6,afen);write_com(0x80+0x40+6); write_ds(3,afen);}if(anumfun==3){ashi--;if(ashi==-1)ashi=23;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);}}}}void init(){EA=1;//开总中断EX0=1;//开外部中断0IT0=1;//设定触发方式为负跳变沿有效lcden=0;//选通液晶显示屏ledrw=0;//设定液晶显示屏的读写方式为读write_com(0x38);//设置液晶显示模式为16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//打开显示,并使光标不显示也不闪烁write_com(0x06);//光标指针每次自动加1write_com(1);//清屏write_com(0x80);//送地址指针for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);//写到第二行for(num=0;num<11;num++){write_date(table1[num]);delay(5);}write_ds(0x0a,0x20);//开启时钟芯片振荡器 write_ds(0x0b,0x26);//开启闹钟read_ds(0x0c);//读取时钟芯片c寄存器}void main(){init();while(1){keyscan();set_alarm();if(flag1==1)didi();if(flag==0){//读取时间miao=read_ds(0x00);fen=read_ds(0x02);shi=read_ds(0x04);yue=read_ds(0x08);ri=read_ds(0x07);nian=read_ds(0x09);week=read_ds(0x06);//写入液晶显示屏write_sfm(9,miao);write_sfm(6,fen);write_sfm(3,shi);write_nyr(2,nian);write_nyr(5,yue);write_nyr(8,ri);write_zhou(0x0f,week);}}}void exter() interrupt 0{flag1=1;read_ds(0x0c);//读时钟芯片c寄存器。

数字万年历课程设计

数字万年历课程设计

淮海工学院测控技术与仪器专业专业综合课程设计报告书题目:数字万年历设计班级:测控 091 姓名:唐朝学号: 030915127目录1 引言 (3)2 电子技术的发展与需求 (4)2.1电子技术的发展 (4)2.2 万年历的需求分析 (4)3 电子时钟系统设计思路 (5)3.1 设计要求 (5)3.2 硬件电路设计 (5)3.3 工作原理 (5)4 系统的硬件设计与实现 (7)4.1 系统电路示意图 (7)4.2 驱动电路 (7)4.3 时钟控制电路 (8)4.4 所需主要器件 (9)4.5系统硬件概述 (9)4.5.1 电阻: (9)4.5.2 电容: (9)4.5.3 电容发光二极管: (10)4.5.4 三极管 (11)4.5.5 稳压器7805 (12)4.5.7 数码管: (16)4.5.8 芯片T2518DD3: (17)4.5.9 晶振(32.768khz ): (20)4.5.10 微动开关: (20)4.5.11 喇叭: (21)5 系统的软件设计 (21)5.1 程序流程框图 (21)5.2 程序设计 (23)6 安装与调试 (29)6.1 安装 (29)6.2 调试 (30)6.3软、硬件测试 (30)6.3.1硬件测试 (30)6.3.2软件测试 (31)6.4测试结果分析与结论 (31)6.4.1 测试结果分析 (31)6.4.2 测试结论 (31)7 总结 (32)参考文献 (33)1 引言单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置到飞机上的各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡等,这些都离不开单片机。

单片机是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

数字万年历在日常生活中最常见,应用也最广泛。

51单片机万年历实验原理解析

51单片机万年历实验原理解析

51单片机万年历实验原理解析51单片机万年历(Real-time Clock)是一种集成电路,可以提供精确的日期和时间信息。

它是基于包含计时器和日历的时钟电路设计的。

本文将深入解析51单片机万年历实验的原理和实现过程。

1. 引言在现代科技领域中,人们对时间的准确性和精确度要求越来越高。

而万年历是一种可靠的工具,能够提供准确的日期和时间信息,因此被广泛应用在各种领域,如电子设备、通信系统和科学研究等。

51单片机万年历作为一种常用的设计方案,本文将对其原理和实验进行解析。

2. 51单片机概述51单片机是一种基于哈佛架构的芯片,常应用于嵌入式系统开发。

它具有易于编程、高性能和低功耗的特点,因此在电子行业中得到广泛应用。

而51单片机万年历则是在该芯片上实现的一种功能,它通过连接外部时钟电路和定时器模块,实现了精确的时间显示和日期计算。

3. 51单片机万年历实验原理我们需要连接一个可靠的时钟电路到51单片机上,以提供准确的时间基准。

这个时钟电路可以是一个晶体振荡器,它会产生一个稳定的频率信号,用来驱动定时器模块。

我们需要配置定时器模块,以便实现时间的计算和显示功能。

定时器可以设置定时时间和工作模式,例如计时模式和计数模式。

通过定时器中断,我们可以精确地控制和记录时间的变化。

接下来,我们需要编写一段程序来读取定时器的计数值,并将其转换为具体的日期和时间。

这个过程涉及到将计数值分解为年、月、日、时、分、秒,然后进行相应的转换和计算。

我们将通过数码管、液晶显示屏或其他输出设备来显示转换后的日期和时间。

这些输出设备可以根据需要进行相应的驱动和控制,以实现清晰和直观的显示效果。

4. 实验结果和应用通过上述步骤,我们成功实现了51单片机万年历的原理和功能。

该实验可以应用于各种领域,如电子产品、智能家居和计时设备等。

在电子产品中,51单片机万年历可以作为一个重要的功能模块,为用户提供准确的日期和时间信息。

它还可以和其他模块进行联动,实现更复杂的功能,如定时开关、闹钟和事件提醒等。

51单片机电子万年历设计电路图及程序之欧阳文创编

51单片机电子万年历设计电路图及程序之欧阳文创编

摘要:电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。

它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。

对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。

该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。

本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。

在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。

在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。

在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。

万年历的设计过程在硬件与软件方面进行同步设计。

硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。

在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。

显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。

7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。

为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。

74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。

软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。

程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。

所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。

最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。

51单片机实现万年历程序文件

51单片机实现万年历程序文件

51单片机实现万年历利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。

设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。

原理图:pcb图:源程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^0;//蜂鸣器控制口sbit timeadd=P2^1;//调节时间加sbit timesub=P2^2;//调节时间减sbit timeclk=P2^3;//闹钟设定键sbit timefun=P2^4;//时间设定键sbit lcdrs=P2^5;//液晶的命令和数据控制口sbit ledrw=P2^6;//液晶的写数据口sbit lcden=P2^7;//液晶显示模块的使能端sbit timeds=P3^3;//时钟芯片地址闸sbit timerw=P3^4;//时钟芯片读写sbit timeas=P3^5;//时钟芯片地址闸sbit timeen=P3^6;//时钟芯片片选uchar code table[]="20 - - week ";uchar code table1[]=" : : ";//要显示的字符串char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;void delay(uint x){uchar i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void didi(){beep=0;delay(1000);beep=1;delay(1000);}void write_com(uchar com){lcdrs=0;P0=com;delay(5);lcden=1;delay(20);lcden=0;}void write_date(uchar date){lcdrs=1;P0=date;delay(5);lcden=1;delay(20);lcden=0;}void write_sfm(uchar add,uchar date){ uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_nyr(uchar add,uchar date){ uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void write_zhou(uchar add,uchar date) {write_com(0x80+add);write_date(0x30+date);}void write_ds(uchar add,uchar date){ timeen=0;timeas=1;timeds=1;timerw=1;P1=add;timeas=0;timerw=0;P1=date;timerw=1;timeas=1;timeen=1;}uchar read_ds(uchar add){uchar ds_date;timeas=1;timeds=1;timerw=1;timeen=0;P1=add;timeas=0;timeds=0;P1=0xff;ds_date=P1;timeds=1;timeas=1;timeen=1;return ds_date;}void keyscan(){if(flag1==1)//用来关闭闹钟铃声{if(timeadd==0){delay(5);if(timeadd==0){while(!timeadd==0);flag1=0;}}if(timesub==0){delay(5);if(timesub==0){while(!timesub==0);flag1=0;}}}if(timefun==0){delay(5);if(timefun==0){while(!timefun);flag=1;numfun++;if(numfun==1){write_com(0x80+0x40+0x0a);write_com(0x0f);}if(numfun==2){write_com(0x80+0x40+0x07);write_com(0x0f);}if(numfun==3){write_com(0x80+0x40+0x04);write_com(0x0f);}if(numfun==4){write_com(0x80+0x0f);write_com(0x0f);}if(numfun==5){write_com(0x80+0x09);write_com(0x0f);}if(numfun==6){write_com(0x80+0x06);write_com(0x0f);}if(numfun==7){write_com(0x80+0x03);write_com(0x0f);}if(numfun==8){numfun=0;flag=0;}}}if(numfun!=0){if(timeadd==0){delay(5);while(!timeadd);if(numfun==1){miao++;if(miao==60)miao=0;write_sfm(9,miao);write_com(0x80+0x40+9);write_ds(0,miao);}if(numfun==2){fen++;if(fen==60)fen=0;write_sfm(6,fen);write_com(0x80+0x40+6);write_ds(2,fen);}if(numfun==3){shi++;if(shi==24)shi=0;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week++;if(week==8)week=1;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri++;if(ri==32) ri=1;break;case 2:ri++;if(ri==30) ri=1;break;case 3:ri++;if(ri==32) ri=1;break;case 4:ri++;if(ri==31) ri=1;break;case 5:ri++;if(ri==32) ri=1;break;case 6:ri++;if(ri==31) ri=1;break;case 7:ri++;if(ri==32) ri=1;break;case 8:ri++;if(ri==32) ri=1;break;case 9:ri++;if(ri==31)ri=1;break;case 10:ri++;if(ri==32)ri=1;break;case 11:ri++;if(ri==31)ri=1;break;case 12:ri++;if(ri==32)ri=1;break;}}else if(leap&&yue==2){ri++;if(ri==30)ri=1;}else if(yue==2&&leap==0){ri++;if(ri==29)ri=1;}elseswitch(yue){case 1:ri++;if(ri==32) ri=1;break;case 3:ri++;if(ri==32) ri=1;break;case 4:ri++;if(ri==31) ri=1;break;case 5:ri++;if(ri==32) ri=1;break;case 6:ri++;if(ri==31) ri=1;break;case 7:ri++;if(ri==32) ri=1;break;case 8:ri++;if(ri==32) ri=1;break;case 9:ri++;if(ri==31) ri=1;break;case 10:ri++;if(ri==32) ri=1;break;case 11:ri++;if(ri==31) ri=1;break;case 12:ri++;if(ri==32) ri=1;break;}write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue++;if(yue==13)yue=0;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian++;if(nian==100)nian=0;leap=nian%4==0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}if(timesub==0){delay(5);while(!timesub);if(numfun==1){miao--;if(miao==-1)miao=59;write_sfm(9,miao);write_com(0x80+0x40+9);write_ds(0,miao);}if(numfun==2){fen--;if(fen==-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+6);write_ds(2,fen);}if(numfun==3){shi--;if(shi==-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi);}if(numfun==4){week--;if(week==0)week=7;write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week);}if(numfun==5){if(nian==0){switch(yue){case 1:ri--;if(ri==0) ri=31;break;case 2:ri--;if(ri==0) ri=29;break;case 3:ri--;if(ri==0) ri=31;break;case 4:ri--;if(ri==0) ri=30;break;case 5:ri--;if(ri==0) ri=31;break;case 6:ri--;if(ri==0) ri=30;break;case 7:ri--;if(ri==0) ri=31;break;case 8:ri--;if(ri==0) ri=31;break;case 9:ri--;if(ri==0) ri=30;break;case 10:ri--;if(ri==0) ri=31;break;case 11:ri--;if(ri==0) ri=30;break;case 12:ri--;if(ri==0) ri=31;break;}}else if(leap&&yue==2){ri--;if(ri==0)ri=29;}else if(yue==2&&leap==0){ri--;if(ri==0)ri=28;}elseswitch(yue){case 1:ri--;if(ri==0) ri=31;break;case 3:ri--;if(ri==0) ri=31;break;case 4:ri--;if(ri==0) ri=30;break;case 5:ri--;if(ri==0) ri=31;break;case 6:ri--;if(ri==0) ri=30;break;case 7:ri--;if(ri==0) ri=31;break;case 8:ri--;if(ri==0) ri=31;break;case 9:ri--;if(ri==0) ri=30;break;case 10:ri--;if(ri==0) ri=31;break;case 11:ri--;if(ri==0) ri=30;break;case 12:ri--;if(ri==0) ri=31;break;}write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);}if(numfun==6){yue--;if(yue==-1)yue=12;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);}if(numfun==7){nian--;if(nian==-1)nian=99;leap=nian%4==0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);}}}}void set_alarm(){uchar ashi,afen,amiao;if(timeclk==0)//判断是否按下闹钟设定键{delay(5);//延时消抖if(timeclk==0){while(!timeclk);anumfun++;//按键次数加1if(anumfun==1){flag=1;write_com(0x80+0x40+0x0a);write_com(0x0f);}if(anumfun==2){flag=1;write_com(0x80+0x40+0x07);write_com(0x0f);}if(anumfun==3){flag=1;write_com(0x80+0x40+0x04);write_com(0x0f);}if(anumfun==4){flag=0;anumfun=0;}}}if(anumfun!=0){if(timeadd==0)//如果加功能键按下{delay(5);while(!timeadd);if(anumfun==1) //设定秒{amiao++;if(amiao==60)amiao=0;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);}if(anumfun==2){afen++;if(afen==60)afen=0;write_sfm(6,afen);write_com(0x80+0x40+6);write_ds(3,afen);}if(anumfun==3){ashi++;if(ashi==24)ashi=0;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);}}}if(anumfun!=0){if(timesub==0){delay(5);while(!timesub);if(anumfun==1){amiao--;if(amiao==-1)amiao=59;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);}if(anumfun==2){afen--;if(afen==-1)afen=59;write_sfm(6,afen);write_com(0x80+0x40+6);write_ds(3,afen);}if(anumfun==3){ashi--;if(ashi==-1)ashi=23;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);}}}}void init(){EA=1;//开总中断EX0=1;//开外部中断0IT0=1;//设定触发方式为负跳变沿有效lcden=0;//选通液晶显示屏ledrw=0;//设定液晶显示屏的读写方式为读write_com(0x38);//设置液晶显示模式为16*2显示,5*7点阵,8位数据接口 write_com(0x0c);//打开显示,并使光标不显示也不闪烁write_com(0x06);//光标指针每次自动加1write_com(1);//清屏write_com(0x80);//送地址指针for(num=0;num<16;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);//写到第二行for(num=0;num<11;num++){write_date(table1[num]);delay(5);}write_ds(0x0a,0x20);//开启时钟芯片振荡器write_ds(0x0b,0x26);//开启闹钟read_ds(0x0c);//读取时钟芯片c寄存器}void main(){init();while(1){keyscan();set_alarm();if(flag1==1)didi();if(flag==0){//读取时间miao=read_ds(0x00);fen=read_ds(0x02);shi=read_ds(0x04);yue=read_ds(0x08);ri=read_ds(0x07);nian=read_ds(0x09);week=read_ds(0x06);//写入液晶显示屏write_sfm(9,miao);write_sfm(6,fen);write_sfm(3,shi);write_nyr(2,nian);write_nyr(5,yue);write_nyr(8,ri);write_zhou(0x0f,week);}}}void exter() interrupt 0{flag1=1;read_ds(0x0c);//读时钟芯片c寄存器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档