📄 ds1302clock.c
字号:
* 函数名称 :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 + -