⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.c

📁 数码管显示温度与时间
💻 C
字号:
#include <at89x52.h>
#include <intrins.h>
#define   uchar    unsigned char
#define   dd     _nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();_nop_ ();
//*******DS1302管脚定义*******
 sbit DS_RESET=P2^6;   //复位
 sbit DS_IO=P2^5;  // IO
 sbit DS_CLK=P2^4;	 //时钟
//***************************
 sbit ACC0=ACC^0;
 sbit ACC1=ACC^1;
 sbit ACC2=ACC^2;
 sbit ACC3=ACC^3;
 sbit ACC4=ACC^4;
 sbit ACC5=ACC^5;
 sbit ACC6=ACC^6;
 sbit ACC7=ACC^7;
//************函数声明**********
void w_1302 (uchar add,uchar dat);  //对指定的寄存器写数据,add寄存器地址,dat数据
uchar r_1302 (uchar add);  //读指定的寄存器数据,返回值为十进制数
void init_ds1302 (void);  
//向DS1302写入控制字及数据
void w_1302 (uchar add,uchar dat)
{
 ACC=add;

 DS_CLK=0;
 DS_RESET=1;
 dd;
 DS_IO=ACC0;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC1;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC2;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC3;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 DS_IO=ACC4;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC5;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC6;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 DS_IO=ACC7;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 dd;
//*********
  ACC=dat;
 DS_IO=ACC0;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC1;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 DS_IO=ACC2;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC3;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC4;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 DS_IO=ACC5;
 DS_CLK=0;
 dd;
 DS_CLK=1;
 DS_IO=ACC6;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 DS_IO=ACC7;
 DS_CLK=0;
 dd; 
 DS_CLK=1;
 dd;
  DS_RESET=0;
 DS_CLK=0;
 dd;
}
//读DS1302数据
uchar r_1302 (uchar add)
{
 uchar a,b,k;

 DS_CLK=0;
  DS_RESET=1;
  ACC=add;
   DS_IO=ACC0;
  DS_CLK=0;
  dd; 
  DS_CLK=1;
    DS_IO=ACC1;
  DS_CLK=0;
 dd; 
  DS_CLK=1;
    DS_IO=ACC2;
  DS_CLK=0;
 dd; 
  DS_CLK=1;
    DS_IO=ACC3;
  DS_CLK=0;
 dd;
  DS_CLK=1;
    DS_IO=ACC4;
  DS_CLK=0;
 dd; 
  DS_CLK=1;
    DS_IO=ACC5;
  DS_CLK=0;
  dd; 
  DS_CLK=1;
    DS_IO=ACC6;
  DS_CLK=0;
  dd;
  DS_CLK=1;
    DS_IO=ACC7;
  DS_CLK=0;
   dd;
  DS_CLK=1;
  dd;
  DS_CLK=0;
  dd;
 //************
  ACC0=DS_IO;
   
 DS_CLK=1;
 dd;
 DS_CLK=0;
  ACC1=DS_IO;
 dd; 
 DS_CLK=1;
 dd; 
 DS_CLK=0;
  ACC2=DS_IO;
 dd; 
 DS_CLK=1;
 dd; 
 DS_CLK=0;
  ACC3=DS_IO;
 dd;  
 DS_CLK=1;
dd; 
 DS_CLK=0;
  ACC4=DS_IO;
  dd; 
 DS_CLK=1;
dd; 
 DS_CLK=0;
  ACC5=DS_IO;
dd; 
 DS_CLK=1;
 dd; 
 DS_CLK=0;
  ACC6=DS_IO;
 dd;  
 DS_CLK=1;
 dd; 
 DS_CLK=0;
   ACC7=DS_IO;
 dd;  

 DS_RESET=0;
 DS_CLK=0;
dd;

 k=ACC;
 a=k/16;
 b=k%16;
 k=a*10+b;
   return (k);
}

//DS1302初始化操作
void init_ds1302 (void)
{ 
	w_1302 (0x8e,0x00);	 //禁止写保护	
	w_1302 (0x80,0x00);	 //写秒
	w_1302 (0x82,0x00);	 //写分
	w_1302 (0x84,0x12);	  //写时
	w_1302 (0x86,0x01);	  //写日
	w_1302 (0x88,0x01);	  //写月
	w_1302 (0x8c,0x09);	  //写年
	w_1302 (0x8a,0x04);	 //写周日
	w_1302 (0x90,0xaa);	 //打开充电二级管  二个二级管串联一个4K电阻
	w_1302 (0x8e,0x80);	 //允许写保护
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -