/*定义DS12CR887数据线--------------------------------------------------------*/
sbit DS_CS=P3^4;
sbit DS_AS=P3^5;
sbit DS_RW=P3^6;
sbit DS_DS=P3^7;
#define DS_BUS P0 //DS12CR887数据总线
/*****************************************************************************/
/*DS12CR887驱动程序----------------------------------------------------------*/
//往DS12CR887写数据函数
void ds_write(uchar add,uchar date){
unsigned char a0,a2;
DS_CS=0;
DS_DS=1;
DS_RW=1;
DS_AS=1;
DS_BUS=add;
DS_AS=0;
DS_RW=0;
DS_BUS=date;
DS_RW=1;
DS_AS=1;
DS_CS=1;
}
//读取DS12CR887的数据
unsigned char ds_read(uchar add){
unsigned char z;
DS_CS=0; //片选输入
DS_RW=1; //!WR 禁止写入
DS_DS=1; //Read读入
DS_AS=1; //ALE,地址锁存允许
DS_BUS=add;
DS_AS=0;
DS_DS=0;
DS_BUS=0xff;
z=DS_BUS;
DS_DS=1;
DS_AS=1;
DS_CS=1;
return z;
}
//DS12CR887初始化
void ds_init(void){
DS_AS=0;
DS_DS=0;
DS_RW=0;
ds_write(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器
}
void time_init(){
ds_init(); //初始化DS12CR887
ds_write(0x0b,0x76) ;//设置寄存器B
ds_write(0x09,10);//2010年
ds_write(0x08,10);//10月
ds_write(0x07,10);//10日
ds_write(0x06,7);//星期天
ds_write(0x05,19);//时闹钟 19点
ds_write(0x04,15); //小时 15点
ds_write(0x03,30);//分钟闹钟 30分
ds_write(0x02,43); //分钟 43分
ds_write(0x01,0);//秒闹钟 0秒
ds_write(0x00,0);//秒 0秒
}
void show_time()
{
unsigned char x,y;
dd=ds_read(0x07); //日期
x=dd /10;
LED_DSP(1,x);//数码管1显示日期第一位
y=dd % 10;
LED_DSP(2,y);); //数码管2显示日期第二位
hh=ds_read(0x04); //小时
x=hh /10;
LED_DSP(3,x); //数码管3显示小时第1位
y=hh % 10;
LED_DSP(4,y); //数码管4显示小时第2位
mm=ds_read(0x02);
x=mm /10;
LED_DSP(5,x); //数码管5显示分钟第1位
y=mm % 10;
LED_DSP(6,y); //数码管6显示分钟第2位
ss=ds_read(0x00);
x=ss /10;
LED_DSP(7,x); //数码管7显示秒钟第1位
y=ss % 10 ;
LED_DSP(8,y); //数码管7显示秒钟第2位
}
寄存器A功能设置,开启时钟振荡器
你看看芯片是不是初次使用,要是初次要打开振荡器,设置上电默认时间