基于DS1302与数码管设计的电子万年历

基于DS1302与数码管设计的电子万年历
基于DS1302与数码管设计的电子万年历

广东交通职业技术学院

毕业论文

毕业论文题目:基于DS1302与数码管设计的电子万年历

学生姓名:张金如

学号:1213223217

院(系):机电工程学院

专业:机电一体化(自动化技术)

班级:一体化123班

指导教师:冯建

起止时间:2014 年11 月—— 2014 年 12 月

基于DS1302与数码管设计的电子万年历

摘要:单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子产品等,这些都离不开单片机。单片机是将CPU、RAM、ROM、定时器、计数器和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上,而51系列单片机是各单片机中最为典型和最有代表性的一种。本文通过对一个基于DS1302与数码管的电子万年历的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、实时钟电路DS1302、显示电路组成,能实现时钟日历显示的功能,能进行时、分、秒的显示。

关键词:单片机;DS1302;数码管;电子万年历

目录

1引言 (4)

2 设计方案与要求 (4)

2.1 功能要求 (4)

2.2 系统基本方案选择和论证 (4)

2.2.1单片机芯片的选择和论证 (4)

2.2.2显示模块的选择和论证 (5)

2.2.3时钟芯片的选择和论证 (5)

2.3 电路设计最终方案决定 (5)

2.4 各硬件基本原理及介绍 (5)

2.4.1AT89C51单片机原理及介绍 (5)

2.4.2LED数码管显示原理及介绍 (6)

2.4.3DS1302原理及介绍 (6)

2.4.474HC573原理及介绍 (7)

3 硬件设计部分 (7)

3.1 电路设计框图 (7)

3.2 系统硬件概述 (7)

3.3 主要单元电路的设计 (8)

3.3.1单片机主控制模块的设计 (8)

3.3.2时钟电路DS1302的设计 (8)

3.3.3显示模块的设计 (10)

3.3.4锁存器模块的设计 (11)

4软件设计部分 (11)

4.1 软件设计概述 (11)

4.2 Keil C51和Proteus介绍 (12)

4.2.1Keil C51的介绍 (12)

4.2.2Proteus的介绍 (12)

4.3 整体设计 (12)

5结束语 (14)

1 引言

随着微电子技术的高速发展,随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。

而电子万年历作为电子类小设计,是单片机实验中一个很常用的题目。因为它有很好的开放性和可发挥性,不仅考察了对单片机的掌握能力更加强了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。电子万年历已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的万年历逐渐受到人们的欢迎。

采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特可靠。在软件设计过程中,应对硬件部分有相关的了解,这样有助于对设计更深刻的了解,有助于软件设计。

2 设计方案与要求

2.1 功能要求

本电子万年历的功能:能动态显示年、月、日、小时、分钟、秒

2.2 系统基本方案选择和论证

2.2.1单片机芯片的选择和论证

方案一:

采用AT89S52芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。

方案二:

采用AT89C51,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89S52的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。

结论:

采用AT89C51作为主控制系统.

2.2.2显示模块的选择和论证

方案一:

采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形。但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。

方案二:

采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。

结论:

采用LED数码管作为显示。

2.2.3时钟芯片的选择和论证

方案一:

直接采用单片机定时计数器提供脉冲信号,使用程序实现年、月、日、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、月、年进行计数,而且精度高。

结论:

采用DS1302作为时钟芯片。

2.3 电路设计最终方案决定

综上各方案所述,对此次作品的方案选定: 采用AT89C51作为主控制系统、DS1302提供时钟、LED数码管动态扫描作为显示。

2.4 各硬件基本原理及介绍

2.4.1 AT89C51单片机原理及介绍

单片机是一种集成电路芯片,是采用超大规模集成电路技术把CPU、随机存储器RAM、ROM、多种I/O接口和中断系统、定时器/计数器、A/D转换器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。AT89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O 口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。

AT89C51引脚如图所示

2.4.2LED数码管显示原理及介绍

LED显示是绝大多数单片机应用系统必备的部件之一,发光二极管组成的LED显示是单片机应用产品中最常用的廉价输出设备。它由若干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。1位显示器由8个发光二极管组成,其中7个发光二极管a~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗。

引脚如图所示

2.4.3DS1302原理及介绍

DS1302是美国DALLAS公司推出的一种高性能、低功耗的电子万年历芯片,

附加31字节静态RAM,采用SPI三线接口与CPU一进行同步通信,并可采用突

发方式一次传送多个字节的时钟信号和RAM数据。电子万年历可提供秒、分、时、

日、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电

压宽达2.5V~5.5V。采用双电源供电(主电源和备用电源)。DS1302用于数据记录,

特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间

同时记录,因此广泛应用于测量系统中。

引脚如图所示

2.4.474HC573原理及介绍

当锁存使能端LE为高时,这些器件的锁存对于数据是透明的,当锁存使能端LE为低时,符合建立时间和保存时间的数据会被锁存。

引脚如图所示

3 硬件设计部分

3.1 电路设计框图

3.2 系统硬件概述

本设计是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作。时钟电路由DS1302提供,采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能,本电路采用DS1302单字节传送方式实现与主控机之间数据的传送。显示部分由LED数码管动态扫描来显示。

3.3 主要单元电路的设计

3.3.1单片机主控制模块的设计

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端为输入端,XTAL2接外部晶振和微调电容的另一端为输出端。第9引脚为复位输入端,接上电容,电阻及开关后构成复位电路。

主控制系统

1.内部结构

按功能分为8部分:CUP,程序存储器,数据存储器,时钟电路,串行口,并行I/O口,中断系统,定时/计数器。

2.引脚定义及功能

Vcc:接+5V 电源

Vss:接地

XTAL1和XTAL2:时钟引脚,外接晶体引线端。

RST/Vpq:RST是复位信号输入端,Vpd是备用电源输入端。

I/O口引脚:

P0.0~P0.7:P0口8位双向I/O口;

P1.0~P1.7:P1口8位准双向I/O口;

P2.0~P2.7:P2口8位准双向I/O口;

P3.0~P3.7:P3口8位准双向I/O口。

3.3.2时钟电路DS1302的设计

1.引脚功能及结构

DS1302 的电路图如下,其中Vcc1 为后备电源,VCC2 为主电源。在主电源

关闭的情况下,也能保持时钟的连续运行。DS1302 由Vcc1 或Vcc2 两者中的较大者供电。X1 和X2 是振荡源,外接32.768kHz 晶振。RST 是复位/片选线,通过把RST 输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。只有在SCLK 为低电平时,才能将RST 置为高电平。I/O 为串行数据输入输出端(双向), SCLK 始终是输入端。DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚。

DS1302电路图

2.读写时序说明

DS 1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。DS1302的控制字如图:

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。

控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。

位6:如果为0则表示存取日历时钟数据,为1表示存取RAM数据

位5至位1(A4-A0):指示操作单元的地址

位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作

“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。

“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。

控制字节总是从最低位开始输入/输出的,在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS 1302数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。

数据读写时序如图:

3.3.3显示模块的设计

LED数码管(LED Segment Displays)是由8个发光二极管构成。按照一定的图形及排列封转在一起的显示器件。其中7个LED构成7笔字形,1个LED 构成小数点(固有时成为八段数码管)LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是7段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是7段的显示字码共用一个电源的正极,是低电平点亮。只要控制其中各段LED的亮灭即可显示相应的数字、字母或符号。

数码管驱动可分为静态和动态两种。静态驱动也称直流驱动,静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O口多。

动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另外为每个数码管的公共端为位选端,位选端由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但由于位选端不同所以我们只要将需要显示的数码管的位选端打开,该位就显示出字形,没有打开的数码管就不会亮。通过轮流控制各个LED数码管位选端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,人看到的是一组稳定的显示信息,不会有闪烁感,动态显示能够节省大量的I/O口,而且功耗更低。

共阳极LED数码管的内部结构原理图

共阴极LED数码管的内部结构原理图

3.3.4锁存器模块的设计

74HC573 是一种CMOS 器件,器件的输入是和标准 CMOS 输出兼容的,加上拉电阻,他们能和 LS/ALSTTL 输出兼容。当锁存使能端LE为高时,这些器件的锁存对于数据是透明的。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

4 软件设计部分

4.1 软件设计概述

单片机作为嵌入式系统的核心器件,其应用系统设计包括硬件电路设计和软件电路设计两个方面,学习和应用过程中必须软硬结合。单片机系统调试通常分为软件调试、硬件调试和整体调试三个部分。单片机自身不具备开发功能,必须借助于开发工具。目前,国内外推出了许多基于个人计算机的单片机软或硬开发平台。硬件开发平台方面诸如开发板、实验箱、仿真器、编程器、示波器等,但因其价格不低,开发过程繁琐。因此在软件支持的前提下,应用最普遍的是软件仿真开发平台。单片机应用系统软件仿真开发平台有两个常用的工具软件: Keil 和Proteus主要用于单片机源程序的编辑、编译、链接以及调试。。

4.2 Keil C51和Proteus介绍

4.2.1Keil C51的介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编辑器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。

4.2.2Proteus的介绍

Proteus是英国Labcenter公司开发的电路分析与实物仿真软件,可以仿真、分析各种模拟器件和集成电路,该软件的特点是:现了单片机仿真和电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能,有各种虚拟仪器,如示波器、信号发生器等,提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态。

4.3 整体设计

整体实现过程:由串行的时钟芯片DS1302将时钟信号送给单片机,单片机处理后输出。而74HC573将串行信号变成并行信号,每个74HC573对应LED八段码,二个74HC573对应二组LED数码管。单片机P0.7-P0.0和P2.7-P2.0分别连接两个数码管组和74HC573锁存器驱动数码管被点亮。

其整个过程如下图:

主要程序如下:

向DS1302写入一个字节

void Write_Byte(uchar X)

{

uchar i;

for(i=0;i<8;i++)

{

SDA=X&1;

CLK=1;

CLK=0;

X>>=1;

}

}

从DS1302读取一个字节

uchar Read_Byte()

{

uchar i,byte,t;

for(i=0;i<8;i++)

{

byte>>=1;

t=SDA;

byte|=t<<7;

CLK=1;

CLK=0;

}

return byte/16*10+byte%16;

}

从DS1302指定位置读取数据uchar Read_Data(uchar addr)

{

uchar dat;

RST=0;

CLK=0;

RST=1;

Write_Byte(addr);

dat=Read_Byte();

CLK=1;

RST=0;

return dat;

}

向DS1302指定位置写入数据

void Write_Data(uchar addr,uchar dat) {

CLK=0;

RST=1;

Write_Byte(addr);

Write_Byte(dat);

CLK=1;

RST=0;

}

读取当前时间,年月日,小时、分钟、秒钟

void GET_Time()

{

Current_Time[0] =Read_Data(0x81); //读取秒

Current_Time[1] =Read_Data(0x83); //读取分

Current_Time[2] =Read_Data(0x85); //读取时

Current_Time[3] =Read_Data(0x87); //读取日

Current_Time[4] =Read_Data(0x89); //读取月

Current_Time[5] =Read_Data(0x8D); //读取年

}

5 结束语

2014年11月我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个设计过程难以用语言来表达。历经了一个多月的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。

在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手用Proteus设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;我从资料的收集中,掌握了很多单片机及其接口应用的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。

毕业论文的写作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。

致谢

感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。

在写毕业论文的程中,我们深切的体会到,实践是理论运用的最好检验和团队合作的重要性,这一次的设计是对我们所学知识的一次综合性检测,无论是动手能力还是理论知识运用能力都得到了提高,同时加深了我们对网络资源的认识,大大提高了查阅资料的效率,使我们有充足的时间投入到电路设计当中。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。

参考文献

[1]王静霞.《单片机应用技术》,电子工业出版社,2009.

[2]张毅刚,彭喜元,姜守达,乔立言.《新编MCS-51单片机应用设计》哈尔

滨工业大学出版社,2008

[3]马忠梅.《单片机的C语言应用设计》北京航空航天大学出版社2008

[4]张道德.《单片机接口技术》,中国水利水电出版社2007

[5]石生.《电路基本分析》,高等教育出版社2008

[6]谭浩强.《C语言程序设计》(第2版),清华大学出版社.

[7]刘国巍,周晓萍,周莉《数字电子技术基础》,国防科技大学出版社2009

[8]刘守义,《单片机应用技术》(第2版)西安电子科技大学出版社,2007

[9]先锋工作室《单片机程序设计实例》北京:清华大学出版社,2003

[10]李群芳,《单片机微型计算机与接口技术》(第2版)北京:电子工业出版

ds1302数码管显示应用

DS1302应用 刚学单片机,好多好奇,所以想做个简单的时钟。下面是PROTEUS仿真电路和电路图,简单易懂。 文笔不好,说了多余。下面是程序。 #include #include #include #define uint unsigned int #define uchar unsigned char #define BCDTUAN(str) (str/10*16+str%10) //定义宏,将要写入DS1302的时间转化为BCD码 #define Write_Sec 0x80 #define Write_Min 0x82 #define Write_Hou 0x84 #define Write_Dat 0x86 #define Write_Mon 0x88 #define Write_day 0x8a #define Write_Yea 0x8c #define Write_WP 0x8e //写保护位 #define Write_TCR 0x90 #define Read_Sec 0x81 #define Read_Min 0x83 #define Read_Hou 0x85 #define Read_Dat0x87 #define Read_Mon 0x89 #define Read_Day 0x8b #define Read_Yea 0x8d #define CLK_BurstW 0xbf //时钟突发模式写 #define CLK_BurstR 0xbf //时钟突发模式读 #define Write_RAM_Begin 0xc0 //RAM第一个字节写指令 #define Read_RAM_Begin 0xc1 //RAM第一个字节读指令 #define RAM_BurstW 0xfe //突发模式写RAM #define RAM_BurstR 0xff //突发模式读RAM sbit _74hc154_A = P1^0; sbit _74hc154_B = P1^1; sbit _74hc154_C = P1^2; sbit _74hc154_D = P1^3; sbit CE =P1^6; sbit SCLK=P1^5; sbit IO =P1^4; uchar code scan[][4]={{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1}, {0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1}, {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

基于DS1302与数码管设计的可调数字钟

学习情境2-可调式数字钟 之基于DS1302与数码管设计的可调数字钟 ☆点名,复习 1、定时器的工作方式有哪些?如何对定时器进行初始化。 2、数码管动态显示技术的原理? ☆新课讲授 2.2 基于DS1302与数码管设计的可调数字钟 前面我们用定时器产生1秒的时间,从而也设计出了可以调节数字钟,但用这种方法设计出来的电子钟不够准确。这节课我们用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路DS1302 ,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。同时,我们还是用数码管作为显示时间的硬件。 2.2.1 DS1302芯片技术资料 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图 1 DS1302引脚 图2 DS1302内部结构 1、引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK 始终是输入端。 2 、DS1302的寄存器和控制命令 对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM,当为0时,表示AM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 日历、时间寄存器及控制字如表1所示: 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

TM1638芯片+DS1302驱动共阴数码管时钟

一、概述 二、51单片机,TM1638芯片+DS1302驱动共阴数码管时钟,最后包括 按键检测程序(是分开的。) TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、 空调、家庭影院等产品的高段位显示屏驱动。 二、特性说明 ?采用功率CMOS 工艺 ?显示模式 10 段×8 位 ?键扫描(8×3bit) ?辉度调节电路(占空比8 级可调) ?串行接口(CLK,STB,DIO) ?振荡方式:RC 振荡(450KHz+5%) ?内置上电复位电路 ?采用SOP28封装 三、、管脚定义:

电路图数码管:

程序代码: /*************** TM1638.H头文件*******************/ #ifndef _TM1638_H #define _TM1638_H //引脚定义 sbit DIO=P1^0; sbit CLK=P1^1; sbit STB=P1^2; //写一个8Bit数据 void TM1638_Write(unsigned char DATA) //写数据函数{ unsigned char i; for(i=0;i<8;i++) { CLK=0; if(DATA&0X01) DIO=1; else DIO=0; DATA>>=1; CLK=1; } } /*unsigned char TM1638_Read(void) //读数据函数{ unsigned char i; unsigned char temp=0; DIO=1; //设置为输入 for(i=0;i<8;i++) { temp>>=1; CLK=0; if(DIO) temp|=0x80; CLK=1; } return temp; } */ void Write_COM(unsigned char cmd) //发送命令字 { STB=0;

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

时钟芯片DS1302 8位数码管显示

时钟芯片DS1302 8位数码管显示 [日期:2011-03-19 ] [来源:本站编辑作者:佚名] [字体:大中小] (投递新闻) ;8位数码管显示 ;P0 为段码口、P2 为位码口 ;时钟芯片:DS1302 ;-------------------------------------- DS1302 端口位定义: IO_DA TA→P1.1 ; 数据传送总线 SCLK →P1.0 ; 时钟控制总线 RST →P1.2 ; 复位总线 ;--------------------------------------- 24C04 端口位定义: SDA→P3.6 ;24C01的串行数据线 SCLK →P3.7 ;24C01的串行时钟线 ;--------------------------------------- K1 →P1.4 ;独立键 K2 →P1.5 K3 →P1.6 K4 →P1.7 ;--------------------------------------- BEEP →P3.3 ;蜂鸣器 ;--------------------------------------- 使用8位数码管显示: 段码→P0 位码→P2 ;--------------------------------------- 开机显示: 08-48-58 ;实时时间的显示,时、分、秒 K1: →切换显示内容键,每按一下可切换显示内容,最后返回实时时间的显示。 05-03-06 ;显示年、月、日 ;-------------------------------------------------------------------- K2: →时间与日期设定键, K3: →选择键(位移键) 每按一下可切换设定内容,最后返回实际时间的显示。在设定过程中,被选中的设定位闪动。选择顺序:时→分→日→月→年→返回 K1: →UP 键 K2: →DOWN 键

DS1302和51单片机设计电子钟数码管显示

DS1302和51单片机设计电子钟数码管显示 2010-09-03 10:39 DS1302和51单片机设计电子钟数码管显示(未作出防真) #include #define uchar unsigned char #define uint unsigned int uchar dis[16]={0,0,0,0,10,10,0,0,7,2,9,0,9,0,0,2}; uchar P2_scan[4]={0xf7,0xfb,0xfd,0xfe}; //位选择显示扫描uchar P0_scan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //数字显示不带小数点 uchar P0_scan1[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f} ;//数字显示带小数点 char clock[7]={4,0,15,10,27,9,9}; uchar tiao,m=0,n=8,S; bit time=0,p=0; sbit CLK = P1^0; sbit IO = P1^1; sbit RST = P1^2; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; /**************************** 延时函数 **************************/ void delay(uchar time)//延时0.1ms { uchar i,j; do{ for(i=0;i<10;i++) for(j=0;j<20;j++); time--; }while (time>0); } /***************************** 复位函数 ******************************/ void reset() { CLK = 0; RST = 0;

DS1302数码管显示程序

/************************************************************************/ // huaqinMCU DS1302 实验程序数码管显示时钟设置说明 // "8键"为时钟设置、时分切换、保存"0键"为加"4键"为减 /************************************************************************/ #include #define uchar unsigned char #define uint unsigned int //===以下IO定义请根据您硬件的连接修改=== sbit T_RST=P3^5;//ds1302-5 sbit T_IO=P3^4;//ds1302-6 sbit T_CLK=P3^6;//ds1302-7 sbit ACC0=ACC^0; sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍 sbit up=P3^1; sbit down=P3^2; sbit set=P3^0; uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg; int hour,mie,sei; uchar clk_time[3]; //秒,分,时寄存器初始值 code uchar ledmap[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //数码管段码 /******************DS1302:写入操作(上升沿)*********************/ void write_byte(uchar da) { uchar i; ACC=da; for(i=8;i>0;i--) { T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC>>1; } } /******************DS1302:读取操作(下降沿)*****************/ uchar read_byte(void) { uchar i;

基于DS1302与数码管设计的电子万年历

广东交通职业技术学院 毕业论文 毕业论文题目:基于DS1302与数码管设计的电子万年历 学生姓名:张金如 学号:1213223217 院(系):机电工程学院 专业:机电一体化(自动化技术) 班级:一体化123班 指导教师:冯建 起止时间:2014 年11 月—— 2014 年 12 月

基于DS1302与数码管设计的电子万年历 摘要:单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子产品等,这些都离不开单片机。单片机是将CPU、RAM、ROM、定时器、计数器和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上,而51系列单片机是各单片机中最为典型和最有代表性的一种。本文通过对一个基于DS1302与数码管的电子万年历的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、实时钟电路DS1302、显示电路组成,能实现时钟日历显示的功能,能进行时、分、秒的显示。 关键词:单片机;DS1302;数码管;电子万年历

目录 1引言 (4) 2 设计方案与要求 (4) 2.1 功能要求 (4) 2.2 系统基本方案选择和论证 (4) 2.2.1单片机芯片的选择和论证 (4) 2.2.2显示模块的选择和论证 (5) 2.2.3时钟芯片的选择和论证 (5) 2.3 电路设计最终方案决定 (5) 2.4 各硬件基本原理及介绍 (5) 2.4.1AT89C51单片机原理及介绍 (5) 2.4.2LED数码管显示原理及介绍 (6) 2.4.3DS1302原理及介绍 (6) 2.4.474HC573原理及介绍 (7) 3 硬件设计部分 (7) 3.1 电路设计框图 (7) 3.2 系统硬件概述 (7) 3.3 主要单元电路的设计 (8) 3.3.1单片机主控制模块的设计 (8) 3.3.2时钟电路DS1302的设计 (8) 3.3.3显示模块的设计 (10) 3.3.4锁存器模块的设计 (11) 4软件设计部分 (11) 4.1 软件设计概述 (11) 4.2 Keil C51和Proteus介绍 (12) 4.2.1Keil C51的介绍 (12) 4.2.2Proteus的介绍 (12) 4.3 整体设计 (12) 5结束语 (14)

LED数码管显示电子钟设计

《单片机原理及应用》 课程设计说明书 题目LED数码管显示电子钟设计系(部) 专业(班级) 姓名 学号 指导教师 起止日期

课程设计任务书系(部):专业: 课题名称LED数码管显示电子钟设计 设计要求1、课题内容:设计一种基于 AT89S52 单片机的数码管显示电子时钟,要求如下: (1)、能正确显示时间,时钟由八位数码管显示,显示格式为:XX小时--XX 分--XX秒。 (2)、时间能够由按键调整,误差小于1S。 (3)、闹钟功能:时间运行到与闹钟设定时间时,闹钟响(持续响3秒) (4)、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几声(每声持续响2秒,每两声之间时间间隔1秒)。 (5)、通过按键切换,可以显示当前日期,显示格式为:XX 年?XX 月 ?XX日,5秒钟后自动返回时间显示模式。 2、要求: 完成该系统的硬件和软件的设计,在 Proteus 软件上仿真通过,并提 交一篇课程设计说明书。 设计工作量1、汇编或C51语言程序设计; 2、程序调试; 3、在Proteus上进行仿真成功; 4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。 工作计划 起止日期工作内容 第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天~第六天程序设计 第六天~第八天程序调试、仿真 第九天~第十天系统测试并编写设计说明书 教研室意见系(部)主管领导意见

目录 目录 (3) 一、摘要 (4) 二、设计内容 (4) 2.1、任务要求 (4) 2.2、设计程序方案 (4) 2.3 设计电路仿真图 (6) 三、心得体会 (9) 四、参考文献 (9)

DS1302写时分秒并显示数码管上

module spi_module( CLK, RSTn, Spi_Start_Sig, Words_Addr, Write_Data, Read_Data, Spi_Done_Sig, RTC_RST, SCLK, SIO); input CLK; input RSTn; input [1:0]Spi_Start_Sig; input [7:0]Words_Addr; input [7:0]Write_Data; output [7:0] Read_Data; output Spi_Done_Sig; output RTC_RST; //to top output SCLK;//to top inout SIO; /*****************************/ parameter T0P5US = 4'd9; /*****************************/ reg [4:0]cnt; always @ ( posedge CLK or negedge RSTn ) if( !RSTn ) cnt <= 5'd0; else if( Spi_Start_Sig[0] == 1'b1 || Spi_Start_Sig[1] == 1'b1 ) begin if( cnt == T0P5US ) cnt <= 4'd0; else cnt <= cnt + 4'b1; end else cnt <= 4'd0;

/*****************************/ reg [7:0]temp_reg; reg [5:0]i; reg rtc_RST; reg rSIO; reg rSCLK; reg isOut; reg isDone; always @ ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i <= 6'd0; rtc_RST <= 1'b0; rSIO <= 1'b0; rSCLK <= 1'b0; isOut <= 1'b0; isDone <= 1'b0; end else if( Spi_Start_Sig[1:0]==2'b10 ) case( i ) 0 : begin rSCLK <= 1'b0; rtc_RST <= 1'b1; isOut <= 1'b1; i <= i + 1'b1; end 1, 3, 5, 7, 9, 11, 13, 15 : if( cnt == T0P5US ) i <= i + 1'b1; else begin rSIO <= Words_Addr[ (i >> 1) ]; rSCLK <= 1'b0; end//write data (Words_Addr)to SIO-port// 2, 4, 6, 8, 10, 12, 14, 16 : if( cnt == T0P5US ) i <= i + 1'b1; else begin rSCLK <= 1'b1; end 17, 19, 21, 23, 25, 27, 29, 31 : if( cnt == T0P5US ) i <= i + 1'b1; else begin rSIO <= Write_Data[ (i >> 1) -8]; rSCLK <= 1'b0; end 18, 20, 22, 24, 26, 28, 30, 32 : if( cnt == T0P5US ) i <= i + 1'b1; else begin rSCLK <= 1'b1; end

基于51与DS1302时钟芯片数码管显示万年历

基于51与DS1302时钟芯片数码管显示 #include #include #define uchar unsigned char #define uint unsigned int uchar data_7seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar hour,min,sec,year,mon,day,week,count,count1,ts; sbit rst=P1^0; //1302脚1 sbit sck=P1^1; //1302脚2 sbit io=P1^2; //1302脚3 sbit shi=P1^3; //时 sbit fen=P1^4; //分 sbit miao=P1^5; //秒 sbit nian=P1^6; //年 sbit yue=P1^7; //月 sbit ri=P3^0; //日 sbit xq=P3^1; //星期 sbit miaodian=P3^2; //秒点 sbit deng=P3^3; //整点报时灯 sbit gm=P3^4; //光敏模块 sbit zd=P3^5; //节日报模块 sbit sun=P3^6; //太阳灯 sbit yuel=P3^7; //月亮灯 /******************************函数声明********************************************/ void write_ds1302_byte(uchar dat); //1302字节写 void write_ds1302(uchar add,uchar dat); //1302地址读 uchar read_ds1302(uchar add); //1302地址读 void read_rtc(); //1302字节写 void set_rtc(); void display(); void delay(int n); void dsbz(); //判断语句定义 /**********************************DS1302单字节写入***********************************/ void write_ds1302_byte(uchar dat) { uchar i; for (i=0;i<8;i++) { sck=0; io=dat&0x01; dat=dat>>1;

DS1302+AT89S51单片机时钟C程序(六位共阳数码管显示)

DS1302+A T89S51单片机时钟C程序(六位共阳数码管显示) //DS1302时钟芯片程序 #include #define uchar unsigned char #define uint unsigned int sbit CLK=P2^3; //定义口 sbit IO=P2^4; sbit RST=P2^5; sbit ACC7=ACC^7; sbit ACC0=ACC^0; uchar a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}, //定义数码管显示码b[8]={0x00,0x00,0x12,0x23,0x11,0x07,0x08,0xbe},//写入时钟数据,最后be突发访问c[7],s,s1,ml1,mh1,ml2,mh2,ml3,mh3; //c存放读.出时钟数据 void delay(uint z) // 延时 { uint i; uchar j; for(i=z;i>0;i--) for(j=200;j>0;j++); } // 显示子程序 void display(uchar mh1,uchar ml1,uchar mh2,uchar ml2,uchar mh3,uchar ml3) { uchar x,k,r; for(k=0;k<80;k++) { for(r=0;r<8;r++) {

x=P2&0XF8; P2=x+r ; if(r==2||r==5) { P0=0XBF; delay(3); } //------秒------- if(r==0) { P0=a[ml1] ; delay(3) ; } if(r==1) { P0=a[mh1] ; delay(3) ; } //------fen--------- if(r==3) { P0=a[ml2] ; delay(3) ; } if(r==4) { P0=a[mh2] ; delay(3) ;

51单片机ds1302数码管显示

51单片机控制ds1302与数码管显示实时时钟1、程序结构: 2、试验现象:

3、具体程序: /********************************************************************** main.c ***********************************************************************/ #include #include"ds1302.h" #include"display.h" void main() { set_rtc();//时间设置函数 while(1) { read_rtc();//读取时间函数 time_pros();//时间处理函数 display();//显示函数 } } /********************************************************************** ds1302.c (uchar、uint两个宏定义放在了头文件中) ***********************************************************************/ #include #include"ds1302.h" #include"intrins.h" sbitrst=P2^4; sbitio=P2^0; sbitsck=P2^1; uchar time[]={11,59,50};//时间初始设置 uchar code wrtie_add[]={0x84,0x82,0x80};//写地址 uchar code read_add[]={0x85,0x83,0x81};//读地址 uchardspbuf[]={0,0,0,0,0,0};//数据缓冲存储 void write_ds1302_byte(uchardat)//写字节函数 { uchari; for(i=0;i<8;i++) { sck=0;

DS1302八位数码管C语言可调时钟日历

DS1302可调时钟日历程序简介: 8为数码管显示 通过K1切换时间日历 时间格式位XX—XX—XX分别为时分秒 日历格式为XX—XXX分别为月日星期 在时间显示时,通过按K2实现时、分、秒的闪烁切换 在日期显示时,通过按K2实现月、日、星期的闪烁切换 在任意数码管闪烁时,短按K3,该闪烁位值增1,短按K4,该闪烁位值减1 在任意数码管闪烁时,长按K3,该闪烁位值连续增1,长按K4,该闪烁位值连续减1 在任意调节状态,短按K5,正常显示时间 (程序经硬件实际测试通过,采用共阳数码管,程序放在WORD中有点乱,复制到KILE 中就好了) DS1302时钟电路图 DS1302程序 #include #define uchar unsigned char #define uint8 unsigned int sbit io_DS1302_RST = P1^5 ; sbit io_DS1302_IO = P1^6 ;

sbit io_DS1302_SCLK = P1^7 ; sbit duan=P1^0; sbit wei=P1^2; char shi,fen,miao,day,month,year,week,k,tiaoshijian,tiaoriqi,bb; uchar table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xbf}; uchar table1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x80,0x90,0xbf,0xbf}; #define KEY_1 0x0e #define KEY_2 0x0d #define KEY_3 0x0b #define KEY_4 0x07 #define KEY_5 0x10 #define KEY_NULL 0x1f #define KEY_PRESS 0x80 #define KEY_LONG 0x40 #define KEY_STATE_INIT 0 #define KEY_STATE_PRESS 1 #define KEY_STATE_LONG 2 #define KEY_STATE_UP 3 #define KEY_LONG_PERIOD 20 #define KEY_CONTINUE_PERIOD 10 bit set; bit dao1S=0; bit dao2MS=0; bit dao10MS; bit ss,mm,ff,yue,tian,xq; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; sbit key5=P3^4; int main_flag=0,exit_flag,up_flag,down_flag; int tab[]={0,0,0,0,0,0}; uchar weitable[]={0x01,0x02,0x04,0x08,0x10,0x20}; uchar tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

DS1302时钟 数码管显示

DS1302时钟芯片,大家都知道是什么来的。。。不懂的百度下就知道了。。。 这个只是读取出时间,其它功能没有写出来,用了四位共阳数码管显示。 具体电路和仿真可以到中国电子DIY之家论坛搜索 /********************************** * DS1302简单时间显示* * 数码管显示* ***********************************/ #include #define uchar unsigned char #define uint unsigned int #define W P2 //位选 #define D P0 //段选 sbit IO=P1^0; //数据口 sbit SCLK=P1^1; //控制数据时钟 sbit RST=P1^2; //使能端、复位端 /************按键引脚定义***********/ sbit s1=P1^5; //按键加 sbit s2=P1^6; //按键减 sbit s3=P1^7; //按键选择 char knum=0,snum,fnum; /***********写时分秒地址************/ #define write_shi 0x84 #define write_fen 0x82 #define write_miao 0x80 /***********读时分秒地址************/ #define read_shi 0x85 #define read_fen 0x83 #define read_miao 0x81 char shi,fen,miao; //读出数据存储变量 uchar d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90}; //不带小数点 uchar dd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点 void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar read_1302(uchar add) //读函数 { uchar i,date;

相关主题
相关文档
最新文档