课程设计——DS1302数码管显示数字钟的设计1(5)

2019-03-29 08:29

××大学××学院××系××课程设计报告

/**********************向DS1302写入数据************************/ void Write_ds1302(uchar address,uchar indata) {

SCLK = 0; RST = 1;

Write_byte(address); //写入地址 Write_byte(indata);

//写入数据

SCLK = 0; RST = 0; }

/**********************从DS1302读取数据*****************************/ uchar Read_ds1302(uchar addr) {

uchar backdata; SCLK = 0; RST = 1;

Write_byte(addr);

//先写地址

backdata=Read_byte(); //然后读数据

SCLK = 0; RST = 0; return (backdata); }

/************************按键扫描及操作******************************/ void Key_Process(void)

//通过按键调整时间

{

uchar min16,hour16;

//定义16进制的分钟和小时变量 Write_ds1302(0x8e,0x00);

//DS1302写保护控制字,允许写 Write_ds1302(0x80,0x80); //时钟停止运行 if(K2 == 0) //K2键用来对小时进行加1调整

{

Delay(5);

//延时去抖

17

××大学××学院××系××课程设计报告

if(K2 == 0) {

while( !K2);

//等待K2键释放

time_buf[2] ++; //小时加1 if(time_buf[2] == 24) { }

time_buf[2] = 0;//当变成24时初始化为0

hour16 = time_buf[2]/10*16 + time_buf[2];

}

Write_ds1302(0x84,hour16); //将调整后的小时数据写入DS1302

//将所得的小时数据转变成16进制数据

}

if(K3 == 0) {

Delay(5);

// K3键用来对分钟进行加1调整

//延时去抖

if(K3 == 0)

{

while( !K3);

//等待K3键释放

time_buf[1] ++; //分钟加1 { }

time_buf[1] = 0;//当分钟加到60时初始化为0 if(time_buf[1] == 60)

min16 = time_buf[1]/10*16 + time_buf[1];

}

18

//将所得的分钟数据转变成16进制数据

Write_ds1302(0x82,min16); //将调整后的分钟数据写入DS1302

}

××大学××学院××系××课程设计报告

if(K1 == 0)

//K4键是确认键

{ Delay(5);

//延时去抖

if(K1 == 0) { while( !K1);

//等待K1键释放

Write_ds1302(0x80,0x00); //调整完毕后,启动时钟运行 Write_ds1302(0x8e,0x80);

//写保护控制字,禁止写

K1_FLAG = 0;

//将K1键按下标志位清0

}

} }

/*---------------------------------------------------------------------------*/ void Key_Clock(void)

//按键设置闹钟时间

{

Write_ds1302(0x8e,0x00); //DS1302写保护控制字,允许写

// Write_ds1302(0x80,0x80); //时钟停止运行 if(K2 == 0)

//K2键用来对小时进行加1调整

{ Delay(5);

//延时去抖

if(K2 == 0) { while( !K2);

//等待K2键释放

temp[0] = time_buf[2]; temp[0]++;

//小时加1

if(temp[0] == 24) { temp[0] = 0;//当变成24时初始化为0

} //

time_hour[] = time_buf[2];

//将所得的小时数据转变成16进制数据

19

××大学××学院××系××课程设计报告

Write_ds1302(0x84,hour16); //将调整后的小时数据写入

//

DS1302

}

if(K3 == 0) {

Delay(5);

//延时去抖

// K3键用来对分钟进行加1调整

}

if(K3 == 0) {

Write_ds1302(0x82,min16); //将调整后的分钟数据写入

while( !K3);

//等待K3键释放

temp[1] = time_buf[1]; temp[1]++;

//分钟加1

if(temp[1] == 60) { }

time_min[] = time_buf[1];

//将所得的分钟数据转变成16进制数据 temp[1] = 0;//当分钟加到60时初始化为0

//

//

DS1302 }

/*************获取秒、分钟、小时、日、月、年的值******************************/ void get_time(void) {

uchar sec,min,hour,date,mouth,year;

//定义秒、分和小时变量

}

}

Write_ds1302(0x8e,0x00); //控制命令,WP=0,允许写操作

20

Write_ds1302(0x90,0xab); //涓流充电控制

××大学××学院××系××课程设计报告

sec = Read_ds1302(0x81); //读取秒 min = Read_ds1302(0x83); //读取分 hour = Read_ds1302(0x85); //读取时

time_buf[0] = sec/16*10 + sec; //将读取到秒的16进制数转化为10进制

time_buf[1] = min/16*10 + min; //将读取到分的16进制数转化为10进制

time_buf[2] = hour/16*10 + hour; //将读取到时的16进制数转化为10进制

time_buf[3] = date/16*10 + date;

//将读取到日的16进制数转化为

date = Read_ds1302(0x86);

//读取日 //读取月 //读取年

mouth= Read_ds1302(0x88); year = Read_ds1302(0x8c);

10进制

time_buf[4] = mouth/16*10 + mouth;

//将读取到月的16进制数转化为

10进制

time_buf[5] = year/16*10 + year;

//将读取到年的16进制数转化为

10进制 }

/********************数码管显示时间程序**********************************/ void Time_Display(void) {

wela(); P0 = 0xfd;

21

//秒-分-时显示

wela(); P0 = 0xfe; dula();

P0 = table[time_buf[0]/10]; //显示秒十位 Delay(5);


课程设计——DS1302数码管显示数字钟的设计1(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:巴林左旗处置危险化学品事故应急预案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: