找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1837|回复: 12
收起左侧

DS1302和DS18B20冲突了,DS1302的单片机代码如下,如何做到使能不冲突呀

  [复制链接]
ID:1058451 发表于 2022-12-23 17:16 | 显示全部楼层 |阅读模式
#include <REGX52.H>

sbit DS1302_SCLK = P3^6;
sbit DS1302_IO = P3^4;
sbit DS1302_CE = P3^5;

#define DS1302_SECOND    0x80
#define DS1302_MINUTE    0x82
#define DS1302_HOUR      0x84
#define DS1302_DATE             0x86
#define DS1302_MONTH     0x88
#define DS1302_DAY       0x8A
#define DS1302_YEAR      0x8C
#define DS1302_WP        0x8E


char DS1302_Time[]={23,1,1,0,0,55,0,1};

void DS1302_Init()  ///LCD1602初始化
{
        DS1302_SCLK = 0;
        DS1302_CE = 0;
}
void DS1302_WriteByte(unsigned char Command,Date)
{
                unsigned char i;
                DS1302_CE = 1;
                for(i = 0 ; i < 8 ; i++)
        {
                DS1302_IO = Command&(0x01<<i);
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;
               
        }
                for(i = 0 ; i < 8 ; i++)
        {
                DS1302_IO = Date&(0x01<<i);
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;
               
        }
                DS1302_CE = 0;

}
unsigned char DS1302_ReadByte(unsigned char Command)
{
        unsigned char i,Date = 0x00;
        Command|= 0x01;
        DS1302_CE = 1;
                for(i = 0 ; i < 8 ; i++)
        {
                DS1302_IO = Command&(0x01<<i);
                DS1302_SCLK = 0;
                DS1302_SCLK = 1;
               
        }
        for(i = 0 ; i < 8 ; i++)
        {
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;
                if(DS1302_IO){Date|=(0x01<<i);}
        }
                DS1302_CE = 0;
                DS1302_IO = 0;
                return Date;

        

}
void DS1302_SetTime()
{
        DS1302_WriteByte(DS1302_WP,0x00);
        DS1302_WriteByte(DS1302_YEAR,DS1302_Time[0]/10*16+DS1302_Time[0]%10); //十进制转BCD码
        DS1302_WriteByte(DS1302_MONTH,DS1302_Time[1]/10*16+DS1302_Time[1]%10);
        DS1302_WriteByte(DS1302_DATE,DS1302_Time[2]/10*16+DS1302_Time[2]%10);
        DS1302_WriteByte(DS1302_HOUR,DS1302_Time[3]/10*16+DS1302_Time[3]%10);
        DS1302_WriteByte(DS1302_MINUTE,DS1302_Time[4]/10*16+DS1302_Time[4]%10);
        DS1302_WriteByte(DS1302_SECOND,DS1302_Time[5]/10*16+DS1302_Time[5]%10);
        DS1302_WriteByte(DS1302_WP,0x80);
}
void DS1302_ReadTime()
{
        unsigned char Temp;
        Temp = DS1302_ReadByte(DS1302_YEAR);
        DS1302_Time[0] = Temp/16*10+Temp%16;
        Temp = DS1302_ReadByte(DS1302_MONTH);
        DS1302_Time[1] = Temp/16*10+Temp%16;
        Temp = DS1302_ReadByte(DS1302_DATE);
        DS1302_Time[2] = Temp/16*10+Temp%16;
        Temp = DS1302_ReadByte(DS1302_HOUR);
        DS1302_Time[3] = Temp/16*10+Temp%16;
        Temp = DS1302_ReadByte(DS1302_MINUTE);
        DS1302_Time[4] = Temp/16*10+Temp%16;
        Temp = DS1302_ReadByte(DS1302_SECOND);
        DS1302_Time[5] = Temp/16*10+Temp%16;
}

回复

使用道具 举报

ID:1058451 发表于 2022-12-23 17:18 | 显示全部楼层
本来是想做数字时钟的,结果写完温度显示,温度却一直显示0
回复

使用道具 举报

ID:824490 发表于 2022-12-24 09:46 | 显示全部楼层
冲宊后是什么现象呢?
回复

使用道具 举报

ID:230742 发表于 2022-12-24 12:53 | 显示全部楼层
坛里有很多的1302和18B20的钟的程序。找一个参考一下。
回复

使用道具 举报

ID:1034262 发表于 2022-12-24 15:30 | 显示全部楼层
两个接口都不一样,怎么会有冲突?想不明白。
回复

使用道具 举报

ID:383215 发表于 2022-12-24 16:20 | 显示全部楼层
从程序来看,连中断都没有,怎么可能会有冲突?
回复

使用道具 举报

ID:1058451 发表于 2022-12-24 20:00 | 显示全部楼层
名字不是重点 发表于 2022-12-24 09:46
冲宊后是什么现象呢?

温度在LCD1602上显示为零
回复

使用道具 举报

ID:190577 发表于 2022-12-25 09:37 | 显示全部楼层
succzhu 发表于 2022-12-24 20:00
温度在LCD1602上显示为零

这个应该DS1820程序有问题的
回复

使用道具 举报

ID:155507 发表于 2022-12-25 17:48 | 显示全部楼层
DS18B20的温度转换时间较长,不可以让程序在那里一直等待转换结束,执行完转换指令后去做其他事情,大约800ms以上在读取时间值。

这是51黑论坛里面别人相似问题的解决过程
http://www.51hei.com/bbs/dpj-133151-1.html

http://www.51hei.com/bbs/dpj-158535-1.html

http://www.51hei.com/bbs/dpj-58310-1.html
回复

使用道具 举报

ID:584814 发表于 2022-12-26 12:27 | 显示全部楼层
DS1302和DS18B20很难有冲突,但有些学习板上为二选一跳线。
程序不全不知道你主程序里写的是啥所以显示啥也呵呵呵。
不要让别人帮你算命,有问题就全贴上来,你认为有问题的地方未必真有问题...
回复

使用道具 举报

ID:401564 发表于 2022-12-26 23:04 | 显示全部楼层
两个通讯方式都不一样的东西,不会有干扰
而且,两个都是单片机入门的知识点
你duang就是一堆代码上来,其实不是找不到问题,你只是想做伸手党,什么都不用思考,直接白嫖
回复

使用道具 举报

ID:77589 发表于 2022-12-27 11:06 | 显示全部楼层
两个东西各干各事,怎么冲突的呢?
回复

使用道具 举报

ID:1047841 发表于 2022-12-27 11:54 | 显示全部楼层
首先你得确认一下单个的模块 例如DS1302的显示是否正常,单个的模块 DS18B20能否正常显示;可以了以后只需将两部分代码进行叠加即可,不过得注意显示的位置,如果在LCD1602的上显示的话 注意显示要分开,ds1302放在第一行显示,ds18b20放在第二行显示即可;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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