36

帖子

0

TA的资源

一粒金砂(中级)

21
 
DS18B20时序问题?看了你的时序图,发现延时480us时,你调用的延时子程序参数只有(80)次,按道理没到480us啊。。。但我见到网上很多的子程序例子,都是调用80次就可以啦。。。为何。。?因为我现在还未搞定18b20。。。谢谢你的指导。。。
此帖出自单片机论坛
 

回复

65

帖子

0

TA的资源

纯净的硅(初级)

22
 
先做个记号, 。。
此帖出自单片机论坛
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

23
 
靠的,就是你,楼主,害的我注册的潜水号浅出水面来顶你,呵呵~~~
此帖出自单片机论坛
 
 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

24
 
再好好温习一下吧 呵呵呵
此帖出自单片机论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

86

帖子

0

TA的资源

纯净的硅(初级)

25
 
顶你!!! 对我真的帮了大忙!!! 万分感谢
此帖出自单片机论坛
 
 
 

回复

720

帖子

0

TA的资源

纯净的硅(中级)

26
 

回复 楼主 雪人001 的帖子

总结的还不错,要多发点这样的资料哦
此帖出自单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

27
 

楼主,我用你的ds18b20的程序写的,但小数位一直不变,为什么啊

楼主,我用你的ds18b20的程序写的程序,数码管显示,但下载到板子上小数位一直不变,只有各位和十位在变,为什么啊?
   具体看:http://www.ourdev.cn/bbs/bbs_con ... =xtaens&bbs_id=9999

谢谢了
此帖出自单片机论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

28
 
谢谢楼主。。 收藏了
此帖出自单片机论坛
 
个人签名ic 芯片 LED芯片 电子元器件 集成电路板等尽在元盛电子www.fameic.com,博客hi.baidu.com/fameic
 
 

回复

2641

帖子

0

TA的资源

五彩晶圆(中级)

29
 
很详细的资料啊,谢谢分享
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

30
 
不错
此帖出自单片机论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

31
 
 
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

32
 

我要实现多个18B20挂接,要怎么读序列呢?

此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

33
 
#include
#include
//595端口
sbit  SD=P3^5;
sbit  SCK=P3^7;
sbit  RCK=P3^6;
sbit io_DS1302_RST = P2^0 ;

sbit io_DS1302_IO = P2^1 ;

sbit io_DS1302_SCLK = P2^2 ;



//-------------------------------------常数宏---------------------------------//

#define DS1302_SECOND_WRITE 0x80 //写时钟芯片的寄存器位置

#define DS1302_MINUTE_WRITE 0x82

#define DS1302_HOUR_WRITE 0x84

#define DS1302_WEEK_WRITE 0x8A

#define DS1302_DAY_WRITE 0x86

#define DS1302_MONTH_WRITE 0x88

#define DS1302_YEAR_WRITE 0x8C



#define DS1302_SECOND_READ 0x81 //读时钟芯片的寄存器位置

#define DS1302_MINUTE_READ 0x83

#define DS1302_HOUR_READ 0x85

#define DS1302_WEEK_READ 0x8B

#define DS1302_DAY_READ 0x87

#define DS1302_MONTH_READ 0x89

#define DS1302_YEAR_READ 0x8D

//-----------------------------------操作宏----------------------------------//

#define DS1302_SCLK_HIGH io_DS1302_SCLK = 1 ;

#define DS1302_SCLK_LOW io_DS1302_SCLK = 0 ;



#define DS1302_IO_HIGH io_DS1302_IO = 1 ;

#define DS1302_IO_LOW io_DS1302_IO = 0 ;

#define DS1302_IO_READ io_DS1302_IO



#define DS1302_RST_HIGH io_DS1302_RST = 1 ;

#define DS1302_RST_LOW io_DS1302_RST = 0 ;


#define uint8 unsigned int
#define uchar unsigned char


uchar code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


/******************************************************

* 保存时间数据的结构体 *

******************************************************/



uint8 Second,Minute,Hour, Day, Week,Month, Year ;

void delay()
{
        uchar n;
        for(n=0;n<100;n++) ;
}


//595串入并出
void  WR1_595(uchar num1)
{
    uchar date;  
   uchar b;
   date=num1;
                                                  
  for(b=0;b<=7;b++)
    {
     if((date&0x80)==0x80)   //最高位为1,则向SDATA_595发送1
            SD=1;            //发出数据的最高位
         else  
            SD=0;
         
         date<<=1;               //左移位
         SCK=0;          
         _nop_();
         _nop_();
         SCK=1;            //产生上升沿
            }
}



/******************************************************************************

* Function: static void v_DS1302Write_f( uint8 Content ) *

* Description:向DS1302写一个字节的内容 *

* Parameter:uint8 Content : 要写的字节 *

* *

******************************************************************************/



static void v_DS1302Write_f( uint8 Content )

{

uint8 i ;

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

{

if( Content & 0x01 )

{

DS1302_IO_HIGH

}

else

{

DS1302_IO_LOW

}

Content >>= 1 ;



DS1302_SCLK_HIGH

DS1302_SCLK_LOW

}

}





/******************************************************************************

* Function: static uint8 v_DS1302Read_f( void ) *

* Description: 从DS1302当前设定的地址读取一个字节的内容 *

* Parameter: *

* Return: 返回读出来的值(uint8) *

******************************************************************************/

static uint8 v_DS1302Read_f( void )

{

uint8 i, ReadValue ;

DS1302_IO_HIGH

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

{

ReadValue >>= 1 ;

if( DS1302_IO_READ )

{

ReadValue |= 0x80 ;

}

else

{

ReadValue &= 0x7f ;

}



DS1302_SCLK_HIGH

DS1302_SCLK_LOW



}

return ReadValue ;

}



/******************************************************************************

* Function: void v_DS1302WriteByte_f( uint8 Address, uint8 Content ) *

* Description: 从DS1302指定的地址写入一个字节的内容 *

* Parameter: Address: 要写入数据的地址 *

* Content: 写入数据的具体值 *

* Return: *

******************************************************************************/

void v_DS1302WriteByte_f( uint8 Address, uint8 Content )

{

DS1302_RST_LOW

DS1302_SCLK_LOW

DS1302_RST_HIGH



v_DS1302Write_f( Address ) ;

v_DS1302Write_f( Content ) ;



DS1302_RST_LOW

DS1302_SCLK_HIGH

}



/******************************************************************************

* Function: uint8 v_DS1302ReadByte_f( uint8 Address ) *

* Description:从DS1302指定的地址读出一个字节的内容 *

* Parameter:Address: 要读出数据的地址 *

* *

* Return: 指定地址读出的值(uint8) *

******************************************************************************/

uint8 v_DS1302ReadByte_f( uint8 Address )

{

uint8 ReadValue ;

DS1302_RST_LOW

DS1302_SCLK_LOW

DS1302_RST_HIGH



v_DS1302Write_f( Address ) ;

ReadValue = v_DS1302Read_f() ;



DS1302_RST_LOW

DS1302_SCLK_HIGH

return ReadValue ;

}

/******************************************************************************

* Function: void v_ClockInit_f( void ) *

* Description:初始化写入DS1302时钟寄存器的值(主程序中只需调用一次即可) *

* Parameter: *

* *

* Return: *

******************************************************************************/

void v_ClockInit_f( void )

{

if( v_DS1302ReadByte_f( 0xc1) != 0xf0 )

{

v_DS1302WriteByte_f( 0x8e, 0x00 ) ; //允许写操作

v_DS1302WriteByte_f( DS1302_YEAR_WRITE, 0x08 ) ; //年

v_DS1302WriteByte_f( DS1302_WEEK_WRITE, 0x04 ) ; //星期

v_DS1302WriteByte_f( DS1302_MONTH_WRITE, 0x12 ) ; //月

v_DS1302WriteByte_f( DS1302_DAY_WRITE, 0x11 ) ; //日

v_DS1302WriteByte_f( DS1302_HOUR_WRITE, 0x13 ) ; //小时

v_DS1302WriteByte_f( DS1302_MINUTE_WRITE, 0x06 ) ; //分钟

v_DS1302WriteByte_f( DS1302_SECOND_WRITE, 0x40 ) ; //秒

v_DS1302WriteByte_f( 0x90, 0xa5 ) ; //充电

v_DS1302WriteByte_f( 0xc0, 0xf0 ) ; //判断是否初始化一次标识写入

v_DS1302WriteByte_f( 0x8e, 0x80 ) ; //禁止写操作

}

}

/******************************************************************************

* Function: void v_ClockUpdata_f( void ) *

* Description:读取时间数据,并保存在结构体CurrentTime中 *

* Parameter: *

* *

* Return: *

******************************************************************************/

void v_ClockUpdata_f( void )

{

Second = v_DS1302ReadByte_f( DS1302_SECOND_READ ) ;

Minute = v_DS1302ReadByte_f( DS1302_MINUTE_READ ) ;

Hour = v_DS1302ReadByte_f( DS1302_HOUR_READ ) ;

Day = v_DS1302ReadByte_f( DS1302_DAY_READ ) ;

Month = v_DS1302ReadByte_f( DS1302_MONTH_READ ) ;

Week = v_DS1302ReadByte_f( DS1302_WEEK_READ ) ;

Year = v_DS1302ReadByte_f( DS1302_YEAR_READ ) ;

}

void display()
{
        RCK=0;
        WR1_595(disp_code[Second]);
        RCK=1;
}
void main()
{
    v_ClockUpdata_f();
                while(1)
                {
       
        display();
                 delay();
                 }
       
}
此帖出自单片机论坛
 
 
 

回复

412

帖子

113

TA的资源

一粒金砂(中级)

34
 
顶  非常不错
此帖出自单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

宇宙尘埃

35
 
很好,感谢楼主
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

36
 
很有帮助
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

37
 
看了,分别写时间程序和温度程序,可以分别显示,但是写到一个程序上写就无法实现,只要有ds1302,18b20没法工作,只有时间有效,单独是可以的。上网搜过好多程序,时序设置也是差不多的,但是到我的板子上就无法实现,由于刚学,也不知道什么原因,网上也就一个人遇到这样的问题最终也没见他解决,也没人帮助解决。真的不知道该怎么用了,不知道是软件问题还是硬件问题。也就是说把楼主的程序组合在一起时没有办法的。
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表