为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机电子万年历(含程序)

2017-09-20 25页 doc 409KB 264阅读

用户头像

is_833902

暂无简介

举报
单片机电子万年历(含程序)CHANGZHOU INSTITUTE OF TECHNOLOGY 科 研 实 践 项目名称:       电子万年历设计        二级学院:       电子信息与电气工程学院  专业:   电气工程及其自动化      班级:  10 电二  学生姓名:     祝学东      学号:  10020442 指导教师:      庄志红      职称:  副教授                    起止时间: 2013年12月9日—2013年12月20日 摘  要 本设计是电子万年历。具备三个功能:能显...
单片机电子万年历(含程序)
CHANGZHOU INSTITUTE OF TECHNOLOGY 科 研 实 践 项目名称:       电子万年历设计        二级学院:       电子信息与电气工程学院  专业:   电气工程及其自动化      班级:  10 电二  学生姓名:     祝学东      学号:  10020442 指导教师:      庄志红      职称:  副教授                    起止时间: 2013年12月9日—2013年12月20日 摘  要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒、星期,并具有可调整日期和时间功能。 该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。 关键词:单片机  数字显示  动态扫描  时间日期可调         目  录 第一章 设计论证及要求    1 1.1设计应用意义    1 1.2设计论证    1 1.2.1 单片机芯片选择    1 1.2.2显示模块选择    1 1.2.3时钟芯片选择    2 1.3设计流程    2 第二章 系统硬件电路设计    3 2.1 CPU时钟    3 2.2 主控芯片AT89C52模块    3 2.3 显示控制电路的设计及原理    4 2.4 按键电路设计    6 第三章 系统软件设计    7 3.1 软件主流程    7 3.2初始化程序及宏定义    9 3.3主程序    10 3.4显示子程序    12 3.5 按键子程序    15 3.6 延时子程序    16 第四章 系统调试与    17 第五章 设计总结    20 第六章 参考文献    21 附一 元件清单    22 附二 仿真原理图    23 附三 程序清单    24 附四 实物图    35 第一章 设计论证及要求 1.1设计应用意义   二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说单片机的开发是国家之所需,社会之所需,人民之所需。     由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.2设计方案论证 1.2.1 单片机芯片选择 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用AT89C52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 但由于课程学习是主要以AT89C51为主,因此选择AT89C52。 1.2.2 显示模块选择 方案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示. 方案二:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 所以采用了LED数码管作为显示。 1.2.3 时钟芯片选择 方案一:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。此方案虽然时间精度高,但电路复杂,设计成本高,所以不采用。 方案二:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案减少芯片的使用,节约成本。本次设计采用单片机提供秒信号,用定时器T0的模式二(8位自动重装计数初值的计数值)。 1.3设计流程 进行扩展                                   第二章 系统硬件电路设计 2.1 单片机时钟信号 单片机由外部电路提供时钟信号。本实验使用11.0592MHz的晶振、30pF的电容组成单片机的时钟电路。如图2-1所示: 图2-1 时钟电路 2.2 主控芯片AT89C52模块 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。 图2-2 AT89C52管脚图 AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口。3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 2.3 显示电路的设计及原理   就时钟而言,通常可采用液晶显示或数码管显示。由于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行接口,对微处理器的接口要求较高,占用资源多。另外,89C52本身无专门的液晶驱动接口,因此,本设计采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合。初始化时,由软件编写的指令就集中在显示功能的设置上。数码管引脚如图2-3所示。 图2-3 数码管引脚定义 本设计采用动态扫描法,单片机P1.7控制第一只数码管,P1.6控制第二位,P1.5控制第三位,P1.4控制第四位,P1.3控制第五位,P1.2控制第六位, P0口控制八位数据,轮流选六只数码管,先开通一只数码管,其余关闭,让P0显示数据,延秒一定时间后关闭数码管。设计如图2-4所示。 图2-4 显示电路设计 实物选用六位八段数码管LG3661AH,其管脚排列如图2-5所示。 图2-5 6位共阴数码管管脚图 2.4 按键电路设计 由于我设计的是电子万年历,需要实现多种功能的显示,并要能够切换显示和调节年月日,因此,在设计过程中按键的设计就显得尤为重要。 在设计过程中,按键选择P2口的前4位,一共采用了4个按键,尽量在小的空间里实现最多的功能。其中MODE键是年月日与时间显示切换键,按下一次就能够更换一次显示位。在调整显示环境下年/时、月/分、日/秒键是显示调整位的的加1键,每按一次显示数字加1。 设计如图2-5所示。 图2-5 按键电路 其中P2.0为年/时键,P2.1为月/分键,P2.2为日/秒/星期键,P2.3为模式键。 第三章 软件设计 3.1软件主流程 返回 3.2初始化程序及宏定义 #include #include #define uchar unsigned char #define uint unsigned int sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit key_y_h=P2^0; sbit key_m_m=P2^1; sbit key_d_s=P2^2; sbit key_set=P2^3; uint tcnt; uint yearh=20; uchar flag,flag1,sec; uint week=1; uint min=30; uint hour=15; uint day=16; uint month=12; unint flag2==0; uint year=13;uchar sec_l,sec_h,min_l,min_h,hour_l,hour_h; uchar day_l,day_h,month_l,month_h,year_l,year_h; uchar code tab[]={           0x3F,/*0*/           0x06,/*1*/           0x5B,/*2*/           0x4F,/*3*/           0x66,/*4*/           0x6D,/*5*/           0x7D,/*6*/           0x07,/*7*/           0x7F,/*8*/           0x6F,/*9*/       }; 3.3主程序 void main() {   TMOD=0x02;            //设置模式为定时器T0的模式2 (8位自动重装计数初值的计数值)            TH0=0x06;            //设置计数器初值,靠TH0存储重装的计数值X0=256-250=6     TL0=0x06;     TR0=1;                //启动T0     ET0=1;                //开启定时器T0中断允许     EA=1;    while(1)    keyscan();   }   void t0(void)interrupt 1 using 0  //t0的中断程序 {     tcnt++;     if(tcnt==4000)//定时器的定时计数,4000次250us为1秒     {         tcnt=0;         sec++;         if(sec==60)         {                sec=0;             min++;             if(min==60)             {                 min=0;                 hour++;                 if(hour==24)                 {                     hour=0;                     day++;                     week++;                     if(month==2&&((year==0&&yearh%4==0)||(year!=0&&year%4==0))&&day==30)day=1;                      else if(month==2&&day==29)day=1;                     else if((month==4||month==6||month==9||month==11)&&day==31)day=1;                     else if(day==32)day=1;                     if(day==1)                     {                     month++;                     if(month==13)                     {                         month=1;                         year++;                         if(year==100)                         {                             year=0;                             yearh++;                             if(yearh==100)                             {                                 yearh=20;                             }                         }                     }                 }                 }             }         }     } } 3.4显示子程序 void disp() { sec_h=sec/10;  //时分秒的数码管显示,年月日类似 sec_l=sec%10; min_h=min/10; min_l=min%10; hour_h=hour/10; hour_l=hour%10; day_h=day/10; day_l=day%10; month_h=month/10; month_l=month%10; year_h=year/10; year_l=year%10; P1_2=0; if(flag2==1) P0=tab[day_l]; else if(flag2==0) P0=tab[sec_l]; else if(flag2==2) P0=tab[week]; delay(1); P1_2=1; P1_3=0; if(flag2==1) P0=tab[day_h]; if(flag2==0) P0=tab[sec_h]; else P0=tab[0]; delay(1); P1_3=1; P1_4=0; if(flag2==1) P0=tab[month_l]|0x80; else if(flag2==0) P0=tab[min_l]|0x80; else if(flag2==2) P0=tab[0]; delay(1); P1_4=1; P1_5=0; if(flag2==1) P0=tab[month_h]; else if(flag2==0) P0=tab[min_h]; else if(flag2==2) P0=tab[0]; delay(1); P1_5=1; P1_6=0; if(flag2==1) P0=tab[year_l]|0x80; else if(flag2==0) P0=tab[hour_l]|0x80; else if(flag2==2) P0=tab[0]; delay(1); P1_6=1; P1_7=0; if(flag2==1) P0=tab[year_h]; else if(flag2==0) P0=tab[hour_h]; else if(flag2==2) P0=tab[0]; delay(1); P1_7=1; }; 3.5 按键子程序 void keyscan() {   disp();   while(!key_set)            //日期/时间键   {      disp( );   if(key_set)   {     flag2=!flag2;   }   }   while(!key_y_h)            //年/时键   {      disp( );   if(key_y_h)   {   if(flag2==1)    //对年份进行调节     {       year_l++;       if(year_l==10)       {           year_l=0;           year_h++;       }     year=year_l+year_h*10;     }     else  if(flag2==0)      //对小时进行调节     {       hour_l++;       if(hour_l==10)       {         hour_l=0;         hour_h++;       }         if(hour_l==4&&hour_h==2)         {           hour_l=0;           hour_h=0;         }       }     hour=hour_h*10+hour_l;     }     } 月/分、日/秒键的编程与年/时类似 ,最后的日秒键在模式2下可以对星期进行调节。 3.6延时子程序 void delay(uint ms) { uchar i; while(ms--) for(i=0;i<123;i++);}                第四章 系统调试与分析 软、硬件调试 软件调试用Proteus进行仿真,电子成年历是多功能的数字型,可以看当前日期,时间。电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。调试发现年时键不能进行调节,其他键位能够正常工作,于是对按键子程序的三个调节键进行仔细对比,发现年时调节程序的括号没有一一对应,经过多次的模块子程序的修改,一步一步的完成,仿真能完美工作。仿真结果如图4-1、4-2和4-3所示。 图4-1 时间显示 图4-2 日期显示 图4-3 星期显示 硬件调试焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。调试时发现按钮按下时间没有调节,显示数字无变化,仔细检查发现,单片机P2口为自下至上排列,按键应选择下四位,改变插针位置,再次按下按钮,能够对显示数字进行调节。将时间调至23:59:59,一秒后时间显示为00:00:00,日期增加一天。 第五章 设计总结 这次科研实践意义非同一般,把我从单深入的理论编程到硬件软件综合实现一个使用的电路。通过这次科研实践,知道了单片机在实际应用中占据很重要的作用,也了解单片机本身的功能,用编程控制,还有单片机的一些扩展功能,我更深入地了解到单片机的使用原理。 设计中,我看到同组的同学都很努力,很认真,我也不敢懈怠。虽说时间有点仓促,但老师和同学们夜以继日在解决问题,我做电子万年历的设计中也遇到些许问题,但通过他人的指点,并查阅很多有价值的书籍,我从中认识了不少。也增强了自己发现问题解决问题的能力。还有在编程的时候要仔细,要实现一个完整的功能就要考虑全面,在测试程序的时候要善于发现错误,而且可能是一些小问题,这是很常见的。 设计完满结束了,经过自己的努力和同学的帮忙终于有了成果,特别离不开指导申明老师的悉心教导,我受益匪浅,相信他的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。感谢老师不畏辛劳,热心精心的指导。 在这里向他说声谢谢,您辛苦了。 第六章 参考文献     [1] 张齐.朱宁西 《单片机应用系统设计技术—基于C51的Proteus仿真(第二版)》. [M] 北京.电子工业出版社.2011 [2] 张齐 《单片机应用系统设计技术—基于C51的Proteus仿真实验与解题指导》. [M] 北京.电子工业出版社.2011 [3] 张鑫. 《单片微机原理与应用》.[M] 北京.电子工业出版社. 2008 [4] 楼然苗.李光飞. 《单片机课程设计指导》. [M]北京.航空航天大学出版社. 2007 [5] 长洪润.刘秀英. 《单片机应用设计200例(上、下)》. [M] 北京.航空航天大学出版社.2006 [6] 张毅刚.《 新编MCS—51单片机应用设计(第3版)》.[M]哈尔滨工业大学出版社.2008 [7] 马静.《单片机原理与应用》. [M] 实践教学指导书中国计量出版社. 2003 附一 元件清单: 序号 名称 型号、参数 备注 价格 数量 1 CPU STC89C52 DIP40封装 4.4 1 2 管座 DIP-40 0.3 1 3 晶振 11.0592MHZ 492型 0.6 1 4 整流桥 2W10 2A圆桥 0.5 1 5 稳压IC LM7805 TO-220 0.8 1 6 原片电容 30pf 0.05 2 7 电解电容 1000uf/16V 0.3 1 8 电解电容 470uf/16V 0.2 1 9 电解电容 10uf/16V 0.1 1 10 独石电容 0.47uf 0.2 2 11 按钮 6mm*6mm 0.1 1 12 电阻 10K/0.25W 金属膜1/4W 0.01 1 13 排阻 A10-103 直插 0.25 1 14 单排排阵 直插 1*40 0.3 1 15 自锁开关 0.3 7 16 接线端子 0.04 1 17 数码管 LG3661AH 14管脚 8 1 18 按钮 0.1 4 19 杜邦线 20根 3 1 成本总价 20.90 元 附二 仿真原理图: 附三 程序清单: #include #include #define uchar unsigned char #define uint unsigned int sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit key_y_h=P2^0; sbit key_m_m=P2^1; sbit key_d_s=P2^2; sbit key_set=P2^3; uint tcnt; uint yearh=20; uchar flag,flag1,sec; uint week=1; uint min=30; uint hour=15; uint day=16; uint month=12; uint year=13; uchar sec_l,sec_h,min_l,min_h,hour_l,hour_h; uchar day_l,day_h,month_l,month_h,year_l,year_h; uchar code tab[]={           0x3F,/*0*/           0x06,/*1*/           0x5B,/*2*/           0x4F,/*3*/           0x66,/*4*/           0x6D,/*5*/           0x7D,/*6*/           0x07,/*7*/           0x7F,/*8*/           0x6F,/*9*/       }; uint flag2=0; void keyscan(); void disp(); void delay(uint ms); void delay(uint ms) { uchar i; while(ms--) for(i=0;i<123;i++); } void main() {   TMOD=0x02;            //设置模式为定时器T0的模式2 (8位自动重装计数初值的计数值)            TH0=0x06;            //设置计数器初值,靠TH0存储重装的计数值X0=256-250=6     TL0=0x06;     TR0=1;                //启动T0     ET0=1;                //开启定时器T0中断允许     EA=1;    while(1)    keyscan();   }   void t0(void)interrupt 1 using 0  //t0的中断程序 {     tcnt++;     if(tcnt==4000)//定时器的定时计数,4000次250us为1秒     {         tcnt=0;         sec++;         if(sec==60)         {                sec=0;             min++;             if(min==60)             {                 min=0;                 hour++;                 if(hour==24)                 {                     hour=0;                     day++;                     week++;                     if(month==2&&((year==0&&yearh%4==0)||(year!=0&&year%4==0))&&day==30)day=1;                      else if(month==2&&day==29)day=1;                     else if((month==4||month==6||month==9||month==11)&&day==31)day=1;                     else if(day==32)day=1;                     if(day==1)                     {                     month++;                     if(month==13)                     {                         month=1;                         year++;                         if(year==100)                         {                             year=0;                             yearh++;                             if(yearh==100)                             {                                 yearh=20;                             }                         }                     }                 }                 }             }         }     } } void disp() { sec_h=sec/10; sec_l=sec%10; min_h=min/10; min_l=min%10; hour_h=hour/10; hour_l=hour%10; day_h=day/10; day_l=day%10; month_h=month/10; month_l=month%10; year_h=year/10; year_l=year%10; P1_2=0; if(flag2==1) P0=tab[day_l]; else if(flag2==0) P0=tab[sec_l]; else if(flag2==2) P0=tab[week]; delay(1); P1_2=1; P1_3=0; if(flag2==1) P0=tab[day_h]; if(flag2==0) P0=tab[sec_h]; if(flag2==2) P0=tab[0]; delay(1); P1_3=1; P1_4=0; if(flag2==1) P0=tab[month_l]|0x80; else if(flag2==0) P0=tab[min_l]|0x80; else if(flag2==2) P0=tab[0]; delay(1); P1_4=1; P1_5=0; if(flag2==1) P0=tab[month_h]; else if(flag2==0) P0=tab[min_h]; else if(flag2==2) P0=tab[0]; delay(1); P1_5=1; P1_6=0; if(flag2==1) P0=tab[year_l]|0x80; else if(flag2==0) P0=tab[hour_l]|0x80; else if(flag2==2) P0=tab[0]; delay(1); P1_6=1; P1_7=0; if(flag2==1) P0=tab[year_h]; else if(flag2==0) P0=tab[hour_h]; else if(flag2==2) P0=tab[0]; delay(1); P1_7=1; } void keyscan() {   disp();   while(!key_set)            //日期/时间键   {      disp( );   if(key_set)   {     flag2++;     if(flag2==3)     flag2=0;   }   }   while(!key_y_h)            //年/时键   {      disp( );   if(key_y_h)   {     if(flag2==1)     {       year_l++;       if(year_l==10)       {           year_l=0;           year_h++;       }     year=year_l+year_h*10;     }     else  if(flag2==0)     {       hour_l++;       if(hour_l==10)       {         hour_l=0;         hour_h++;       }         if(hour_l==4&&hour_h==2)         {           hour_l=0;           hour_h=0;         }       }     hour=hour_h*10+hour_l;     }     }   while(!key_m_m)            //月/分键   {    disp();   if(key_m_m)   {     if(flag2==1)     {     month_l++;     if(month_l==10)     {       month_l=0;       month_h++;     }     if(month_h==1&&month_l==3)     {       month_l=1;       month_h=0;         }     month=month_l+month_h*10;     }     else if(flag2==0)     {     min_l++;     if(min_l==10)     {       min_l=0;       min_h++;       if(min_h==6)       {       min_h=0;       }     }     min=min_l+min_h*10;        }   }   }   while(!key_d_s)            //日/秒键   {      disp( );   if(key_d_s==1)   {     if(flag2)     {     day_l++;     if(day_l==10)     {       day_l=1;       day_h++;     }     if(day_h==3&&day_l==2)     {     day_l=1;     day_h=0;         }     day=day_h*10+day_l;     }     else if(flag2==0)     {     sec_l++;     if(sec_l==10)     {     sec_l=0;     sec_h++;     }     if(sec_h==6&&sec_l==0)     {     sec_h=0;     }     sec=sec_h*10+sec_l;   }   if(flag2==2)   {     week++;     if(week==8)     week=1;   }   }   }   } 附四 实物图: 科研实践任务书 二级学院:电气信息与电气工程学院  班级:  10 电二  学生姓名:    祝学东      学号:  10020442 指导教师:      庄志红        职称:  副教授                电子万年历设计 起止时间 2013年12月9日—2013年12月20日 指标类型   C 课题 内容 及其 目标 设计制作电子万年历,要求用数码管制作,能够显示年月日、时分秒,并且能对时钟日期进行精确调节。设计步骤: 1、分析设计要求,明确性能指标;查阅资料、设计方案分析对比。 2、论证并确定合理的总体方案,绘制总体结构框图,分析工作原理。 3、完成各单元具体电路的设计:单片机最小系统、按键、显示等电路。包括元器件选择、工作原理分析。 4、写出程序流程图及C语言源程序。 5、完成实物焊接、程序烧录、软硬件调试及科研实践说明书。   进程   安排 第 1 天:下达任务书、课题需求分析,收集和消化相关材料; 第2-3天:方案论证、比较和拟定,具体方案设计,元器件采购; 第4-5天:硬件原理图绘制、实物制作和调试; 第6-7天:软件流程图绘制、程序编制和调试; 第 8  天:系统联调和优化; 第 9  天:撰写科研实践; 第 10 天:作品演示、答辩。 设计地点 秋白楼  五楼
/
本文档为【单片机电子万年历(含程序)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索