找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机基本电子时钟ds1302

[复制链接]
跳转到指定楼层
楼主
ID:1113963 发表于 2024-3-23 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//实验名称:DS1302电子时钟
//实验现象:1、将DS1302 的底层驱动代码文件正确移植到工程中。
//2、初始化DS1302的默认启动参数为:2024年3月2日 星期六 20时28分29秒
//3、系统上电后,DS1302实时时钟从默认参数启动运行,并将当前的时、分、秒显示在数码管上,时分秒之间用“-”分隔。
//         数码管显示:秒-分-时
//注意:(1)采用IO扩展外部内存时,需要将电路版中的模式调为MM模式
//        (2)添加比赛的底层驱动模块时,需要检查两点,一是参数、函数是否完整;二是驱动函数频率和芯片频率是否一致,如果不一致注意延时函数倍数关系
#include<reg52.h>
#include<ds1302.h>
#include<absacc.h>
#include<smg_active.h>     
unsigned char write_ds1302[8]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e};
unsigned char read_ds1302[8]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f};
//2024年3月2日 星期六 20时28分29秒  数码管先显示1分钟2024 2024 然后03-02-20-28
unsigned char timer_ds1302[8]={0x29,0x28,0x20,0x02,0x03,0x06,0x24,0x20};  //采用BCD码,即一个数字对应八个二进制数码
                                                                          //所以对于十进制的8421BCD来说,就是十六进制
void init_ds1302()                 //初始化DS1302
{
        unsigned char i;
        Write_Ds1302_Byte(0x8e,0x00);      //在底层驱动模块中有,
       
        for(i=0;i<7;i++)
        {
          Write_Ds1302_Byte( write_ds1302[i],timer_ds1302[i]);       // 依次读取数组中内容
        }
        Write_Ds1302_Byte(0x8e,0x80);
}

void read_time_ds1302()
{
        unsigned char j;
        for(j=0;j<7;j++)
        {
                timer_ds1302[j]=Read_Ds1302_Byte ( read_ds1302[j]);
        }
}

void time_show()
{
          
                 SMG_single(7,SMG_nodot[timer_ds1302[0]%16]);           //秒,数组中数据是十六进制,将其转化为十进制
           delay(200);
                 SMG_0xff();
           SMG_single(6,SMG_nodot[timer_ds1302[0]/16]);
           delay(200);
                 SMG_0xff();
       
           SMG_single(5,0xbf);           //-
           delay(200);
                 SMG_0xff();
       
           SMG_single(4,SMG_nodot[timer_ds1302[1]%16]);           //分
           delay(200);
                 SMG_0xff();
           SMG_single(3,SMG_nodot[timer_ds1302[1]/16]);           
           delay(200);
                 SMG_0xff();
       
           SMG_single(2,0xbf);           //-
           delay(200);
                 SMG_0xff();
                 
           SMG_single(1,SMG_nodot[timer_ds1302[2]%16]);           //时
           delay(200);
                 SMG_0xff();
           SMG_single(0,SMG_nodot[timer_ds1302[2]/16]);
           delay(200);
                 SMG_0xff();

}
void main()
{
        init_ds1302();
        while(1)
        {
                read_time_ds1302();
                time_show();
        }
}
*******************DS1302电子时钟***********************


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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