显示年月日

//加载所需要的包
import   java.text.*;
import   java.util.*;

//创建一个主类
public   class   GetDate
{
public   static   void   main(String   args[])
{
//这种是通过Date类获取时间

//获取当前系统时间并用指定的格式显示,即(,时,分,秒)
SimpleDateFormat   sdf=new   SimpleDateFormat( "   yyyy   MM   dd   HH:mm:ss     ");  
//获取当前系统时间
Date   d=new   Date();
System.out.println( "当前系统日期为: "+sdf.format(d));

//以下的方式是通过Calendar类获取系统时间

//定义整形变量存储
int   year,month,day;
//使用默认时区和语言环境获得一个日历。
Calendar   today=Calendar.getInstance();

year=today.get(Calendar.YEAR);
month=today.get(Calendar.MONTH)+1;
day=today.get(Calendar.DAY_OF_MONTH);

System.out.println( "year= "+year);
System.out.println( "month= "+month);
System.out.println( "day= "+day);





}
}
在51单片机上实现显示年月日功能,可按以下方式进行: ### 硬件连接 采用573锁存器控制数码管显示,仅需占用10个IO口,其中2个用于控制锁存器使能,另外8个用于输出信号。利用锁存器能实现数据线的复用,让一组IO口既输出段选又输出片选。先关闭控制片选信号的573芯片的锁存功能,由单片机输出片选信号,接着开启锁存,使输出端保持不变,即锁住原来输入的信号。之后关闭控制段选的573的锁存功能,输出段选信号再锁存 [^1]。 ### 程序设计 1. **时钟计时**:可以使用单片机内部定时器来计时,也可以外接实时时钟芯片如DS1302等。若使用内部定时器,需对定时器进行初始化设置,设定定时时间,通过定时器中断来更新时间。若使用DS1302,要编写与该芯片通信的程序,读取其内部存储的时间数据(年、月、日等)。 2. **数码管显示**:根据硬件连接方式,编写数码管显示程序。要将读取到的年、月、日数据转换为数码管能够显示的段码,然后通过控制573锁存器依次输出片选和段选信号,实现数码管的动态显示。 以下是一个简单的示例代码框架(假设使用内部定时器计时,数码管共阴极): ```c #include <reg51.h> // 定义数码管段码表(共阴极) unsigned char code SEG_CODE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 定义锁存器控制端口 sbit LATCH_CS = P1^0; // 片选锁存器控制 sbit LATCH_SEG = P1^1; // 段选锁存器控制 // 定义时间变量 unsigned char year = 23; unsigned char month = 10; unsigned char day = 15; // 定时器初始化函数 void Timer0_Init() { TMOD |= 0x01; // 设置定时器0为模式1 TH0 = (65536 - 50000) / 256; // 定时50ms TL0 = (65536 - 50000) % 256; ET0 = 1; // 使能定时器0中断 EA = 1; // 全局中断使能 TR0 = 1; // 启动定时器0 } // 定时器0中断服务函数 void Timer0_ISR() interrupt 1 { TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; // 在这里更新时间 } // 数码管显示函数 void Display() { // 显示年 LATCH_CS = 0; P0 = 0x01; // 选择第一个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[year / 10]; // 显示十位 LATCH_SEG = 1; LATCH_CS = 0; P0 = 0x02; // 选择第二个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[year % 10]; // 显示个位 LATCH_SEG = 1; // 显示月 LATCH_CS = 0; P0 = 0x03; // 选择第三个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[month / 10]; // 显示十位 LATCH_SEG = 1; LATCH_CS = 0; P0 = 0x04; // 选择第四个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[month % 10]; // 显示个位 LATCH_SEG = 1; // 显示日 LATCH_CS = 0; P0 = 0x05; // 选择第五个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[day / 10]; // 显示十位 LATCH_SEG = 1; LATCH_CS = 0; P0 = 0x06; // 选择第六个数码管 LATCH_CS = 1; LATCH_SEG = 0; P0 = SEG_CODE[day % 10]; // 显示个位 LATCH_SEG = 1; } // 主函数 void main() { Timer0_Init(); while(1) { Display(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值