新闻  |   论坛  |   博客  |   在线研讨会
1302
0750long | 2010-02-02 21:58:14    阅读:1583   发布文章

1302

 

 

#include<intrins.h>    
#include<reg52.h>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char

/*************************ds1302与at89s52引脚连接********************/
sbit T_RST=P3^5;
sbit T_CLK=P3^7;                
sbit T_IO=P3^6;
sbit dula="P2"^6;
sbit wela="P2"^7;               
              
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};         //0~~9段码
/******************DS1302:写入操作(上升沿)*********************/
void write_byte(unsigned char da)
{
   unsigned char i;
   ACC="da";
   for(i=8;i>0;i--)
   {
      T_IO=ACC0;
   T_CLK=0;    
      T_CLK=1;
      ACC="ACC">>1;
   }
}

/******************DS1302:读取操作(下降沿)*****************/
unsigned char read_byte(void)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
      ACC="ACC">>1;
   T_CLK = 1;
   T_CLK = 0;
      ACC7 = T_IO;
   }
   return(ACC);

}

/******************DS1302:写入数据(先送地址,再写数据)***************************/
void write_1302(unsigned char addr,unsigned char da)
{
   T_RST=0;    //停止工作
   T_CLK=0;                                
   T_RST=1;   //重新工作
   write_byte(addr);    //写入地址
  
   write_byte(da);
   T_RST=0;
   T_CLK=1;
}

/******************DS1302:读取数据(先送地址,再读数据)**************************/
unsigned char read_1302(unsigned char addr)
{
   unsigned char temp;
   T_RST=0;                                   //停止工作
   T_CLK=0; 
   T_RST=1;                         //重新工作
   write_byte(addr);   //写入地址
   temp="read"_byte();
   T_RST=0;
   T_CLK=1;     //停止工作
   return(temp);
}

 

 

/***********************延时程序=a*1ms**************************************/
void delay(unsigned char a)
{
   unsigned char i;
   while(a-- !=0)
   {
        for(i=0;i<125;i++);
   }
}

void display(uchar *poi)
{
 dula=0;
    P0=table[*poi%16];  
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xdf;
 wela=1;
 wela=0;
 delay(2);

 dula=0;
 P0=table[*poi/16];
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xef;
  wela=1;
 wela=0;
 delay(2);
 
 poi++;

 dula=0;
 P0=table[*poi%16]|0x80;  
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xf7;
 wela=1;
 wela=0;
 delay(2);

 dula=0;
 P0=table[*poi/16];
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xfb;
  wela=1;
 wela=0;
 delay(2);
 
 poi++;

 dula=0;
 P0=table[*poi%16]|0x80;  
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xfd;
 wela=1;
 wela=0;
 delay(2);

 dula=0;
 P0=table[*poi/16];
 dula=1;
 dula=0;
 
 wela=0;
 P0=0xfe;
  wela=1;
 wela=0;
 delay(2);
}

/************************主程序**********************************************/
void main(void)
{
   uchar clk_time[3]={0x00,0x00,0x12};  //秒,分,时寄存器初始值
   uchar  temp="0x80";         
   uchar i,j;
   write_1302(0x8e,0x00);             //WP=0 写操作
   for(i=0;i<3;i++)
   {
     write_1302(temp,clk_time[i]);
     temp+=2;
   }
   write_1302(0x8e,0x80);             //WP=1 写保护
   while(1)
   { 
 for(j=0;j<10;j++)
      display(clk_time);
   temp="0x81";                   
      for(i=0;i<3;i++)
    {
      clk_time[i]=read_1302(temp);
   temp+=2;
   }
    }
}

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客