C++编写一个时钟程序,模拟数字时钟的显示。

C++编写一个时钟程序,模拟数字时钟的显示。,第1张

程序代码如下:

#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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12363975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存