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

📄 ds1302clock.c

📁 数字体温计,由单片机控制现实当前的温度
💻 C
📖 第 1 页 / 共 3 页
字号:
* 函数名称    :RTOutputByte
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
uchar RTOutputByte(void) 
{ 
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         /*相当于汇编中的 RRC */
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    } 
    return(ACC); 
}
/******************************************************************************************
* 函数名称    :W1302
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);       /* 写1Byte数据*/
    T_CLK = 1;
    T_RST = 0;
}
/******************************************************************************************
* 函数名称    :R1302
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 读1Byte数据 */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}

/******************************************************************************************
* 函数名称    :Set1302
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Set1302(uchar *pClock) 
{
    uchar i;
    uchar ucAddr = 0x80; 
    W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
    for(i =7; i>0; i--)
    { 
        W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
        pClock++;
        ucAddr +=2;
    }
    W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
}

/******************************************************************************************
* 函数名称    :delay
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void delay(word useconds)
{
  	for(;useconds>0;useconds--);
}

/******************************************************************************************
* 函数名称    :Delay
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay18B20(int num)
{
  	while(num--);
}
/******************************************************************************************
* 函数名称    :ow_reset
* 功能描述    :复位
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
byte ow_reset(void)
{
  	unsigned char x=0;
	  DQ = 1;    //DQ复位
	  Delay18B20(8);  //稍做延时
	  DQ = 0;    //单片机将DQ拉低
	  Delay18B20(80); //精确延时 大于 480us
	  DQ = 1;    //拉高总线
	  Delay18B20(14);
	  x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	  Delay18B20(20);
}     

/******************************************************************************************
* 函数名称    :read_byte
* 功能描述    :从 1-wire 总线上读取一个字节
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
byte read_byte(void)
{
  	byte i;
  	byte value = 0;
  	for (i=8;i>0;i--)
  	{
    	value>>=1;
    	DQ = 0; 
    	DQ = 1;
    	delay(1);  
    	if(DQ)value|=0x80;
    	delay(6); 
  	}
  	return(value);
}


/******************************************************************************************
* 函数名称    :write_byte
* 功能描述    :向 1-WIRE 总线上写一个字节
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void write_byte(char val)
{
  	byte i;
  	for (i=8; i>0; i--) // 一次写一位
  	{
    	DQ = 0; // 
    	DQ = val&0x01;
    	Delay18B20(5); // 
    	DQ = 1;
    	val=val/2;
  	}
  	Delay18B20(5);
}

/******************************************************************************************
* 函数名称    :Read_Temperature
* 功能描述    :读取和显示温度
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
Read_Temperature(char xx,char yy)
{
  	uchar i,tl_temp;
  	uint  x;
  	uchar ct[8];
  	union{byte c[2]; int x;}temp;
  
  	ow_reset();
  	write_byte(0xCC); // Skip ROM
  	write_byte(0x44); // 转换温度
  	ow_reset();
  	write_byte(0xCC); //Skip ROM
  	write_byte(0xbe); // 读取寄存器
  	temp.c[1]=read_byte();//读出温度低8位
  	temp.c[0]=read_byte();//读出温度高8位
 
  // 零下温度判断
  	sflag=0; //温度零下标志 0:零上,1:零下
  	if((temp.c[0]&0xf8)!=0x00)
   	{
    	sflag=1; //零下标志位置1
    	temp.c[1]=~temp.c[1]; //低8位取反
    	temp.c[0]=~temp.c[0]; //高8位取反
    	tl_temp=temp.c[1]+1;  //低8位加1 
    	temp.c[1]=tl_temp;    //计算后重新存入数组
    	if(tl_temp>255) temp.c[0]++;  //如果低8位大于255,向高8位进1
  	}  

  	x=((temp.c[0]&0x07)*256+temp.c[1])*.625;
  	for(i=0;i<8;i++)
       {
         ct[i]=0;
       }
  	i=0;
  	while(x/10)
   	{
    	ct[i]=x%10;
    	x=x/10;
    	i++;
   	}
  	ct[i]=x;

  	if(sflag==1) DisplayOneChar(xx-1,yy,0x2d);
  	else         DisplayOneChar(xx-1,yy,0x20);
  	DisplayOneChar(xx,  yy,ct[2]+0x30);//显示温度十位数
  	DisplayOneChar(xx+1,yy,ct[1]+0x30);//显示温度个位数
  	DisplayOneChar(xx+2,yy,0x2e);//显示小数点
  	DisplayOneChar(xx+3,yy,ct[0]+0x30);//显示温度小数位
  	DisplayOneChar(xx+4,yy,0x01);//显示自定义字符
  	DisplayOneChar(xx+5,yy,0x43);//显示字符“C
}

/******************************************************************************************
* 函数名称    :adjust_res
* 功能描述    :温度分辨率调整
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void adjust_res(char res) ///res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
                           //              0.5, 0.25, 0.125   
{
  	ow_reset();        //复位
  	write_byte(0xcc);  //跳过Rom
  	write_byte(0x4e);  //写暂存器
  	write_byte(0x02);  //写TH 
  	write_byte(0x01);  //写TL
  //write_byte(0x5f);  //写结构寄存器
  	write_byte(res);
  	ow_reset();       //复位
  	write_byte(0xcc); //跳过Rom 
  	write_byte(0x48); //把暂存器内容写到EPRam中
} 
/******************************************************************************************
* 函数名称    :mychar
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void mychar()//自定义字符
{
 		WriteCommandLCM(0x48, 0); //第一行
 		WriteDataLCM(0x02);
 		WriteCommandLCM(0x49, 0); //第2行
 		WriteDataLCM(0x05);
 		WriteCommandLCM(0x4a, 0); //第3
 		WriteDataLCM(0x05);
 		WriteCommandLCM(0x4b, 0); //第4
 		WriteDataLCM(0x02);
 		WriteCommandLCM(0x4c, 0); //第5
 		WriteDataLCM(0x00);
 		WriteCommandLCM(0x4d, 0); //第6
 		WriteDataLCM(0x00);
 		WriteCommandLCM(0x4e, 0); //第7
 		WriteDataLCM(0x00);
 		WriteCommandLCM(0x4f, 0); //第8
 		WriteDataLCM(0x00);
}

⌨️ 快捷键说明

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