zoukankan      html  css  js  c++  java
  • 带掉电记忆功能的LED时钟代码分享

    深圳市立显电子有限公司,专业LED时钟生产厂家!--------【点击进入】

    以下内容由“深圳市立显光电有限公司”技术部宣,请勿转载,谢谢!     

          带掉电记忆功能的LED时钟代码分享!如何实现LED时钟的掉电记忆呢,我们采用的是ATMEL的芯片,并配以DS1302结构来实现精准的时间走时与掉电记忆功能。下面是电路图和实物图片,如下:

    具体实现代码如下:

    #include <board.h>

    #include <pio/pio.h>

    #include <ds1302/ds1302.h>

    #include <app.h>

    const Pin pPinRST=PIN_DS1302_RST_OUT;

    const Pin pPinIOIN=PIN_DS1302_IO_IN;

    const Pin pPinIOOUT=PIN_DS1302_IO_OUT;

    const Pin pPinSCK=PIN_DS1302_SCK_OUT;

    void ds1302_write_byte(unsigned char addr, unsigned char data) {

             unsigned char i=0;

             RST_SET;//启动DS1302总线

             delay_ms(10);

             //写入目标地址:addr

             IO_OUT;

             addr = addr & 0xFE;//最低位置零

             for (i = 0; i < 8; i ++) {

                       if (addr & 0x01) {

                                IO_SET;

                       }

                       else {

                                IO_CLR;

                       }

                       delay_ms(10);

                       SCK_SET;

                       delay_ms(10);

                       SCK_CLR;

                       delay_ms(10);

                       addr = addr >> 1;

             }

            

             //写入数据:

             IO_OUT;

             for (i = 0; i < 8; i ++) {

                       if (data & 0x01) {

                                IO_SET;

                       }

                       else {

                                IO_CLR;

                       }

                       delay_ms(10);

                       SCK_SET;

                       delay_ms(10);

                       SCK_CLR;

                       delay_ms(10);

                       data = data >> 1;

             }

             RST_CLR;//停止DS1302总线

    }

    unsigned char ds1302_read_byte(unsigned char addr){

             unsigned char i=0;

             unsigned char tp=0;

             RST_SET;//启动DS1302总线

             delay_ms(10);

             //写入目标地址:addr

             IO_OUT;

             addr = addr | 0x01;//最低位置高

             for (i = 0; i < 8; i ++) {

                       if (addr & 0x01) {

                                IO_SET;

                       }

                       else {

                                IO_CLR;

                       }

                       delay_ms(10);

                       SCK_SET;

                       delay_ms(10);

                       SCK_CLR;

                       delay_ms(10);

                       addr = addr >> 1;

             }

            

             //输出数据:tp

             IO_IN;

             delay_ms(10);

             for (i = 0; i < 8; i ++) {

                       tp = tp >> 1;

                       if (IO_R) {

                                tp |= 0x80;

                       }

                       else {

                                tp &= 0x7F;

                       }

                       delay_ms(10);

                       SCK_SET;

                       delay_ms(10);

                       SCK_CLR;

                       delay_ms(10);

             }

             RST_CLR;//停止DS1302总线

             return tp;

    }

    void ds1302_write_time(void){

             ds1302_write_byte(ds1302_control_add,0x00);                                //关闭写保护

             ds1302_write_byte(ds1302_sec_add,0x80);                                        //暂停

             ds1302_write_byte(ds1302_charger_add,0xa5);                               //涓流充电

             ds1302_write_byte(ds1302_year_add,time_buf[1]);                        //年

             ds1302_write_byte(ds1302_month_add,time_buf[2]);           //月

             ds1302_write_byte(ds1302_date_add,time_buf[3]);                        //日

             ds1302_write_byte(ds1302_hr_add,time_buf[4]);                   //时

             ds1302_write_byte(ds1302_min_add,time_buf[5]);                          //分

             ds1302_write_byte(ds1302_sec_add,time_buf[6]);                           //秒

             ds1302_write_byte(ds1302_day_add,time_buf[7]);                          //周

             ds1302_write_byte(0xDD,0xAA);                                                            //标记

             ds1302_write_byte(ds1302_control_add,0x80);                                //打开写保护

    }

    void ds1302_read_time(void){

             time_buf[1]=ds1302_read_byte(ds1302_year_add);                         //年

             time_buf[2]=ds1302_read_byte(ds1302_month_add);                     //月

             time_buf[3]=ds1302_read_byte(ds1302_date_add);                        //日

             time_buf[4]=ds1302_read_byte(ds1302_hr_add);                    //时

             time_buf[5]=ds1302_read_byte(ds1302_min_add);                          //分

             time_buf[6]=ds1302_read_byte(ds1302_sec_add)&0x7F;          //秒

             time_buf[7]=ds1302_read_byte(ds1302_day_add);                          //周

    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------联系方式--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------专业LED时钟、MODBUS显示屏、PRFOIBUS显示屏、同步LED数字钟生产厂家。欢迎来电技术交流与指正,谢谢! 法人代表:徐飞 英文名称:parserval 联系电话:13927460644 0796-7203100 QQ:13654984 EMAIL:parserval@126.com led@vip.qq.com 网址:http://www.ledsup.com 邮编:518038
  • 相关阅读:
    容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
    Spring Controller里注入Feign的Interface报红提示的问题
    几种常见的日志
    个人博客搭建方案选择
    elasticsearch常用操作命令
    kafka操作命令
    centos7.0安装java环境
    CentOS安装jdk的三种方法
    在OAuth2中 自定义tokenServices来提供个性化服务,每次刷新token并让原token在5分钟内有效
    解决HttpServletRequest的输入流只能读取一次的问题(转)
  • 原文地址:https://www.cnblogs.com/parserval/p/6731690.html
Copyright © 2011-2022 走看看