?? ds1302.txt
字號(hào):
#include "reg51.h"
sbit t_clk=P1^0; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */
sbit t_io=P1^1; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */
sbit t_rst=P1^7; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */
sbit BIT7=ACC^7; /*位尋址寄存器定義 */
sbit BIT0=ACC^0; /*位尋址寄存器定義 */
unsigned data second,mintue,hour,dat,month,week,year;
//unsigned char code str1[]="上"
//unsigned char inittime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分鐘 小時(shí) 日 月 年 星期 初始化后設(shè)置為:04年12月2日星期4 0點(diǎn)0分0秒
//unsigned char ctime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分鐘 小時(shí) 日 月 年 星期 初始化后設(shè)置為:04年12月2日星期4 0點(diǎn)0分0秒
//unsigned char timeee=20;
main()
{
void wr_1302(unsigned char add,unsigned char ucda);
unsigned char re_1302(unsigned char add);
void set1302(unsigned char *pda);
void get_1302(unsigned char curtime[]);
while(1)
{
Put12864Number(32,0,1,re_1302(0x8d)/10+0x32); //顯示年
Put12864Number(33,0,1,re_1302(0x8d)%10+0x32);
Put12864Number(35,0,1,re_1302(0x89)/10+0x32); //顯示月
Put12864Number(36,0,1,re_1302(0x89)%10+0x32);
Put12864Number(38,0,1,re_1302(0x87)/10+0x32); //顯示日
Put12864Number(39,0,1,re_1302(0x87)%10+0x32);
Put12864Number(41,0,1,re_1302(0x85)/10+0x32); //顯示小時(shí)
Put12864Number(42,0,1,re_1302(0x85)%10+0x32);
Put12864Number(44,0,1,re_1302(0x83)/10+0x32); //顯示分
Put12864Number(45,0,1,re_1302(0x83)%10+0x32);
Put12864Number(47,0,1,re_1302(0x81)/10+0x32); //顯示秒
Put12864Number(48,0,1,re_1302(0x81)%10+0x32);
Put12864Number(50,0,1,re_1302(0x8b)%10+0x32); //顯示星期
}
}
/************************DS1302讀寫程序************************/
void inputbyte(unsigned char ucda) //八位數(shù)據(jù)寫入函數(shù)
{
unsigned char i;
ACC=ucda; //將要寫入的數(shù)放入ACC
t_rst=1; //啟動(dòng)數(shù)據(jù)傳送
for(i=8;i>0;i--) //循環(huán)八次,寫入八位數(shù)據(jù),從低位到高位
{
t_io=BIT0; //將ACC^0的值賦給時(shí)鐘數(shù)據(jù)線
t_clk=0;
t_clk=1; //在時(shí)鐘線的上升沿寫入一位數(shù)據(jù)
ACC=ACC>>1; //將高一位數(shù)據(jù)移至ACC^0
}
}
unsigned char outputbyte(void) //八位數(shù)據(jù)讀出函數(shù)
{
unsigned char i;
t_rst=1; //啟動(dòng)數(shù)據(jù)傳送
for(i=8;i>0;i--) //讀出八位數(shù)據(jù),從低位到高位
{
ACC=ACC>>1; //將前一下降沿讀出的數(shù)據(jù)右移一位,從而該次讀出的數(shù)放入ACC^7
t_io=1; //P1口輸入之前置1
t_clk=1;
t_clk=0; //時(shí)鐘線下降沿讀出一位數(shù)據(jù)
BIT7=t_io;
}
return(ACC);
}
void wr_1302(unsigned char add,unsigned char ucda) //將指令或數(shù)據(jù)寫入對(duì)應(yīng)寄存器
{
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(add);
inputbyte(ucda);
t_rst=0;
t_io=1;
}
unsigned char re_1302(unsigned char add) //讀出對(duì)應(yīng)寄存器內(nèi)容
{
unsigned char ucda,dat1,dat2;
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(add);
ucda=outputbyte();
t_rst=0;
dat1=ucda;
dat2=dat1/16; //數(shù)據(jù)進(jìn)制轉(zhuǎn)換
dat1=dat1%16; //十六進(jìn)制轉(zhuǎn)十進(jìn)制
dat1=dat1+dat2*10;
return(dat1);
}
/*void set1302(unsigned char *pda) //設(shè)置時(shí)間初值
{
unsigned char i;
unsigned char add=0x80;
wr_1302(0x8e,0x00); //將控制寄存器值設(shè)為零,最高位WP=0允許寫
for(i=7;i>0;i--) //將七個(gè)時(shí)間初值寫入對(duì)應(yīng)寄存器
{
wr_1302(add,*pda); //寫對(duì)應(yīng)時(shí)鐘寄存器的值
pda++;
add+=2;
}
wr_1302(0x8e,0x80); //寫保護(hù),防止干擾影響時(shí)間值
}
void get_1302(unsigned char curtime[]) //讀取當(dāng)前時(shí)間值
{
unsigned char i,j;
unsigned char add=0x81;
bdata unsigned char sec;
for(i=0;i<7;i++)
{
curtime[i]=re_1302(add); //讀對(duì)應(yīng)時(shí)鐘寄存器的值
sec=curtime[i];
j=sec>>4; //將BCD碼轉(zhuǎn)化為對(duì)應(yīng)十進(jìn)制數(shù)
j*=10;
sec=sec&0x0f;
sec+=j;
curtime[i]=sec;
add+=2;
}
}*/
/*void Init1302(void)
{
wr_1302(0x8e,0x00); //禁止寫保護(hù)
wr_1302(0x90,0xa5);
wr_1302(0x80,0x00); //秒初始化
wr_1302(0x82,0x40); //分鐘初始化
wr_1302(0x84,0x08); //時(shí)初始化
wr_1302(0x86,0x09); //日初始化
wr_1302(0x88,0x03); //月初始化
wr_1302(0x8a,0x01); //星期初始化
wr_1302(0x8c,0x09); //年初始化
wr_1302(0x8e,0x80); //允許寫保護(hù)
}*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -