程序代码如下:
#include<iostream>
#include<windows.h>
using namespace std
class Clock{
public:
Clock(short h=0,short m=0,short s=0):h(h),m(m),s(s){
}
void displayTime()
private:
short h
short m
short s
}void Clock::displayTime(){
while(true){
cout<<h<<':'<<m<<':'<<s<<" "
Sleep(1000)
cout<<'\r'
if(!(s=++s%60))
if(!(m=++m%60))
h=++h%24
}
} int main()
{
Clock A(23,59,55)
A.displayTime()
return 0
}
扩展资料:
定义一个日期类,包括年、月、日三个成员变量,显示日期的方法如下数乱:裂毕余肆滚
publicclassDemo{
publicstaticvoidmain(String[]args){
Datedate1=newDate(1994,5,22)
date1.showInfo()
Datedate2=newDate()
date2.year=1995
date2.month=6
date2.day=29
date2.showInfo()
}
}
//日期类:
publicclassDate{
intyear
intmonth
intday
//构造方法
publicDate(intyear,intmonth,intday){
this.year=year
this.month=month
this.day=day
}
publicDate(){
}
publicvoidshowInfo(){
System.out.println(year+"年"+month+"月"+day+"日")
}
}
#include <reg51.h>#define uchar unsigned char //定义unsigned int为uint
#define uint unsigned int //定义unsigned uchar为uchar
sbit LCD_RS = P2^0
sbit LCD_RW = P2^1
sbit LCD_EN = P2^2
sbit D_SDA = P2^6 //定义74HC164数据线为P2.6端口
sbit D_SCL = P2^7 //定义74HC164数据线为P2.7端口
sbit CLK = P1^3 /*实时时钟时钟线引脚 */
sbit IO = P1^4 /*实时时钟数据线引脚 */
sbit RST = P1^5 /*实时时钟复位线引脚 */
sbit ACC0 = ACC^0
sbit ACC7 = ACC^7
uchar time[8] = {0x50,0x30,0x19,0x30,0x12,0x06,0x06}
//========= 延时函数 ============
/纯举喊/延时时间以1ms为单位
//s决定延时时间长短
void delay_ms(uint s)
{
uint x
for(ss>0s--)
{
x = 200
while(x--)
}
}
//========= 送出一个字节给74HC164(实现答姿串并转换) ==========
void send_out(unsigned char out)//传送一个字节8位
{
uchar i
D_SCL = 0
for (i=8i>=1i--)
{
D_SDA = out&0x80 //送数据到数据口
D_SCL = 1 //时钟线置1
D_SCL = 0 //送一时钟
out<<=1 //左移
}
}
//========= 写命令函数 ==========
void lcd_wcmd(uchar cmd)
{
LCD_RS = 0
LCD_RW = 0
LCD_EN = 0
send_out(cmd)
LCD_EN = 1
LCD_EN = 0
}
//========= 写数据函数 ==========
void lcd_wdat(uchar dat)
{
LCD_RS = 1
LCD_RW = 0
LCD_EN = 0
send_out(dat)
LCD_EN = 1
LCD_EN = 0
}
//========= LCD初始化函数 ==========
void lcd_init()
{
lcd_wcmd(0x38)
delay_ms(1)
lcd_wcmd(0x0c) //显示开,关光标
delay_ms(1)
lcd_wcmd(0x06) //向右移动光标做野
delay_ms(1)
lcd_wcmd(0x01) //清除LCD显示屏
delay_ms(1)
}
//========== 往DS1302写入1Byte数据 (内部函数) =============
void w_byte(uchar dat)
{
uchar i
for(i=8i>0i--)
{
IO = dat &0x01
CLK = 1
CLK = 0
dat = dat >>1
}
}
//======== 从DS1302读取1Byte数据 (内部函数) ===================
uchar r_byte(void)
{
uchar i
for(i=8i>0i--)
{
ACC = ACC >>1
ACC7 = IO
CLK = 1
CLK = 0
}
return(ACC)
}
//========== 指定地址往DS1302写入1Byte数据 (内部函数) =============
void write_byte(uchar addr, uchar dat)
{
RST = 0
CLK = 0
RST = 1
w_byte(addr)
w_byte(dat)
CLK = 1
RST = 0
}
//========== 指定地址往DS1302读1Byte数据 (内部函数) =============
uchar read_byte(uchar addr)
{
uchar ucData
RST = 0
CLK = 0
RST = 1
w_byte(addr)
ucData = r_byte()
CLK = 1
RST = 0
return(ucData)
}
//============ 设置ds1302日期和时间 =============
void write_ds1302(uchar *p)
{
uchar i
uchar addr = 0x80
write_byte(0x8e,0x00)// 控制命令,WP=0,写 *** 作
for(i =7i>0i--)
{
write_byte(addr,*p) // 秒 分 时 日 月 星期 年
p++
addr +=2
}
write_byte(0x8e,0x80) // 控制命令,WP=1,写保护
}
//============ 读ds1302当前日期和时间 =============
void read_ds1302(uchar *p)
{
uchar i
uchar addr = 0x81
for (i=0i<7i++)
{
*p = read_byte(addr) //格式为: 秒 分 时 日 月 星期 年
addr += 2
p++
}
}
//============ 显示函数 ===================
void lcd_disp()
{
uchar addr = 4
lcd_wcmd(0x80 + addr)
lcd_wdat(((time[2]>>4)&0x0f)+0x30)//显示小时
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat((time[2]&0x0f)+0x30)
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat(':')//显示":"
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat(((time[1]>>4)&0x0f)+0x30)//显示分
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat((time[1]&0x0f)+0x30)
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat(':')//显示":"
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat(((time[0]>>4)&0x0f)+0x30)//显示秒
addr++
lcd_wcmd(0x80 + addr)
lcd_wdat((time[0]&0x0f)+0x30)
addr = 2
lcd_wcmd(0xc0 + addr) //在第二行显示年月日和星期
lcd_wdat('2')//显示2
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat('0')//显示0
addr++
lcd_wdat(((time[6]>>4)&0x0f)+0x30)//年
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat((time[6]&0x0f)+0x30)
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat(' ')
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat(((time[4]>>4)&0x0f)+0x30)//显示月
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat((time[4]&0x0f)+0x30)
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat(' ')
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat(((time[3]>>4)&0x0f)+0x30)//显示日
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat((time[3]&0x0f)+0x30)
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat(' ')
addr++
lcd_wcmd(0xc0 + addr)
lcd_wdat((time[5]&0x0f)+0x30)//显示星期
}
//=========== 主函数 ===============
void main()
{
lcd_init() // 初始化LCD
write_ds1302(time)
while(1)
{
read_ds1302(time) //读DS1302数据
lcd_disp()//LCD显示
delay_ms(500) //延时0.5秒
}
}
这是一个电子时钟,在LCD1602上显示,时钟芯片是DS1302
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)