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

📄 ds1302.txt

📁 非常实用的DS1302的时钟显示源代码
💻 TXT
字号:
#include "reg51.h"
sbit t_clk=P1^0;   /*实时时钟时钟线引脚 */
sbit t_io=P1^1;	   /*实时时钟数据线引脚 */
sbit t_rst=P1^7;   /*实时时钟复位线引脚 */
sbit BIT7=ACC^7;   /*位寻址寄存器定义 */
sbit BIT0=ACC^0;   /*位寻址寄存器定义 */
unsigned data second,mintue,hour,dat,month,week,year;
//unsigned char code str1[]="上"
//unsigned char inittime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分钟 小时 日  月  年 星期	 初始化后设置为:04年12月2日星期4 0点0分0秒
//unsigned char ctime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分钟 小时 日  月  年 星期	 初始化后设置为:04年12月2日星期4 0点0分0秒
//unsigned char timeee=20;
main()
{
    void wr_1302(unsigned char add,unsigned char ucda);
    unsigned char re_1302(unsigned char add);
    void set1302(unsigned char *pda);
    void get_1302(unsigned char curtime[]); 
   while(1)
    {
         Put12864Number(32,0,1,re_1302(0x8d)/10+0x32); //显示年
         Put12864Number(33,0,1,re_1302(0x8d)%10+0x32);
	     Put12864Number(35,0,1,re_1302(0x89)/10+0x32); //显示月
         Put12864Number(36,0,1,re_1302(0x89)%10+0x32);
         Put12864Number(38,0,1,re_1302(0x87)/10+0x32); //显示日
         Put12864Number(39,0,1,re_1302(0x87)%10+0x32);
	     Put12864Number(41,0,1,re_1302(0x85)/10+0x32); //显示小时
         Put12864Number(42,0,1,re_1302(0x85)%10+0x32);
	     Put12864Number(44,0,1,re_1302(0x83)/10+0x32); //显示分
         Put12864Number(45,0,1,re_1302(0x83)%10+0x32);      
	     Put12864Number(47,0,1,re_1302(0x81)/10+0x32); //显示秒
         Put12864Number(48,0,1,re_1302(0x81)%10+0x32);
	     Put12864Number(50,0,1,re_1302(0x8b)%10+0x32); //显示星期
    }
}    

/************************DS1302读写程序************************/
void inputbyte(unsigned char ucda)	//八位数据写入函数
{   
       unsigned char i;
       ACC=ucda;                    //将要写入的数放入ACC
       t_rst=1;						//启动数据传送
       for(i=8;i>0;i--)				//循环八次,写入八位数据,从低位到高位
       { 
	      t_io=BIT0;				//将ACC^0的值赋给时钟数据线
          t_clk=0;
          t_clk=1;					//在时钟线的上升沿写入一位数据
          ACC=ACC>>1;				//将高一位数据移至ACC^0
       }
}

unsigned char outputbyte(void)	//八位数据读出函数
{
        unsigned char i;
        t_rst=1;				//启动数据传送
        for(i=8;i>0;i--)		//读出八位数据,从低位到高位
        {
		    ACC=ACC>>1;			//将前一下降沿读出的数据右移一位,从而该次读出的数放入ACC^7
            t_io=1;				//P1口输入之前置1
            t_clk=1;
            t_clk=0;			//时钟线下降沿读出一位数据
            BIT7=t_io;
        }
        return(ACC);
}

void wr_1302(unsigned char add,unsigned char ucda)  //将指令或数据写入对应寄存器
{      
        t_rst=0;
        t_clk=0;
        t_rst=1;
        inputbyte(add);
        inputbyte(ucda);
        t_rst=0;
        t_io=1;
}

unsigned char re_1302(unsigned char add) //读出对应寄存器内容
{
        unsigned char ucda,dat1,dat2;
        t_rst=0;
        t_clk=0;
        t_rst=1;
        inputbyte(add);
        ucda=outputbyte();
        t_rst=0;
        dat1=ucda;
        dat2=dat1/16;					//数据进制转换
        dat1=dat1%16;					//十六进制转十进制
        dat1=dat1+dat2*10;
        return(dat1);
}

/*void set1302(unsigned char *pda)  //设置时间初值
{     
        unsigned char i;
        unsigned char add=0x80;
        wr_1302(0x8e,0x00);		 //将控制寄存器值设为零,最高位WP=0允许写
        for(i=7;i>0;i--)		 //将七个时间初值写入对应寄存器
        {
		     wr_1302(add,*pda);	 //写对应时钟寄存器的值
             pda++;
             add+=2;
        }
        wr_1302(0x8e,0x80);		 //写保护,防止干扰影响时间值
}

void get_1302(unsigned char curtime[])	//读取当前时间值
{
        unsigned char i,j;
        unsigned char add=0x81;
        bdata unsigned char sec;
        for(i=0;i<7;i++)
           {
		       curtime[i]=re_1302(add);	//读对应时钟寄存器的值
               sec=curtime[i];
               j=sec>>4;				//将BCD码转化为对应十进制数
               j*=10;
               sec=sec&0x0f;
               sec+=j;
               curtime[i]=sec;
               add+=2;
           }
}*/

/*void Init1302(void)
{
        wr_1302(0x8e,0x00);  //禁止写保护
        wr_1302(0x90,0xa5);
        wr_1302(0x80,0x00);  //秒初始化
        wr_1302(0x82,0x40);  //分钟初始化
        wr_1302(0x84,0x08);  //时初始化
        wr_1302(0x86,0x09);  //日初始化
        wr_1302(0x88,0x03);  //月初始化
        wr_1302(0x8a,0x01);  //星期初始化
        wr_1302(0x8c,0x09);  //年初始化 
        wr_1302(0x8e,0x80);  //允许写保护
}*/

⌨️ 快捷键说明

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