找回密码
 立即注册

QQ登录

只需一步,快速开始

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

使用15单片机+DS1302的8位数码管时钟,共阳数码管不用三极管扩流

[复制链接]
跳转到指定楼层
楼主
手里没有共阴数码管,所以用了2个0.56的4位共阳数码管。单片机用的还是15W408AS,时钟芯片还是1302.单片机直接驱动共阳数码管显示,后来发现亮度低,又加了一片74HC245扩流驱动(也可以用74HC573扩流)。数码管段选接P2,位选接P1,加上1302,蜂鸣器,按键正好用上全部IO口。
源码如下:
#ifndef _REAL_TIMER_DS1302_2013_10_31_
#define _REAL_TIMER_DS1302_2013_10_31_
#include <intrins.h>
typedef unsigned char BYTE;
sbit SCLK = P3^7;                   //SCL
sbit IO = P3^6;                     //I/O
sbit RST = P3^5;                                        //RST




                    //秒    分    时    日    月  星期    年
//BYTE code init[] = {0x30, 0x59, 0x12/*, 0x01, 0x01, 0x05, 0x10*/};
BYTE data now[3];

void DS1302_Initial();
void DS1302_SetTime(BYTE *p);
void DS1302_GetTime(BYTE *p);

/**************************************
从DS1302读1字节数据
**************************************/
BYTE DS1302_ReadByte()
{
    BYTE i;
    BYTE dat = 0;

    for (i=0; i<8; i++)             //8位计数器
    {
        SCLK = 0;                   //时钟线拉低
        _nop_();                    //延时等待
        _nop_();
        dat >>= 1;                  //数据右移一位
        if (IO) dat |= 0x80;        //读取数据
        SCLK = 1;                   //时钟线拉高
        _nop_();                    //?óê±μè′y
        _nop_();
    }

    return dat;
}

/**************************************
向DS1302写1字节数据
**************************************/
void DS1302_WriteByte(BYTE dat)
{
    char i;

    for (i=0; i<8; i++)             //8位计数器
    {
        SCLK = 0;                   //时钟线拉低
        _nop_();                    //延时等待
        _nop_();
        dat >>= 1;                  //移出数据
        IO = CY;                    //送出到端口
        SCLK = 1;                   //时钟线拉高
        _nop_();                    //延时等待
        _nop_();
    }
}

/**************************************
读DS1302某地址的的数据
**************************************/
BYTE DS1302_ReadData(BYTE addr)
{
    BYTE dat;

    RST = 0;
    _nop_();                        //延时等待
    _nop_();
    SCLK = 0;
    _nop_();                        //延时等待
    _nop_();
    RST = 1;
    _nop_();                        //延时等待
    _nop_();
    DS1302_WriteByte(addr);         //写地址
    dat = DS1302_ReadByte();        //读数据
    SCLK = 1;
    RST = 0;

    return dat;
}

/**************************************
往DS1302的某个地址写入数据
**************************************/
void DS1302_WriteData(BYTE addr, BYTE dat)
{
    RST = 0;
    _nop_();                        //延时等待
    _nop_();
    SCLK = 0;
    _nop_();                        //延时等待
    _nop_();
    RST = 1;
    _nop_();                        //延时等待
    _nop_();
    DS1302_WriteByte(addr);         //写地址
    DS1302_WriteByte(dat);          //写数据
    SCLK = 1;
    RST = 0;
}

/**************************************
写入初始时间
**************************************/
/*void DS1302_SetTime(BYTE *p)
{
    BYTE addr = 0x80;
    BYTE n = 3;

    DS1302_WriteData(0x8e, 0x00);   //允许写操作
    while (n--)
    {
        DS1302_WriteData(addr, *p++);
        addr += 2;
    }
    DS1302_WriteData(0x8e, 0x80);   //写保护
}
*/
/**************************************
读取当前时间
**************************************/
void DS1302_GetTime(BYTE *p)
{
    BYTE addr = 0x81;
    BYTE n = 3;

    while (n--)
    {
        *p++= DS1302_ReadData(addr);
        addr += 2;
    }
}

/**************************************
初始化DS1302
**************************************/
void DS1302_Initial()
{
    RST = 0;
    SCLK = 0;
    DS1302_WriteData(0x8e, 0x00);   //允许写操作
  //  DS1302_WriteData(0x80, 0x00);   //时钟启动
    DS1302_WriteData(0x90, 0xa6);   //一个二极管+4K电阻充电
    DS1302_WriteData(0x8e, 0x80);   //写保护
}
#endif


原理图.jpg (321.29 KB, 下载次数: 35)

原理图.jpg

15版.rar

246.05 KB, 下载次数: 40, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:626931 发表于 2019-12-15 13:25 | 只看该作者
可以,正好需要  感谢分享
回复

使用道具 举报

板凳
ID:95809 发表于 2019-12-25 09:33 | 只看该作者
在主函数下加入“ P1M1 = 0x00; P1M0 = 0xFF; //P1(00000000B,11111111B)设置P1口强推挽,就不用扩流了”。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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