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
- 超声波测距程序
- DS18B20中文资料15页
- 时钟芯片DS18B20中文资料4页
- DS18B20中文资料9页
- DS18B20中文全套资料,木有时序啊13页
- DS18B20中文资料22页
- DS18B20 中文资料13页
- 电子万年历毕业设计32页
- 电子万年历毕业设计(基于AT89C51单片机和DS1302时钟芯片)49页
- 51基于单片机的电子万年历毕业设计31页
- 单片机制作数字万年历毕业设计 268页
- 万年历毕业设计16页
- 电子钟万年历毕业设计2-正文34页
- AT89C51单片机实验开发板14页
- AT89C51单片机综合设计89页
- 串行A_D转换器ADS1110及其在AT89C51单片机中的应用6页
- 基于AT89C51单片机出租车计价器的研究33页
- 基于AT89C51单片机嵌入式系统硬件平台的设计4页
- 第2章 AT89C51单片机 硬件结构57页
- 电气工程师_电路基础91页
- 电气工程师_电路的分析方法81页
- 20种工程电路7页
- 工程电路分析答案(英文版)15页
- 工程电路分析答案(英文版)34页
- 工程电路分析答案(英文版)19页
- 带温度无字库12864的万年历程序35页
- 无字库PG12864液晶屏技术资料20页
- 12864无字库液晶 简单动画显示5页
- 12864程序(无字库)14页
- 无字库12864使用protues仿真10页
- 无字库12864LCD液晶上实现4页
- ds1302中文资料3页
- ds1302中文资料14页
- ds1302中文资料2页
- ds1302中文资料4页
- ds1302中文资料[1]14页
- ds1302中文资料10页


