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

📄 ds1302.c

📁 基于51单片机ds1302温度测量源码加仿真
💻 C
字号:
#include <at89x51.h>
#include "lcd_h.h"
const char LCDnum[10]="0123456789";
sbit clk=P2^7;
sbit I_O=P2^6;
sbit rst=P2^5;
void write1302(unsigned char command1)//向1302写入 1 个字节的数据  $$$
{
 unsigned wi,sj;
 sj=command1;
 clk=0;
 for(wi=0;wi<8;wi++)
    {
    // if((sj&0x01)==0x01) cc=1;else cc=0; 
    // I_O=cc;
    if((sj&0x01)==0x01) I_O=1;else I_O=0;
     clk=1;
     clk=0;
  sj=sj>>1;
    }
}
void writedata(unsigned char wdataaddr,unsigned char waddr)//写入数据 $$$
{
  rst=0;
  clk=0;
  rst=1;
  write1302(wdataaddr);
  write1302(waddr);
  clk=1;
  rst=0;
}
void reset1302(void)   //$$$
//1302初始化,写入秒,分,时,日,月,星期,年的数据
{
  rst=0;clk=0;rst=1;
  write1302(0x8e);
  write1302(0);
  clk=1;
  rst=0;
  writedata(0x80,0);
  writedata(0x82,0);
  writedata(0x84,0);
  writedata(0x86,0);
  writedata(0x88,0);
  writedata(0x8a,0);
  writedata(0x8c,0);
  rst=0;
  clk=0;
  rst=1;
  write1302(0x8e);
  write1302(0x80);
  clk=1;
  rst=0;
}
unsigned char read1302(void)//向1302读出 1 个字节的数据  $$$
{
 unsigned char ri,rdat=0;

clk=0;
 for(ri=0;ri<8;ri++)
   {
     
	 if (I_O==1) rdat=rdat|0x80;
     clk=1;
     clk=0;
     if (ri<7)  rdat=rdat>>1;
    }
	return (rdat);
}
unsigned char readdata(unsigned char rdataaddr)//1302读出数据子程序     $$$
//  rdataaddr为1302数据的读地址,如81H
{
 unsigned char rdata=0;
 rst=0;
 clk=0;
 rst=1;
 write1302(rdataaddr);
 I_O=1;
 rdata=read1302();
 clk=1;
 rst=0;
 return(rdata);
}





void main(void)
{
	 unsigned char second[2]={0,0};
	 delayms(50);
	 init_LCD();
	 clear_LCD();
	 movexy(1,1);
	 //reset1302();
	 do
	 {
	 		if (P2_0==0)
			{
				reset1302();
				while(P2_0!=1);
			 }
	 second[0]=readdata(0x81);
	 second[1]=second[0];
	 second[0]=second[0]&0x0f;
	 second[1]=second[1]&0x70;
	 second[1]=second[1]>>4;
	 movexy(1,0);
	 write_LCD_data(LCDnum[second[1]]);
	 write_LCD_data(LCDnum[second[0]]);
	 }while(1);
}

⌨️ 快捷键说明

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