发第一个单片机程序DS1302芯片
											 程序代码:
程序代码:#include <reg51.h>
sbit ds1302_nf=P1^2;  // p1.2控制CE
sbit ds1302_clk=P3^6; // p3.6控制时序
sbit ds1302_io=P3^7;  // p3.7控制的是IO口
void ds1302_init()    //准备传输数据的初始化,CE拉高,clk拉低
{
  ds1302_nf=1;
  ds1302_clk=0;
 // ds1302_io=0;
}
void ds1302_close()  //关闭数据传输 ,CE拉高,CLK拉低
{
  ds1302_nf=0;
  //ds1302_clk=0;
  //ds1302_io=0;
}
void ds1302_write_byte(unsigned char addr)   //写一个字节
{
   unsigned char i;
    for(i=0;i<8;i++)
    {
      ds1302_io=addr&1;
     ds1302_clk=0;
      addr>>=1;
      ds1302_clk=1;
     }
}
unsigned char ds1302_read_byte()       //读一个字节
{
  unsigned char i,datanum=0;
  for(i=0;i<8;i++){
      datanum>>=1;
      ds1302_clk=1;
        ds1302_clk=0;
        if(ds1302_io==1)
          datanum|=0x80;
    }
    return(datanum);
}
void ds1302_write_data(unsigned char addr,unsigned char datanum)    //数据的写入分两部分,寄存器的选择和读写方式这个是一个字节  后面是一个字节的数据
{
   ds1302_init();
   ds1302_write_byte(addr);
    ds1302_write_byte(datanum);
    ds1302_close();
}
unsigned char ds1302_read_data(unsigned char addr)    //数据的读入分两步,第一步写入 寄存器 的选择控制部分数据,第二步读出一个字节的内容      
{
  unsigned  char datanum;
  ds1302_init();
  ds1302_write_byte(addr);
  datanum=ds1302_read_byte();
  ds1302_close();
  return(datanum);
}
void ds1302_wp_set()                    //写保护位的设置
{
  ds1302_init();
  ds1302_write_data(0x8e,0x80);
  ds1302_close();
}
void ds1302_wp_clear()               //清楚保护位
{
  ds1302_init();
  ds1302_write_data(0x8e,0);
  ds1302_close();
}
void delay(unsigned char i)        //延时函数
{
   unsigned char j;
    for(i;i>0;i--)
      for(j=0;j<255;j++);
}
//从DS1302里面读出秒表的数据给P2口  P2口连接的是8个LED灯,看灯的效果
void main()
{      
   ds1302_wp_clear();
    ds1302_write_data(0x80,0);
   ds1302_wp_set();
   while(1){
    delay(1000);
   P2=ds1302_read_data(0x81);
   }
}     [ 本帖最后由 朱三哥 于 2013-3-2 22:09 编辑 ]



 
											






 
	    

 
	
