avr单片机ds1302时钟程序详解

发布者:csZhou最新更新时间:2019-11-28 来源: 51hei关键字:avr单片机  ds1302  时钟程序 手机看文章 扫描二维码
随时随地手机看文章

ds1302是一个时钟芯片,和avr没关系,这里用mega32操作该芯片,关于这个芯片网上资料很多,我简单说一下,通信方式是SPI模式,芯片内部有几个寄存器存放年月日时分秒,还有写保护等。


*****************************************************************
//CPU:mega32
//编译器:iar
//DS1302
//main函数中调用lcd显示函数


#include
#include "lcd.h"
void Write1302 ( unsigned char addr,unsigned char dat );
unsigned char Read1302 ( unsigned char addr );
void ds1302_init(void);


//寄存器宏定义
#define SECOND 0x80
#define MINUTE 0x82
#define HOUR 0x84
#define DAY 0x86
#define MONTH 0x88
#define YEAR 0x8C
#define PROTECT 0x8E

//管脚定义
#define   CE       PORTD_Bit5       //读写使能
#define   SCLK     PORTD_Bit6       //时钟
#define   TIO      PORTD_Bit7       //数据输出
#define   RIO      PIND_Bit7        //数据输入
#define   CE_D     DDRD_Bit5        //CE方向
#define   SCLK_D   DDRD_Bit6        //SCLK方向
#define   IO_D     DDRD_Bit7        //IO方向

void main(void)
{
  ds1302_init();
  lcd_init();
  while(1)
  {
    delay(10000);
    clear();
    display_string(num2str(Read1302(YEAR)),0,0);display_string("YEAR",0,16);display_string(num2str(Read1302(MONTH)),0,64);display_string("MONTH",0,80);
    display_string(num2str(Read1302(DAY)),2,0);display_string("DAY",2,16);display_string(num2str(Read1302(HOUR)),2,64);display_string("HOUR",2,80);
    display_string(num2str(Read1302(MINUTE)),4,0);display_string("MIN",4,16);display_string(num2str(Read1302(SECOND)),4,64);display_string("SECOND",4,80);
  }
}


//地址、数据发送子程序
void Write1302 ( unsigned char addr,unsigned char data )
{
    unsigned char i;
    IO_D = 1;
    CE = 0; //CE 引脚为低,数据传送中止
    SCLK = 0; //清零时钟总线
    CE = 1; //CE 引脚为高,逻辑控制有效
    //发送地址
    for ( i=8; i>0; i-- ) //循环8次移位
    {
        SCLK = 0;
        TIO = (addr&0x01); //每次传输低字节
        addr >>= 1; //右移一位
        SCLK = 1;
    }
    //发送数据
    for ( i=8; i>0; i-- )
    {
        SCLK = 0;
        TIO = (data&0x01);
        data >>= 1;
        SCLK = 1;
    }
    
    CE = 0;

}
//数据读取子程序
unsigned char Read1302 ( unsigned char addr )
{
    unsigned char i,data=0,temp;
    addr = addr | 1;//变为读地址
    IO_D = 1;
    CE=0;
    SCLK=0;
    CE = 1;
    //发送地址
    for ( i=8; i>0; i-- ) //循环8次移位
    {
        SCLK = 0;
        TIO = (addr&0x01); //每次传输低字节
        addr >>= 1; //右移一位
        SCLK = 1;
    }
    IO_D = 0;
    //读取数据
    for ( i=0; i<8; i++ )
    {
        SCLK = 1;
        SCLK = 0;
        data |= RIO<    }
    
    CE=0;
    
  // data = data/16*10 + data&0x0f ; 为什么不对
    temp = data>>4;
    data &= 0x0f;
    data = temp*10 + data;
    
    return (data);
}
//初始化DS1302
void ds1302_init(void)
{
    CE_D = 1  ;     //CE 输出
    SCLK_D = 1 ;    //SCLK 输出
    Write1302 (PROTECT,0X00); //禁止写保护
    Write1302 (SECOND ,0x30); //秒位初始化
    Write1302 (MINUTE ,0x05); //分钟初始化
    Write1302 (HOUR   ,0x6); //小时初始化
    Write1302 (DAY    ,0x14); //日位初始化
    Write1302 (MONTH  ,0x12); //月钟初始化
    Write1302 (YEAR   ,0x88); //年初始化
    Write1302 (PROTECT,0x80); //允许写保护
}


******************************************************************

关键字:avr单片机  ds1302  时钟程序 引用地址:avr单片机ds1302时钟程序详解

上一篇:avr单片机USART程序详解
下一篇:使用AVR来驱动MAXIN的DS18B20

推荐阅读最新更新时间:2024-10-26 00:17

avr单片机ds1302时钟程序详解
ds1302是一个时钟芯片,和avr没关系,这里用mega32操作该芯片,关于这个芯片网上资料很多,我简单说一下,通信方式是SPI模式,芯片内部有几个寄存器存放年月日时分秒,还有写保护等。 ***************************************************************** //CPU:mega32 //编译器:iar //DS1302 //main函数中调用lcd显示函数 #include ioavr.h #include lcd.h void Write1302 ( unsigned char addr,unsigned char dat ); unsigned char Re
[单片机]
<font color='red'>avr单片机</font><font color='red'>ds1302</font><font color='red'>时钟</font><font color='red'>程序</font>详解
基于AVR单片机DS1302程序
摘要: 目 的: 建立DS1302操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR /********************************************************************* 目 的: 建立DS1302操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR *********************************************************************/ /*01010101010101010
[单片机]
AVR单片机DS1302操作程序
file://---by 变成浪子 //mega16 7.3728MHz石英晶体 iCCavr6.31a //相关定义: #define uint unsigned int #define uchar unsigned char #define DS1302_RST 0 //pc0 #define DS1302_SDA 1 //pc1 #define DS1302_SCLK 6 //pc6 //ds1302相关 //DS1302_RST=1 #define Set_DS1302_RST() PORTC|=1 #define Clr_DS1302_RST() PORTC&=~(1 #d
[嵌入式]
AVR单片机DS1302操作程序
file://---by 变成浪子 //mega16 7.3728M Hz 石英晶体 i CC avr6.31a //相关定义: #define uint unsigned int #define uchar unsigned char #define DS1302_RST 0 //pc0 #define DS1302_SDA 1 //pc1 #define DS1302_SCLK 6 //pc6 //ds1302相关 //DS1302_RST=1 #define Set_DS1302_RST() PORTC|=1 DS1302_RST //DS1302_RST=0 #define Clr_DS1302_RST() PORTC&=
[嵌入式]
DS1302AVR单片机C程序
下面是DS1302的AVR 单片机 的C程序,这个程序结构很不错。但是没有调试这个AVR单片机的程序。 #define ds1302_rst PC0 #define ds1302_io PC1 #define ds1302_sclk PC2 #define set_ds1302_rst_ddr() DDRC|=1 ds1302_rst #define set_ds1302_rst() PORTC|=1 ds1302_rst #define clr_ds1302_rst() PORTC&=~(1 ds1302_rst) #define set_ds1302_io_ddr() DDRC|=1 ds1302_io #def
[单片机]
基于AVR单片机DS1302数码管时间显示C语言程序设计
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #include DS1302_drive.h uchar K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。 uchar const bit_tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选表,用来选择哪一只数码管进行显示 uchar const seg_data ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0
[单片机]
AVR单片机DS1302操作程序
变成浪子 //mega16 7.3728MHz石英晶体 iccavr6.31a //相关定义: #define uint unsigned int #define uchar unsigned char #define DS1302_RST 0 //pc0 #define DS1302_SDA 1 //pc1 #define DS1302_SCLK 6 //pc6 //ds1302相关 //DS1302_RST=1 #define Set_DS1302_RST() PORTC|=1 //DS1302_RST=0 #define Clr_DS1302_RST() PORTC&=~(1 //DS1302_SDA=1 #define S
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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