单片机——ds1302代码

发布者:风轻迟最新更新时间:2018-06-25 来源: eefocus关键字:单片机  ds1302 手机看文章 扫描二维码
随时随地手机看文章
  1. #include   

  2. #include "./lcd/lcd.h"  

  3.   

  4. #define ds1302_sec_add          0x80  

  5. #define ds1302_min_add          0x82  

  6. #define ds1302_hr_add           0x84  

  7. #define ds1302_date_add         0x86  

  8. #define ds1302_month_add        0x88  

  9. #define ds1302_day_add          0x8a  

  10. #define ds1302_year_add         0x8c  

  11. #define ds1302_control_add      0x8e  

  12. #define ds1302_charger_add      0x90  

  13. #define ds1302_clkburst_add     0xbe  

  14.   

  15. sbit RST = P1^0;  

  16. sbit SCK = P1^1;  

  17. sbit IO = P1^2;  

  18.   

  19. unsigned char timebuf[7] = {20,30,30,16,8,17,3};  

  20.   

  21. unsigned char tempbuf[7];  

  22. unsigned char writebuf[7];  

  23. unsigned char readbuf[7];  

  24. unsigned char disbuf[7];  

  25.   

  26. void ds1302_write_byte(unsigned char addr,unsigned char byte)  

  27. {  

  28.     unsigned char i;  

  29.       

  30.     addr = addr & 0xfe;  

  31.     SCK = 0;  

  32.     RST = 0;  

  33.       

  34.     RST = 1;  

  35.       

  36.     for(i = 0; i < 8; i++)  

  37.     {  

  38.         IO = addr & 0x01;  

  39.         SCK = 0;  

  40.         SCK = 1;  

  41.         addr >>= 1;  

  42.     }  

  43.       

  44.     for(i = 0; i < 8; i++)  

  45.     {  

  46.         IO = byte & 0x01;  

  47.         SCK = 0;  

  48.         SCK = 1;  

  49.         byte >>= 1;  

  50.     }  

  51.       

  52.     SCK = 0;  

  53.     RST = 0;  

  54. }  

  55.   

  56. unsigned char ds1302_read_byte(unsigned char addr)  

  57. {  

  58.     unsigned char i;  

  59.     unsigned char temp;  

  60.       

  61.     addr = addr & 0xfe;  

  62.     SCK = 0;  

  63.     RST = 0;  

  64.       

  65.     RST = 1;  

  66.       

  67.     addr = addr + 1;  

  68.     for(i = 0; i < 8; i++)  

  69.     {  

  70.         IO = addr & 0x01;  

  71.         SCK = 0;  

  72.         SCK = 1;  

  73.         addr >>= 1;  

  74.     }  

  75.       

  76.     for(i = 0; i < 8; i++)  

  77.     {  

  78.         SCK = 1;  

  79.         SCK = 0;  

  80.         temp >>= 1;  

  81.         if(IO)  

  82.         {  

  83.             temp += 0x80;  

  84.         }  

  85.     }  

  86.     RST = 0;  

  87.       

  88.     return temp;  

  89. }  

  90.   

  91. void ds1302_write_time()  

  92. {  

  93.     unsigned char temp;  

  94.     unsigned char temp1;  

  95.     unsigned char i;  

  96.       

  97.     for(i = 0; i < 7; i++)  

  98.     {  

  99.         temp = timebuf[i] / 10;  

  100.         temp1 = timebuf[i] % 10;  

  101.           

  102.         writebuf[i] = (temp << 4) | temp1;  

  103.     }  

  104.       

  105.     ds1302_write_byte(ds1302_control_add,0x00);  

  106.     ds1302_write_byte(ds1302_hr_add,writebuf[0]);  

  107.     ds1302_write_byte(ds1302_min_add,writebuf[1]);  

  108.     ds1302_write_byte(ds1302_sec_add,writebuf[2]);  

  109.     ds1302_write_byte(ds1302_year_add,writebuf[3]);  

  110.     ds1302_write_byte(ds1302_month_add,writebuf[4]);  

  111.     ds1302_write_byte(ds1302_date_add,writebuf[5]);  

  112.     ds1302_write_byte(ds1302_day_add,writebuf[6]);  

  113.     ds1302_write_byte(ds1302_control_add,0x80);  

  114. }  

  115.   

  116. void ds1302_read_time()  

  117. {  

  118.     unsigned char i;  

  119.     unsigned char temp;  

  120.     unsigned char temp1;  

  121.       

  122.     readbuf[0] = ds1302_read_byte(ds1302_hr_add);  

  123.     readbuf[1] = ds1302_read_byte(ds1302_min_add);  

  124.     readbuf[2] = ds1302_read_byte(ds1302_sec_add);  

  125.     readbuf[3] = ds1302_read_byte(ds1302_year_add);  

  126.     readbuf[4] = ds1302_read_byte(ds1302_month_add);  

  127.     readbuf[5] = ds1302_read_byte(ds1302_date_add);  

  128.     readbuf[6] = ds1302_read_byte(ds1302_day_add);  

  129.       

  130.       

  131.     for(i = 0; i < 7; i++)  

  132.     {  

  133.         temp = (readbuf[i] >> 4);  

  134.         temp1 = (readbuf[i] & 0x0f);  

  135.         disbuf[i] = temp * 10 + temp1;  

  136.     }  

  137. }  

  138.   

  139. void lcd_dis_time()  

  140. {  

  141.     unsigned char lcddisbuf[9] = {0};  

  142.   

  143.     unsigned char lcddisdata[9] = {0};  

  144.     lcddisbuf[0] = (disbuf[0] / 10) + 0x30;  

  145.     lcddisbuf[1] = (disbuf[0] % 10) + 0x30;  

  146.     lcddisbuf[2] = ':';  

  147.     lcddisbuf[3] = (disbuf[1] / 10) + 0x30;  

  148.     lcddisbuf[4] = (disbuf[1] % 10) + 0x30;  

  149.     lcddisbuf[5] = ':';  

  150.     lcddisbuf[6] = (disbuf[2] / 10) + 0x30;  

  151.     lcddisbuf[7] = (disbuf[2] % 10) + 0x30;  

  152.   

  153.     lcddisdata[0] = (disbuf[3] / 10) + 0x30;  

  154.     lcddisdata[1] = (disbuf[3] % 10) + 0x30;  

  155.     lcddisdata[2] = '.';  

  156.     lcddisdata[3] = (disbuf[4] / 10) + 0x30;  

  157.     lcddisdata[4] = (disbuf[4] % 10) + 0x30;  

  158.     lcddisdata[5] = '.';  

  159.     lcddisdata[6] = (disbuf[5] / 10) + 0x30;  

  160.     lcddisdata[7] = (disbuf[5] % 10) + 0x30;  

  161.   

  162.     lcd_dis_str(1,1,"20");  

  163.     lcd_dis_str(1,3,lcddisdata);  

  164.       

  165.     lcd_dis_str(2,1,"TIME:");  

  166.     lcd_dis_str(2,7,lcddisbuf);  

  167.       

  168.     switch(readbuf[6])  

  169.     {  

  170.         case 1:  

  171.         {  

  172.             lcd_dis_str(1,13,"MON");  

  173.             break;  

  174.         }  

  175.         case 2:  

  176.         {  

  177.             lcd_dis_str(1,13,"TUE");  

  178.             break;  

  179.         }  

  180.         case 3:  

  181.         {  

  182.             lcd_dis_str(1,13,"WED");  

  183.             break;  

  184.         }  

  185.         case 4:  

  186.         {  

  187.             lcd_dis_str(1,13,"THU");  

  188.             break;  

  189.         }  

  190.         case 5:  

  191.         {  

  192.             lcd_dis_str(1,13,"FRI");  

  193.             break;  

  194.         }  

  195.         case 6:  

  196.         {  

  197.             lcd_dis_str(1,13,"SAT");  

  198.             break;  

  199.         }  

  200.         case 7:  

  201.         {  

  202.             lcd_dis_str(1,13,"SUN");  

  203.             break;  

  204.         }  

  205.     }  

  206. }  

  207.   

  208. void main()  

  209. {  

  210.     lcd_init();  

  211.     ds1302_write_time();  

  212.       

  213.     while(1)  

  214.     {  

  215.         ds1302_read_time();  

  216.         lcd_dis_time();  

  217.     }  

  218. }  


关键字:单片机  ds1302 引用地址:单片机——ds1302代码

上一篇:单片机——红外遥控器——代码
下一篇:单片机—串口—代码

推荐阅读最新更新时间:2024-03-16 16:06

8051单片机定时器溢出中断误差补偿示例
  1 前言   单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。   2 误差原因、大小及特点   产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。
[单片机]
(ST)全球性能最强的Cortex™-M微控制器打破行业基准评测性能记录
横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)宣布,采用Green Hills软件公司最新软件工具独立进行的处理器性能评测证实,STM32 F4系列是迄今全球性能最高的ARM® Cortex™-M微控制器。 在行业基准CoreMark™评测 中,Green Hills软件公司的2012版编译器让STM32 F4系列多释放出29%的性能。CoreMark测试成绩用单一数字表示,以便设计人员比较不同品牌的处理器。这个创新高的CoreMark得分让工程师对STM32 F4系列微控制器更有信心,为他们选择业界性能最高的Cortex-M微控制器,能够满足
[单片机]
PIC16F877单片机在直流电机闭环调速系统中的应用
0引 言        现代工业生产中,电动机是主要的驱动设备,目前在电力拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ-D拖动系统,取代了笨重的发电动一电动机的F-D系统,又伴随着微电子技术的不断发展,中小功率直流电机采用单片机控制,调速系统具有频率高,响应快,本文论述了采用PIC16F877单片机作为主控制元件,充分利用了PIC16F877单片机捕捉、比较、模/数转换模块的特点作为触发电路,其优点是:结构简单,能与主电路同步,能平稳移相且有足够的移相范围,控制角可达10000步,能够实现电机的无级平滑控制,脉冲前沿陡且有足够的幅值,脉宽可设定,稳定性与抗干扰性能好等。       1 直流电机调速原理分析   
[工业控制]
51单片机IO口模拟串口通讯1-延时法
最近因工作需要,研究了一下单片机IO口模拟串口通讯的相关知识。相关内容主要参考了网上《51单片机模拟串口的三种方法》和《单片机IO口模拟串口程序(发送+接收)》两篇文档,并动手做了一下实验。感受颇多。 硬件环境:STC89C52 软件环境:IDE Keil uVision V4.10 编译器 C51 V9.0 代码如下: /********************************************** 方法1:延时法 硬件:11.0592MHz晶振,STC89C52,RXD P1.0 TXD P1.1 波特率:9600 描述:所谓延时法是指根据模拟出的波特率,每1位持续的时间的长短是通过循环空指令来延
[单片机]
51<font color='red'>单片机</font>IO口模拟串口通讯1-延时法
基于STM32单片机的电池管理系统触摸屏设计
0 引 言 电动车一直以清洁环保而备受关注,加上能源危机加剧、油价不断上涨,电动车也越来越受到用户的青睐。电动车一般采用锂电池供电,由多个单体电池串联成电池组作为动力电源。但由于各个串联单体电池特性不能保证完全一致,因此相同的电流下充电放电速度也会不同,如果不进行均衡干预,电池寿命会大大缩短,因此需要实时监控各个单体电池的状态、总电压、总电流,根据状态适时进行电池充放电均衡,并且充放电均衡时,均衡状态也要实时进行检测,所以就有了电动车电池能量管理系统(EMS)。实践证明EMS可以有效延长电动车电池使用寿命,是电动车中十分重要的管理系统。 EMS主要包括:信息采集模块、充放电均衡模块、信息集中处理模块以及显示模块。图1为自主研发
[单片机]
基于STM32<font color='red'>单片机</font>的电池管理系统触摸屏设计
飞思卡尔S08微控制器再添新丁
  飞思卡尔进一步扩大了其低端8位HCS08微控制器(MCU)系列。QA4 和 QA2 MCU分别具有4KB/2KB的闪存和256B/160B的RAM,提供一个进入飞思卡尔S08系列的切入点。QA4/QA2器件适合于从电机控制到便携式保健的通用消费和工业应用。   当设计人员需要扩展功能时,QA4/QA2器件在飞思卡尔MCU系列内提供支持环境和兼容管脚的移植。 MC9S08QA4的产品特征: • 4KB闪存 • 256B RAM • S08 8位 CPU @ 20MHz • 1.8V至3.3V的电压范围 • 基于闪存的 EEPROM • 4 个通用的 I/O (GPIO), 和1个仅输入I/O 和 1个仅输出I/O
[单片机]
PIC系列单片机程序设计基础二
PIC单片机 的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据放入W返回到主程序。下面程序以F10放表头地址。       MOVLW  TABLE     ;表头地址→F10         MOVWF  10           ┋       MOVLW  1        ;1→W,准备取“1”的线段值       ADDWF  10,1      ;F10+W =“1”的数据地址       CALL  CONVERT       MOVWF  6        ;线段值置到B口,点亮L
[单片机]
义隆新一代语音OTP大幅提高MCU运算速度
义隆电子股份有限公司日前宣布,将于四月推出新一代的语音OTP(One Time Programming)芯片——eSPA系列。除秒数扩增加到80秒、语音信道数增加到四轨之外,MCU运算速度也比已有语音OTP芯片(EM57P300)快二十倍,大幅提升产品效能。适合玩具、礼品等产品。 新一代语音OTP芯片(eSPA系列)将其功能加以提升,具有主频为4MHZ,语音(Speech)/乐音(Midi)为四信道规划。目前已推出20秒与40秒的芯片,并预定在今年六月推出高达80秒的芯片。 该系列芯片除可选择外挂晶振或电阻外,还可选择其内置起振电阻方式(频率误差率在正负百分之五)。另外,其内含的MASK ROM依秒数而不同,但都提供192 n
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved