#include
#include "DS1302.h"
#include
void ds1302_init(void)
{
PORTX=0x00;
DDRX=0x07;
}
void write_ds1302_byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCK=0;
IO_out=dat&0x01;
dat=dat>>1;
SCK=1;
}
}
void write_ds1302(unsigned char add,unsigned char dat)
{
RST=1;
delay_us(1);
write_ds1302_byte(add);
write_ds1302_byte(dat);
RST=0;
delay_us(2);
IO_out=0;
SCK=0;
}
unsigned char read_ds1302(unsigned char add)
{
unsigned char i,value=0;
RST=1;
write_ds1302_byte(add);
IO_setting=0;
for(i=0;i<8;i++)
{
value=value>>1;
SCK=0;
SCK=0; //必须给两次!!
if(IO_in) value=value|0x80;
SCK=1;
}
IO_setting=1;
SCK=0;
RST=0;
delay_us(2);
IO_out=0;
return value;
}
void set_rtc(unsigned char* time_data)
{
unsigned char i,j,write_add;
for(i=0;i<7;i++)
{
j=time_data[i]/10;
time_data[i]=time_data[i];
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00);//去除写保护
for(i=0,write_add=0x8c;i<7;i++,write_add-=2)
write_ds1302(write_add,time_data[i]);
write_ds1302(0x8e,0x80);
}
void read_rtc(unsigned char* time_data)
{
unsigned char i,j,read_add;
write_ds1302(0x8e,0x00);
for(i=0,read_add=0x8d;i<7;i++,read_add-=2)
time_data[i]=read_ds1302(read_add);
for(i=0;i<7;i++)
{
j=time_data[i]/16;
time_data[i]%=16;
time_data[i]+=j*10;
}
write_ds1302(0x8e,0x80);
}
关键字:ds1302 时钟 AVR
引用地址:
ds1302时钟-AVR程序代码
推荐阅读最新更新时间:2024-03-16 15:46
1602LCD液晶数字电子钟 时钟表 C语言
1602LCD液晶数字电子钟 基本设计思路: 1. 1602LCD显示: 第一行: 年, 月, 日 2012-01-22 第二行: 时, 分, 秒 23:59:00 2. 独立按键功能: Key1 恢复单片机调时之前的实际时间, 由于在调整时间期间,定时器T0暂停, 则启动定时器T1, 保证单片机的时间正确.(即 取消调时) Key2 进入调整时间状态: 停止定时器T0,启动定时器T1. Key3 退出调整时间状态: 启动定时器T0,停止定时器T1. Key4 选择调整时间: 秒, 分, 时, 日, 月, 年 Key5 调时: 递增 同时启动蜂鸣器 Key6 调时: 递减 同时启动蜂鸣器
[单片机]
AVR 单片机与GCC 编程之存储器操作
AVR 系列单片机内部有三种类型的被独立编址的存储器,它们分别为:Flash 程序存储器、内部SRAM 数据存储器和EEPROM 数据存储器。 Flash 存储器为1K~128K 字节,支持并行编程和串行下载,下载寿命通常可达10,000 次。 由于AVR 指令都为16 位或32 位,程序计数器对它按字进行寻址,因此FLASH 存储器按字组织的,但在程序中访问FLASH 存储区时专用指令LPM 可分别读取指定地址的高低字节。 寄存器堆(R0~R31)、I/O 寄存器和SRAM 被统一编址。所以对寄存器和I/O 口的操作使用与访问内部SRAM 同样的指令。其组织结构如图2-1 所示。 图2-1 AVR SRAM
[单片机]
STM32F4如何设置系统时钟
STM32F4系统时钟树 STM32F4的系统时钟非常重要,涉及到整个系统的运行结果,无论是什么操作,都需要时钟信号,不同型号的微控制器的默认系统时钟配置是不同的,这里,给出两种配置STM32F407系统时钟的方法。 方法一,采用官方库提供的配置(这里外部晶振8MHz,系统配置为168MHz) STM32F4启动与STM32F10X不同,时钟已经默认配置好 启动代码,文件:startup_stm32f4xx.s Reset_Handler PROC EXPORT Reset_Handler IMPORT SystemInit IMPORT __ma
[单片机]
51,AVR,PIC,MSP430,STM32单片机比较
51,AVR,PIC,MSP430,STM32比较:常用型号,特点,优缺点,编译软件,下载软件,下载方式。 传统8051:适合菜鸟入门,容易上手,价格一般(从性价比方面说)。 缺点:解密容易(传统51说:谁让咱出道早呢,大家都研究我,哎!哭......)一般功能也有,, 但AD、eeprom等功能要靠扩展,增加硬件和软件负担。 IDE环境推荐 keil。编程器自己自制ISP下载线就行,好做,成本5元左右。 8051:MCS-51系列 INTEL公司 8031:无ROM 8051:一次性掩膜ROM 8751:多次写EPROM stc 51系列:(增强型51单片机)价格便宜(从性价比方面说),功能多,
[单片机]
AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02
四、ATMEGA16的定时/计数器 四—(02)、T/C1定时器A/B比较匹配中断和溢出中断实现LED亮度自动调节 啊~~~~~ 图~~~~~ 这里没有什么要注意的,只要理解并会控制T/C1的两个比较匹配中断A/B和溢出中断,That's all ~~ 然后就是仿真图片~ 好了,就代码吧~~ 哈 (有几点我也不是很清楚~~哎~~~不过不重要,它出来了~~哈 //------------------------------------------------------------------------------ //通过比较匹配中断和定时器溢出中断(T1)来控制LED亮度的自动变化 //定时器T1的定
[单片机]
msp430f149学习心得之一 时钟配置
近期要参加电子设计大赛,我们的微处理器选择了msp430(高性能不说,关键很多系列的芯片可到TI官网免费申请到),本人负责软件,之前并没有深入接触过msp430系列的单片机,但还稍稍有点51的底子,现将本人学习430的一点小心得与大家分享~ ********************************基于MSP430F169****************************** 在MSP430单片机中,一个时钟周期 = MCLK晶振的倒数。如果MCLK是8MHz,则一个时钟周期为1/8us。 MSP430单片机的时钟模块主要包括: 三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK 三
[单片机]
51单片机学习笔记,简易时钟
使用芯片STC89C52RC, 2个锁存器 6个带小数点共阴极数码管显示一个24时制时钟 没有时钟芯片,所以掉电后时间会复位 原理图为TX-1C开发板 暂时显示了半小时,一秒不差, 未验证有无其他bug,代码贴上来,欢迎高手指点 ============================== 最终显示的 时.分.秒 是 16.31.37 形式 C代码 #include reg52.h #include MY51.H void show(); uint8 shi=15; //初始时间15:45:00 按复位按钮对时 uint8 fen=45; uint8 miao=0; vo
[单片机]
基于CPLD的位同步时钟提取电路设计
引言 异步串行通信是现代电子系统中最常用的数据信息传输方式之一,一般情况下,为了能够正确地对异步串行数据进行发送和接收,就必须使其接收与发送的码元同步,位同步时钟信号不仅可用来对输入码元进行检测以保证收发同步,而且在对接收的数字码元进行各种处理等过程中,也可以为系统提供一个基准的同步时钟。 本文介绍的位同步时钟的提取方案,原理简单且同步速度较快。整个系统采用VerilogHDL语言编写,并可以在CPLD上实现。 位同步时钟的提取原理 本系统由一个跳变沿捕捉模块、一个状态寄存器和一个可控计数器共三部分组成,整个系统的原理框图如图1所示,其中data_in是输入系统的串行信号,clock是频率为串行信号码元速率2N倍的高精度时
[应用]