?? ht1381.h~
字號:
#define BIT(x) (1 << (x))
/*復位腳*/
#define RST_LOW PORTD &= ~(BIT(0)) /*電平置低*/
#define RST_HIGH PORTD |= BIT(0) /*電平置高*/
#define RST_IN DDRD &= ~(BIT(0)) /*方向輸入*/
#define RST_OUT DDRD |= BIT(0) /*方向輸出*/
/*雙向數(shù)據(jù)*/
#define IO_LOW PORTD &= ~(BIT(1)) /*電平置低*/
#define IO_HIGH PORTD |= BIT(1) /*電平置高*/
#define IO_R PIND & BIT(1) /*電平讀取*/
#define IO_IN DDRD &= ~(BIT(1)) /*方向輸入*/
#define IO_OUT DDRD |= BIT(1) /*方向輸出*/
/*時鐘信號*/
#define SCK_LOW PORTD &= ~(BIT(2)) /*電平置低*/
#define SCK_HIGH PORTD |= BIT(2) /*電平置高*/
#define SCK_IN DDRD &= ~(BIT(2)) /*方向輸入*/
#define SCK_OUT DDRD |= BIT(2) /*方向輸出*/
#define HT1381_sec_add 0x80 //秒數(shù)據(jù)地址
#define HT1381_min_add 0x82 //分數(shù)據(jù)地址
#define HT1381_hr_add 0x84 //時數(shù)據(jù)地址
#define HT1381_date_add 0x86 //日數(shù)據(jù)地址
#define HT1381_month_add 0x88 //月數(shù)據(jù)地址
#define HT1381_day_add 0x8a //星期數(shù)據(jù)地址
#define HT1381_year_add 0x8c //年數(shù)據(jù)地址
#define HT1381_control_add 0x8e //控制數(shù)據(jù)地址
//#define HT1381_charger_add 0x90 //適用于ds1302
#define HT1381_clkburst_add 0xbe
//unsigned char time_buf[8] = {0x20,0x07,0x05,0x08,0x23,0x59,0x00,0x02};
unsigned char time_buf[7];
/*向HT1381寫入一字節(jié)數(shù)據(jù)*/
void HT1381_write_byte(unsigned char addr, unsigned char written_data)
{
unsigned char i;
RST_HIGH; /*啟動HT1381總線*/
/*寫入目標地址:addr*/
IO_OUT;
addr = addr & 0xFE; /*最低位置零*/
for (i = 0; i < 8; i ++)
{
if (addr & 0x01)
{IO_HIGH;}
else {IO_LOW;}
SCK_HIGH;
SCK_LOW;
addr = addr >> 1;
}
/*寫入數(shù)據(jù):written_data*/
IO_OUT;
for (i = 0; i < 8; i ++)
{
if (written_data & 0x01)
{IO_HIGH;}
else {IO_LOW;}
SCK_HIGH;
SCK_LOW;
written_data = written_data >> 1;
}
RST_LOW; /*停止HT1381總線*/
}
/*從HT1381讀出一字節(jié)數(shù)據(jù)*/
unsigned char HT1381_read_byte(unsigned char addr)
{
unsigned char i;
unsigned char temp;
RST_HIGH; /*啟動HT1381總線*/
/*寫入目標地址:addr*/
IO_OUT;
addr = addr | 0x01;/*最低位置高*/
for (i = 0; i < 8; i ++)
{
if (addr & 0x01) {IO_HIGH;}
else { IO_LOW;}
SCK_HIGH;
SCK_LOW;
addr = addr >> 1;
}
/*輸出數(shù)據(jù):temp*/
IO_IN;
for (i = 0; i < 8; i ++)
{
temp = temp >> 1;
if (IO_R)
{temp |= 0x80;}
else {temp &= 0x7F;}
SCK_HIGH;
SCK_LOW;
}
RST_LOW; /*停止HT1381總線*/
return temp;
}
/*向HT1381寫入時鐘數(shù)據(jù)*/
/*void HT1381_write_time(void)
{
HT1381_write_byte(HT1381_control_add,0x00); //關閉寫保護
HT1381_write_byte(HT1381_sec_add,0x80); //暫停
//HT1381_write_byte(HT1381_charger_add,0xa9); //涓流充電
HT1381_write_byte(HT1381_year_add,time_buf[1]); //年
HT1381_write_byte(HT1381_month_add,time_buf[2]); //月
HT1381_write_byte(HT1381_date_add,time_buf[3]); //日
HT1381_write_byte(HT1381_hr_add,time_buf[4]); //時
HT1381_write_byte(HT1381_min_add,time_buf[5]); //分
HT1381_write_byte(HT1381_sec_add,time_buf[6]); //秒
HT1381_write_byte(HT1381_day_add,time_buf[7]); //周
HT1381_write_byte(HT1381_sec_add,0x00); //使能振蕩
HT1381_write_byte(HT1381_control_add,0x80); //打開寫保護
} */
/*從HT1381讀出時鐘數(shù)據(jù)*/
void HT1381_read_time(void)
{
time_buf[0]=HT1381_read_byte(HT1381_year_add); //年
time_buf[1]=HT1381_read_byte(HT1381_month_add); //月
time_buf[2]=HT1381_read_byte(HT1381_date_add); //日
time_buf[3]=HT1381_read_byte(HT1381_hr_add); //時
time_buf[4]=HT1381_read_byte(HT1381_min_add); //分
time_buf[5]=(HT1381_read_byte(HT1381_sec_add))&0x7F; //秒
time_buf[6]=HT1381_read_byte(HT1381_day_add); //周
}
/*HT1381初始化函數(shù)*/
void HT1381_init(void)
{
RST_LOW; /*RST腳置低*/
SCK_LOW; /*SCK腳置低*/
RST_OUT; /*RST腳設置為輸出*/
SCK_OUT; /*SCK腳設置為輸出*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -