DS1302——51
生活随笔
收集整理的這篇文章主要介紹了
DS1302——51
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#define ds1302_sec_add 0x80 //??陏?Y???#define ds1302_min_add 0x82 //?陏?Y???#define ds1302_hr_add 0x84 //甌陏?Y???#define ds1302_date_add 0x86 //?陏?Y???#define ds1302_month_add 0x88 //??陏?Y???#define ds1302_day_add 0x8a //D??y?Y???#define ds1302_year_add 0x8c //?覡y?Y???
#define ds1302_control_add 0x8e //????陏?Y???#define ds1302_charger_add 0x90
#define ds1302_clkburst_add 0xbesbit SCK = P1 ^ 0;
sbit IO = P1 ^ 1;
sbit RST = P1 ^ 2;unsigned char timebuf[7] = {23,59,50,16,8,17,4};
unsigned char tempbuf[7];
unsigned char writebuf[7];
unsigned char readbuf[7];
unsigned char disbuf[7];void ds1302_write_byte(unsigned char addr,unsigned char byte)
{unsigned char i;addr = addr & 0xfe;SCK = 0;RST = 0;RST = 1;for(i = 0; i < 8; i++){IO = addr & 0x01;SCK = 0;SCK = 1;addr >>= 1;}for(i = 0; i < 8; i++){IO = byte & 0x01;SCK = 0;SCK = 1;byte >>= 1;}SCK = 0;RST = 0;
}unsigned char ds1302_read_byte(unsigned char addr)
{unsigned char i;unsigned char temp;addr = addr & 0xfe;SCK = 0;RST = 0;RST = 1;addr = addr + 1;for(i = 0; i < 8; i++){IO = addr & 0x01;SCK = 0;SCK = 1;addr >>= 1;}for(i = 0; i < 8; i++){SCK = 1;SCK = 0;temp >>= 1;if(IO){temp += 0x80;}}RST = 0;return temp;
}void ds1302_write_time()
{unsigned char temp;unsigned char temp1;unsigned char i;for(i = 0; i < 7; i++){temp = timebuf[i] / 10;temp1 = timebuf[i] % 10;writebuf[i] = (temp << 4) | temp1; }ds1302_write_byte(ds1302_control_add,0x00);ds1302_write_byte(ds1302_hr_add,writebuf[0]);ds1302_write_byte(ds1302_min_add,writebuf[1]);ds1302_write_byte(ds1302_sec_add,writebuf[2]);ds1302_write_byte(ds1302_year_add,writebuf[3]);ds1302_write_byte(ds1302_month_add,writebuf[4]);ds1302_write_byte(ds1302_date_add,writebuf[5]);ds1302_write_byte(ds1302_day_add,writebuf[6]);ds1302_write_byte(ds1302_control_add,0x80);
}void ds1302_read_time()
{unsigned char i;unsigned char temp;unsigned char temp1;readbuf[0] = ds1302_read_byte(ds1302_hr_add);readbuf[1] = ds1302_read_byte(ds1302_min_add);readbuf[2] = ds1302_read_byte(ds1302_sec_add);readbuf[3] = ds1302_read_byte(ds1302_year_add);readbuf[4] = ds1302_read_byte(ds1302_month_add);readbuf[5] = ds1302_read_byte(ds1302_date_add);readbuf[6] = ds1302_read_byte(ds1302_day_add); for(i = 0; i < 7; i++){temp = (readbuf[i] >> 4);temp1 = (readbuf[i] & 0x0f);disbuf[i] = temp * 10 + temp1;}
}void DS1302_dis_time()
{unsigned char lcddisbuf[9] = {0};unsigned char dlcddisbuf[9] = {0};unsigned char daydisbuf[4] = {0};lcddisbuf[0] = (disbuf[0] / 10) + 0x30;lcddisbuf[1] = (disbuf[0] % 10) + 0x30;lcddisbuf[2] = ':';lcddisbuf[3] = (disbuf[1] / 10) + 0x30;lcddisbuf[4] = (disbuf[1] % 10) + 0x30;lcddisbuf[5] = ':';lcddisbuf[6] = (disbuf[2] / 10) + 0x30;lcddisbuf[7] = (disbuf[2] % 10) + 0x30;dlcddisbuf[0] = (disbuf[3] / 10) + 0x30;dlcddisbuf[1] = (disbuf[3] % 10) + 0x30;dlcddisbuf[2] = '/';dlcddisbuf[3] = (disbuf[4] / 10) + 0x30;dlcddisbuf[4] = (disbuf[4] % 10) + 0x30;dlcddisbuf[5] = '/';dlcddisbuf[6] = (disbuf[5] / 10) + 0x30;dlcddisbuf[7] = (disbuf[5] % 10) + 0x30;switch(disbuf[6]){case 1:{daydisbuf[0] = 'M';daydisbuf[1] = 'o';daydisbuf[2] = 'n';break;}case 2:{daydisbuf[0] = 'T';daydisbuf[1] = 'u';daydisbuf[2] = 'e';break;}case 3:{daydisbuf[0] = 'W';daydisbuf[1] = 'e';daydisbuf[2] = 'd';break;}case 4:{daydisbuf[0] = 'T';daydisbuf[1] = 'h';daydisbuf[2] = 'u';break;}case 5:{daydisbuf[0] = 'F';daydisbuf[1] = 'r';daydisbuf[2] = 'i';break;}case 6:{daydisbuf[0] = 'S';daydisbuf[1] = 'a';daydisbuf[2] = 't';break;}case 7:{daydisbuf[0] = 'S';daydisbuf[1] = 'u';daydisbuf[2] = 'n';break;}default:{daydisbuf[0] = '-';daydisbuf[1] = '-';daydisbuf[2] = '-';break;}}lcd_write_src(0,0,lcddisbuf);lcd_write_src(0,1,dlcddisbuf);lcd_write_src(10,1,daydisbuf);
}
總結
以上是生活随笔為你收集整理的DS1302——51的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AD-DA——51
- 下一篇: SPI通信总线-51