标题:
DS1302最简单的一个小程序 是哪块不对呢???
[打印本页]
作者:
ヽミ慵懒_、阳光
时间:
2013-11-24 14:06
标题:
DS1302最简单的一个小程序 是哪块不对呢???
前面的读写字节 读写程序的都对 应该是主函数的问题 查了很多资料 对BCD转化还是不懂 是都要转换吗?
#include<reg52.h>
#define uchar unsigned char
uchar key,key1;
sbit CLK=P2^7;
sbit IO=P2^6;
sbit RES=P2^5;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90}; //0--9代码
void write_byte(uchar byte) //写一个字节
{
uchar i;
RES=1;
CLK=0;
for(i=8;i>0;i--)
{
CLK=0;
IO=byte&0x01;
CLK=1;
byte=byte>>1;
}
}
uchar read_byte() //读一个字节
{
uchar i,dat;
RES=1;
for(i=0;i<8;i++)
{
CLK=1;
CLK=0;
if(IO)
dat=(dat|(0x01<<i));
}
return( dat);
}
void write_1302(uchar add,uchar dat) //写入数据
{
RES=0;
RES=1;
CLK=0;
write_byte(add);
write_byte(dat);
RES=0;
}
read_1302(uchar add) //读出数据
{
RES=0;
RES=1;
CLK=0;
write_byte(add);
key=read_byte();
RES=0;
return (key);
}
void main()
{
P1=0x08; //数码管位选
RES=0;
CLK=0;
write_1302(0x8e,0x00); //允许写入
write_1302(0x80,0x80); //秒写入0
write_1302(0x8e,0x80); //写保护
while(1)
{
read_1302(0x81); //读出
P0=table[key1]; //段选
}
}
作者:
ヽミ慵懒_、阳光
时间:
2013-11-24 14:10
如果向秒寄存器 0x80里写数据 0 的话 00H BCD转化完还是00 可秒寄存器第一位如果是0不就停止计时了吗
作者:
zjjhtony
时间:
2013-12-5 20:05
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit timesclk=P2^7;
sbit timeio=P2^6;
sbit timerst=P2^5;
uchar set_time_data[];
void delay(uint z);
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: DS1302写数据子程序
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
void timewrite(uchar dat)
{
uchar i,temp;
delay(1);
temp=dat;
for(i=0;i<8;i++)
{
timeio=temp&0x01;
delay(1);
timesclk=1;
delay(1);
timesclk=0;
temp=temp>>1;
}
}
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: DS1302读取延时
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: DS1302读数据子程序
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
uchar timeread()
{
uchar i,temp;
delay(1);
temp=0;
for(i=0;i<8;i++)
{
temp=temp>>1;
if(timeio==1)temp=temp+0x80;
delay(1);
timesclk=1;
delay(1);
timesclk=0;
}
return temp;
}
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: DS1302向某地址写数据子程序
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
void timedata(uchar add,uchar dat)
{
timerst=0;
timesclk=0;
timerst=1;
timewrite(add); // 地址,命令
timewrite(dat); // 写1Byte数据
timesclk=1;
timerst=0;
timeio=0;
}
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: DS1302初始化子程序
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
void timeinit()
{
uchar i;
for(i=0;i<5;i++)
{
timedata(0x80+i*2,set_time_data[i]); //初始化秒,时,分,日,月
}
timedata(0x80+6*2,set_time_data[5]);
}
/****************************************************
Copyright: 2013-2014
File name: 电子时钟
Description: 主函数程序
Author: aking
Version: 1.0
Date: 2013-12-6
History
****************************************************/
void main()
{
uchar i;
timedata(0x8e,0x00);
timeinit(); //时间初始化
timedata(0x8e,0x80);
timerst=0;
timesclk=0;
while(1)
{
timerst=1;
timewrite(0x81); //先写地址(秒为0x81,分为0x83等等)
i=timeread(); //再读数据(i为秒)
timerst=0;
delay(1); //延时
P1=i/16; // P1输出位秒的高位
P3=i%16; //P3输出位秒的低位
}
}
//以上为完整的程序,经过仿真。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1