DS1302的AVRmega128驱动程序

#include<iom128v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
/*复位脚*/
#define RST0 PORTC &= ~BIT(4)/*电平置低*/
#define RST1 PORTC |= BIT(4)/*电平置高*/
#define RST_IN DDRC &= ~BIT(4)/*方向输入*/
#define RST_OUT DDRC |= BIT(4)/*方向输出*/
/*双向数据*/
#define IO0 PORTC &= ~BIT(3)/*电平置低*/
#define IO1 PORTC |= BIT(3)/*电平置高*/
#define IO_V PINC & BIT(3)/*电平读取*/
#define IO_IN DDRC &= ~BIT(3)/*方向输入*/
#define IO_OUT DDRC |= BIT(3)/*方向输出*/
/*时钟信号*/
#define SCK0 PORTC &= ~BIT(2)/*时钟信号*/
#define SCK1 PORTC |= BIT(2)/*电平置高*/
#define SCK_IN DDRC &= ~BIT(2)/*方向输入*/
#define SCK_OUT DDRC |= BIT(2)/*方向输出*/
/*寄存器地址定义*/
#define ds1302_sec_add 0x80 //秒数据地址
#define ds1302_min_add 0x82 //分数据地址
#define ds1302_hr_add 0x84 //时数据地址
#define ds1302_date_add 0x86 //日数据地址
#define ds1302_month_add 0x88 //月数据地址
#define ds1302_day_add 0x8a //星期数据地址
#define ds1302_year_add 0x8c //年数据地址
#define ds1302_control_add 0x8e //控制数据地址
#define ds1302_charger_add 0x90
#define ds1302_clkburst_add 0xbe

void delay(uint ms);
//void delay_us(uint us);
void display(uint a);
void init(void);
void ds1302_init(void);
void ds1302_write_byte(uchar addr,uchar d);
unsigned char ds1302_read_byte(uchar addr);
void ds1302_write_time(void);
void ds1302_read_time(void);
uchar dectobcd(uchar dec);//DEC码转成BCD码
uchar bcdtodec(uchar bcd);//BCD码转成DEC码

const uchar table_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
const uchar table_wei[]={0x01,0X02,0X04,0X08};
uchar ge=0,shi=0,bai=0,qian=0;

//unsigned char time_buf[8] = {0x20,0x07,0x05,0x08,0x16,0x15,0x00,0x02};//存放时钟数据
unsigned char time_buf[8] = {0x20,11,7,15,5,23,51,5};//11年7月15日周5,23点51分11秒

void main(void)
{
init();
ds1302_init();
ds1302_write_time();
ds1302_read_time();
while(1)
{
time_buf[6]=bcdtodec((ds1302_read_byte(ds1302_sec_add))&0x7F);//秒 !!!!!!!!!!!!!!!!!!!!!!111
display(time_buf[6]);
}
}

void init(void)
{
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
}
/********************************************************************
* 名称 : ds1302_write_byte()
* 功能 : 给DS1302写时钟数据
* 输入 : 地址和数据
* 输出 : 无
***********************************************************************/
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,0xa9); //涓流充电

/*
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_b

DS1302的AVRmega128驱动程序相关文档

最新文档

返回顶部