找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS1302数码管显示时间,带Protues仿真 程序 适合初学者

  [复制链接]
跳转到指定楼层
#
DS1302数码管显示时间,初学者适用


源程序和仿真文件下载: DS1302数码管万年历.zip (74.07 KB, 下载次数: 357)

部分源码预览:
  1. #include"DS1302.h"
  2. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  3. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  4. uchar  TIME[7]={0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
  5. //---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---//
  6. //---存储顺序是秒分时日月周年,存储格式是用BCD码---//
  7. /*******************************************************************************
  8. * 函 数 名         : Ds1302Write
  9. * 函数功能                   : 向DS1302命令(地址+数据)
  10. * 输    入         : addr,dat
  11. * 输    出         : 无
  12. *******************************************************************************/

  13. void Ds1302Write(uchar addr, uchar dat)
  14. {
  15.         uchar n;
  16.          RST=0;
  17.         _nop_();

  18.         SCLK = 0;//先将SCLK置低电平。
  19.         _nop_();
  20.         RST = 1; //然后将RST(CE)置高电平。
  21.         _nop_();

  22.         for (n=0; n<8; n++)//开始传送八位地址命令
  23.         {
  24.                 DSIO = addr & 0x01;//数据从低位开始传送
  25.                 addr >>= 1;
  26.                 SCLK = 1;//数据在上升沿时,DS1302读取数据
  27.                 _nop_();
  28.                 SCLK = 0;
  29.                 _nop_();
  30.         }
  31.         for (n=0; n<8; n++)//写入8位数据
  32.         {
  33.                 DSIO = dat & 0x01;
  34.                 dat >>= 1;
  35.                 SCLK = 1;//数据在上升沿时,DS1302读取数据
  36.                 _nop_();
  37.                 SCLK = 0;
  38.                 _nop_();       
  39.         }       
  40.                  
  41.         RST = 0;//传送数据结束
  42.         _nop_();
  43. }

  44. /*******************************************************************************
  45. * 函 数 名         : Ds1302Read
  46. * 函数功能                   : 读取一个地址的数据
  47. * 输    入         : addr
  48. * 输    出         : dat
  49. *******************************************************************************/

  50. uchar Ds1302Read(uchar addr)
  51. {
  52.         uchar n,dat,dat1;
  53.         RST = 0;
  54.         _nop_();

  55.         SCLK = 0;//先将SCLK置低电平。
  56.         _nop_();
  57.         RST = 1;//然后将RST(CE)置高电平。
  58.         _nop_();

  59.         for(n=0; n<8; n++)//开始传送八位地址命令
  60.         {
  61.                 DSIO = addr & 0x01;//数据从低位开始传送
  62.                 addr >>= 1;
  63.                 SCLK = 1;//数据在上升沿时,DS1302读取数据
  64.                 _nop_();
  65.                 SCLK = 0;//DS1302下降沿时,放置数据
  66.                 _nop_();
  67.         }
  68.         _nop_();
  69.         for(n=0; n<8; n++)//读取8位数据
  70.         {
  71.                 dat1 = DSIO;//从最低位开始接收
  72.                 dat = (dat>>1) | (dat1<<7);
  73.                 SCLK = 1;
  74.                 _nop_();
  75.                 SCLK = 0;//DS1302下降沿时,放置数据
  76.                 _nop_();
  77.         }

  78.         RST = 0;
  79.         _nop_();        //以下为DS1302复位的稳定时间,必须的。
  80.         SCLK = 1;
  81.         _nop_();
  82.         DSIO = 0;
  83.         _nop_();
  84.         DSIO = 1;
  85.         _nop_();
  86.         return (dat>>4)*10+(dat&0x0f);       
  87. }

  88. /*******************************************************************************
  89. * 函 数 名         : Ds1302Init
  90. * 函数功能                   : 初始化DS1302.
  91. * 输    入         : 无
  92. * 输    出         : 无
  93. *******************************************************************************/

  94. void Ds1302Init()
  95. {
  96.         uchar n;
  97.         Ds1302Write(0x8E,0X00);                 //禁止写保护,就是关闭写保护功能
  98.         for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
  99.         {
  100.                 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);       
  101.         }
  102.         Ds1302Write(0x8E,0x80);                 //打开写保护功能
  103. }

  104. /*******************************************************************************
  105. * 函 数 名         : Ds1302ReadTime
  106. * 函数功能                   : 读取时钟信息
  107. * 输    入         : 无
  108. * 输    出         : 无
  109. *******************************************************************************/

  110. void Ds1302ReadTime()
  111. {
  112.         uchar n;
  113.         for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年
  114.         {
  115.                 TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  116.         }
  117.                
  118. }
复制代码


评分

参与人数 2黑币 +53 收起 理由
下一页面 + 3 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

30#
ID:865733 发表于 2021-6-1 11:30 | 只看该作者
求基于单片机的通用智能仪表设计
回复

使用道具 举报

29#
ID:897047 发表于 2021-5-31 14:55 | 只看该作者
求51单片机DS3231时钟595锁存的数码管显示万年历工程
回复

使用道具 举报

28#
ID:103824 发表于 2020-4-18 23:54 | 只看该作者
spendell 发表于 2019-9-23 20:23
只能显示时间,无法显示日期  尴尬  要下载的人可要注意了

查看一下time数组,time数组定义了7位,分别是年月日周时分秒,我只是在显示的时候只显示了时分秒,想要年月日,自行显示time数组剩下的数据即可
回复

使用道具 举报

27#
ID:539741 发表于 2019-9-23 20:23 | 只看该作者
只能显示时间,无法显示日期  尴尬  要下载的人可要注意了
回复

使用道具 举报

26#
ID:370269 发表于 2018-7-12 15:46 | 只看该作者
数电资料
回复

使用道具 举报

25#
ID:233756 发表于 2018-7-10 15:27 | 只看该作者
我自己写的程序无法设置时间,但是可以读取时间,所以用了你的写数据,把相关定义修改了,但在我的实物上也无法设置时间
回复

使用道具 举报

24#
ID:362254 发表于 2018-6-30 14:02 | 只看该作者
如何获得黑币顺便感谢楼主
回复

使用道具 举报

23#
ID:359102 发表于 2018-6-29 10:15 | 只看该作者
谢谢奉献
回复

使用道具 举报

22#
ID:269609 发表于 2018-6-22 23:19 | 只看该作者
打开可以 直接运行吗
回复

使用道具 举报

21#
ID:353236 发表于 2018-6-17 14:35 | 只看该作者
感谢大佬分享
回复

使用道具 举报

20#
ID:352645 发表于 2018-6-15 18:37 | 只看该作者
感谢分享,学习,在看源码
回复

使用道具 举报

19#
ID:352518 发表于 2018-6-15 15:42 来自手机 | 只看该作者
哇  贼好用
回复

使用道具 举报

18#
ID:291815 发表于 2018-6-14 16:11 | 只看该作者
感谢分享
回复

使用道具 举报

17#
ID:103824 发表于 2018-1-21 23:53 | 只看该作者
樱浅依 发表于 2016-6-9 16:02
**** 作者被禁止或删除 内容自动屏蔽 ****

很久没看了,哪里有错误
回复

使用道具 举报

16#
ID:171060 发表于 2017-11-25 00:53 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:175885 发表于 2017-4-19 08:26 | 只看该作者
好贴要顶
回复

使用道具 举报

14#
ID:119290 发表于 2017-4-13 10:04 | 只看该作者
下下来再说,应该有用!
回复

使用道具 举报

13#
ID:160661 发表于 2017-1-7 21:25 | 只看该作者
茜柑工霜期地
回复

使用道具 举报

12#
ID:95090 发表于 2017-1-7 15:30 | 只看该作者
东西不错哦
回复

使用道具 举报

11#
ID:75057 发表于 2016-12-27 10:29 | 只看该作者
非常感谢最近干好用到
回复

使用道具 举报

10#
ID:155842 发表于 2016-12-21 12:28 | 只看该作者
课设需要  不错不错  感谢楼主
回复

使用道具 举报

9#
ID:140489 发表于 2016-9-26 11:47 | 只看该作者
没有黑币,下不了
回复

使用道具 举报

8#
ID:122366 发表于 2016-9-25 11:08 | 只看该作者
下来看看
回复

使用道具 举报

7#
ID:126485 发表于 2016-6-13 23:06 | 只看该作者
感谢楼主分享谢谢
回复

使用道具 举报

6#
ID:110835 发表于 2016-6-11 11:18 | 只看该作者
论坛里谁有51单片机DS3231时钟595锁存的数码管显示万年历程序啊
回复

使用道具 举报

5#
ID:125986 发表于 2016-6-9 16:02 | 只看该作者
有错误是怎么回事
回复

使用道具 举报

地板
ID:115477 发表于 2016-4-20 16:33 | 只看该作者
想下载,没有黑币啊
回复

使用道具 举报

板凳
ID:110866 发表于 2016-4-12 18:24 | 只看该作者
为什么我的不显示电脑时间
回复

使用道具 举报

沙发
ID:103832 发表于 2016-1-19 22:24 | 只看该作者
东西不错哦!
回复

使用道具 举报

楼主
ID:103832 发表于 2016-1-19 22:23 | 只看该作者
下来看看,51黑有你更精彩!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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