找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+ds1307与数码管的电子时钟程序

[复制链接]
跳转到指定楼层
楼主
ID:1057637 发表于 2022-12-14 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^1;
sbit scl=P1^0;
void delay();
void delay1();
void start();
void stop();
uchar read(uchar address0,uchar wordaddress,uchar address1);
uchar year=0,month=0,date=0,hour=0,minute=0,second=0;
void main()
{         

        while(1)
        {        second=read(0xd0,0x00,0xd1);
                minute=read(0xd0,0x01,0xd1);
                hour=read(0xd0,0x02,0xd1);      
                date=read(0xd0,0x04,0xd1);         
                month=read(0xd0,0x05,0xd1);
                year=read(0xd0,0x06,0xd1);
                        P0=hour;
                        P2=minute;
                        P3=second;
            delay1();
                        P0=year;
                        P2=month;
                        P3=date;      
            delay1();
}
}
void delay1()
{               
        uint i,j;
        for(i=0;i<1000;i++)
        for(j=0;j<125;j++);
        }
void start()
{
        scl=1;
        delay();
        sda=1;
        delay();      
        sda=0;
        delay();
}
void delay()
{        uchar i=125;
        while(i>0)
        i--;      
}

void stop()
{
        scl=1;
        delay();
        sda=0;
        delay();
        sda=1;
        delay();
}
uchar read(uchar address0,uchar wordaddress,uchar address1)
{
        uchar a,a0,i,n,data1;
        start();
        for(n=0;n<3;n++)
        {
                if(n==0)a0=address0;
        else if(n==1)a0=wordaddress;
        else if(n==2)
                {
                start();
                a0=address1;
                }
        for(i=0;i<8;i++)
                {
                scl=0;
                delay();
                a=a0;
                a=a&0x80;
                if(a==0x80)
                        sda=1;
                else
                        sda=0;               
                delay();
                scl=1;        
                delay();
                scl=0;
                delay();
                a0=a0<<1;
                }
        sda=1;
        delay();
        scl=1;
        delay();
        scl=0;
        }
        for(i=0;i<8;i++)
        {
                data1=data1<<1;
                sda=1;
                delay();
                scl=0;
                delay();
                scl=1;
                delay();
                if(sda==1)
                        data1|=0x01;  
        }
        scl=0;            
        delay();
        sda=1;
        delay();
        stop();
        return data1;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:102963 发表于 2022-12-15 18:55 | 只看该作者
楼主,你的电路图呢?没电路图,不知道你这咋接的啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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