找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2814|回复: 2
打印 上一主题 下一主题
收起左侧

DS1302最简单的一个小程序 是哪块不对呢???

[复制链接]
跳转到指定楼层
楼主
ID:56673 发表于 2013-11-24 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前面的读写字节 读写程序的都对     应该是主函数的问题  查了很多资料 对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];                                             //段选
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:56673 发表于 2013-11-24 14:10 | 只看该作者
如果向秒寄存器 0x80里写数据 0 的话   00H BCD转化完还是00   可秒寄存器第一位如果是0不就停止计时了吗
回复

使用道具 举报

板凳
ID:18297 发表于 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输出位秒的低位
}
}

//以上为完整的程序,经过仿真。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表