DS1302时钟芯片与液晶1602的程序

更新时间:2023-05-11 21:30:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于c51的数字时钟例程

DS1302测试程序

晶振:11.0592MHZ

/*********************************包含头文件********************************/ #include "reg51.h"

#include <intrins.h>

/*********************************端口定义**********************************/ sbit DS1302_CLK = P1^0;

sbit DS1302_IO = P1^1;

sbit DS1302_RST = P1^2;

/******************************定义全局变量*********************************/ unsigned char second,minute,hour,week,day,month,year; //秒、分、时、星期、日、月、年

unsigned char time[]={0x06,0x03,0x14,0x03,0x12,0x30,0x00}; //初始时间数组

/**************************************************************************** 函数功能:数码管扫描延时子程序

入口参数:

出口参数:

****************************************************************************/ void delay1(void)

{

int k;

for(k=0;k<400;k++);

}

/***************************************************************************** 函数功能:向DS1302送一字节数据子程序

入口参数:

出口参数:

*****************************************************************************/ void InputByte(unsigned char byte1)

{

char i;

for(i=8;i>0;i--)

{

DS1302_IO=(bit)(byte1&0x01);

DS1302_CLK=1;

_nop_();

DS1302_CLK=0;

基于c51的数字时钟例程

byte1>>=1;

}

return;

}

/***************************************************************************** 函数功能:读DS1302一个字节子程序

入口参数:

出口参数:

*****************************************************************************/ unsigned char outputbyte(void)

{

unsigned char i;

unsigned ucdat=0;

for(i=8;i>0;i--)

{

DS1302_IO=1;

ucdat>>=1;

if(DS1302_IO)ucdat|=0x80;

DS1302_CLK=1;

_nop_();

DS1302_CLK=0;

}

return(ucdat);

}

/***************************************************************************** 函数功能:向DS1302某地址写一字节数据子程序

入口参数:addr,TDat

出口参数:

*****************************************************************************/ void write_ds1302(unsigned char addr,unsigned char TDat)

{

DS1302_RST=0;

_nop_();

DS1302_CLK=0;

_nop_();

DS1302_RST=1;

InputByte(addr);

_nop_();

InputByte(TDat);

DS1302_CLK=1;

_nop_();

DS1302_RST=0;

基于c51的数字时钟例程

}

/***************************************************************************** 函数功能:读DS1302地址子程序

入口参数:add

出口参数:timedata

*****************************************************************************/ unsigned char read_ds1302(unsigned char addr)

{

unsigned char timedata;

DS1302_RST=0;

_nop_();

DS1302_CLK=0;

_nop_();

DS1302_RST=1;

InputByte(addr);

timedata=OutputByte();

DS1302_CLK=1;

_nop_();

DS1302_RST=0;

return(timedata);

}

/***************************************************************************** 函数功能:初始化DS1302子程序

入口参数:time[](全局变量)

出口参数:

*****************************************************************************/ void initial_ds1302()

{

write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0

write_ds1302(0x8c,time[0]); //年

write_ds1302(0x88,time[1]); //月

write_ds1302(0x86,time[2]); //日

write_ds1302(0x8A,time[3]); //星期

write_ds1302(0x84,time[4]); //时

write_ds1302(0x82,time[5]); //分

write_ds1302(0x80,time[6]); //秒

write_ds1302(0x8e,0x80); //写保护寄存器

}

/***************************************************************************** 函数功能:读DS1302时间子程序

基于c51的数字时钟例程

入口参数:

出口参数:全局变量(second,minute,hour,week,day,month,year)

*****************************************************************************/ void read_time()

{

second=read_ds1302(0x81);

minute=read_ds1302(0x83);

hour=read_ds1302(0x85);

week=read_ds1302(0x8B);

day=read_ds1302(0x87);

month=read_ds1302(0x89);

year=read_ds1302(0x8d);

}

void write_com(uchar com)

{

P0=com;

rs=0;

lcden=0;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

//液晶读写程序//

void write_date(uchar date)

{

P0=date;

rs=1;

lcden=0;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

void init()

{

dula=0;

wela=0;

write_com(0x38); //秒寄存器 //分 //时 //星期 //日 //月 //年

基于c51的数字时钟例程

delay(20);

write_com(0x0f);

delay(20);

write_com(0x06);

delay(20);

write_com(0x01);

delay(20);

}

//液晶显示时间程序//

void time_display()

{

void write_com(0x80);

void write_date(year);

void write_com(0x80+5);

void write_date(month);

void write_com(0x80+8);

void write_date(day);

void write_com(0x80+11);

void write_date(week);

}

/***************************************************************************** 函数功能:主程序

入口参数:

出口参数:

*****************************************************************************/ void main(void)

{

initial_ds1302(); //初始化DS1302

while(1)

{

read_time(); //读取时间

time_display(); //显示时间

}

}

本文来源:https://www.bwwdw.com/article/32ae.html

Top