ds1302程序

年月日星期阴历阳历温度





#include<reg52.h>
#include <absacc.h>
#define PA XBYTE[0xD1FF] //PA地址
#define PB XBYTE[0xD2FF] //PB地址
#define PC XBYTE[0xD5FF] //PC地址
#define CON XBYTE[0xD7FF] //控制地址
sbit IO=P3^5;
sbit sclk=P3^2;
sbit rst=P2^6;
void write_ds1302(int add,int dat);
int read(int m); //读取函数
void zhuanhuan(); //转换数值
void init(); //初始化时钟
void shuju(); //转换读取的数值函数
void display(); //显示
void delay(int n); //延时
int a[6]={5,9,2,4,2,3}; //时间的初始值 将秒 分 钟拆开 便于显示
int smg_wei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int chushi[3]; //时钟的初始值 如23点24分59秒
int dizhi[3]={0x80,0x82,0x84}; //写地址
int table[20]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28, //0到9
0x80,0x9B,0x42,0x0A,0x19,0x0C,0x04,0x9A,0x00,0x08}; //带小数点的0到9
main()
{
init(); //初始化
while(1)
{
shuju(); //获取读到的数据
display(); //显示
}
}
void write_ds1302(int add,int dat) //写入
{
int i;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++) //写地址 上升沿写入
{
sclk=0;
IO=add&0x01; //从低位开始写入
add>>=1;
sclk=1;
}
for(i=0;i<8;i++) //写数据 上升沿写入
{
sclk=0;
IO=dat&0x01; //从低位开始写入数据
dat>>=1;
sclk=1;
}
rst=0;
}
int read(int m) //读取
{
int i,temp;
rst=0;
sclk=0;
rst=1;
for(i=0;i<8;i++) //写入地址
{
sclk=0;
IO=m&0x01;
m>>=1;
sclk=1;
}
for(i=0;i<8;i++) //读取数据 下降沿开始读取
{
temp>>=1;
sclk=0;
if(IO)
temp=temp|0x80; //从低位读取
sclk=1;
}
rst=0;
sclk=1;
IO=0;
return temp; //将读取到的数据返回
}
void zhuanhuan()
{
chushi[0]=a[1]+a[0]*10; //将秒的个位与十位合并
chushi[1]=a[3]+a[2]*10; //将分的个位与十位合并
chushi[2]=a[5]+a[4]*10; //将时的个位与十位合并
}
void init() //初始化函数
{
int i,j;
zhuanhuan();
for(i=0;i<3;i++) //BCD码转换为十进制
{
j=chushi/10;
chushi=chushi%10;
chushi=chushi+j*16;
}
write_ds1302(0x8e,0x00); //关闭写保护
for(i=0;i<8;i++)
{
write_ds1302(dizhi,chushi); //写入初始值
}
write_ds1302(0x8e,0x80); //写保护
}
void shuju()
{
int miao,fen,shi;
miao=read(0x81); //读取秒值
fen=read(0x83); //读取分值
shi=read(0x85); //读取时值
a[0]=miao%16;
a[1]=miao/16;
a[2]=fen%16;
a[3]=fen/16;
a[4]=shi%16;
a[5]=shi/16;
}
void display() //显示
{
int i,j;
CON=0x81;
for(i=0;i<6;i++)
{
PA=smg_wei;
if(i>0&&i%2==0)
PB=table[a+10];
else
PB=table[a];
delay(300);
}
}
void delay(int n) //延时
{
while(n--)
;
}

↑收起2010-12-24 09:09
评论转载分享阅读原文








周帅“DS1302实时时钟程序终于成功了!搞了三。四天了!成果图。液晶显示。”

05-02 20:54
评论转发









fjays发表日志:ds1302

ds1302程序流程图 3.2 ds1302实时时间流程 图4示出ds1302的实时

你可能喜欢

  • DS18B20中文资料
  • 万年历毕业设计
  • AT89C51单片机
  • 工程电路
  • 无字库12864
  • ds1302中文资料
  • LCD1602
  • 超声波测距程序

ds1302程序相关文档

最新文档

返回顶部