要是再加個18B20的話,溫度只顯示4個0,單獨顯示溫度又沒問題,不知哪位能指點我這棵小白菜
#include <reg52.H>
#include <lcd1602.H>
#include <ds1302.H>
/*******************************************************************************
* 函數名 :LCDWriteData()
* 函數功能 :1602顯示與時間溫度函數
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void LCDWriteData()
{ LCD1602WriteCom(0x80);
LCD1602WriteData('2'); //2
LCD1602WriteData('0'); //0
LCD1602WriteData('0'+TIME[6]/16); //1
LCD1602WriteData('0'+(TIME[6]&0x0f));//7年
LCD1602WriteData('-'); //-
LCD1602WriteData('0'+TIME[4]/16); //0
LCD1602WriteData('0'+(TIME[4]&0x0f));//5月
LCD1602WriteData('-'); //-
LCD1602WriteData('0'+TIME[3]/16); //0
LCD1602WriteData('0'+(TIME[3]&0x0f));//7號
LCD1602WriteCom(0x8b);
LCD1602WriteData('0'+(TIME[5]&0x0f));//星期6
LCD1602WriteCom(0xc0);
LCD1602WriteData('0'+TIME[2]/16); //時
LCD1602WriteData('0'+(TIME[2]&0x0f));
LCD1602WriteData(':');
LCD1602WriteData('0'+TIME[1]/16); //分
LCD1602WriteData('0'+(TIME[1]&0x0f));
LCD1602WriteData(':');
LCD1602WriteData('0'+TIME[0]/16); //秒
LCD1602WriteData('0'+(TIME[0]&0x0f));
}
void main()
{
Ds1302Init(); //1302初始化
LCD1602Init(); //1602初始化
while(1)
{ Ds1302ReadTime(); //讀取時鐘信息
LCDWriteData(); //1602顯示與時間溫度函數
}
}
#include <ds1302.H>
//---DS1302寫入和讀取時分秒的地址命令---//
//---秒分時日月周年 最低位讀寫位;-------//
uchar code READ[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302時鐘初始化2016年5月7日星期六12點00分00秒。---//
//---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
uchar TIME[7] = {0, 0, 0x12, 0x25, 0x11, 0x06, 0x16};
/*******************************************************************************
* 函 數 名 : Ds1302Write
* 函數功能 : 向DS1302命令(地址+數據)
* 輸 入 : addr,dat
* 輸 出 : 無
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{
uchar i;
DS1302_RST=0;
_nop_();
DS1302_LCDK=0;
_nop_();
DS1302_RST=1;
_nop_();
for(i=0;i<8;i++)
{
DS1302_IO=addr&0x01;
addr>>=1;
DS1302_LCDK=1;
_nop_();
DS1302_LCDK=0;
_nop_();
}
for(i=0;i<8;i++)
{
DS1302_IO=dat&0x01;
dat>>=1;
DS1302_LCDK=1;
_nop_();
DS1302_LCDK=0;
_nop_();
}
DS1302_RST=0;
_nop_();
}
/*******************************************************************************
* 函 數 名 : Ds1302Read
* 函數功能 : 讀取一個地址的數據
* 輸 入 : addr
* 輸 出 : dat
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{
uchar i,dat ,dat1;
DS1302_RST=0;
_nop_();
DS1302_LCDK=0;
_nop_();
DS1302_RST=1;
_nop_();
for(i=0;i<8;i++)
{
DS1302_IO=addr&0x01;
addr>>=1;
DS1302_LCDK=1;
_nop_();
DS1302_LCDK=0;
_nop_();
}
_nop_();
for(i=0;i<8;i++)
{
dat1=DS1302_IO;
dat=(dat>>1)|(dat1<<7);
DS1302_LCDK=1;
_nop_();
DS1302_LCDK=0;
_nop_();
}
DS1302_RST=0;
_nop_();
DS1302_LCDK=1;
_nop_();
DS1302_IO=0;
_nop_();
DS1302_IO=1;
_nop_();
return dat;
}
/*******************************************************************************
* 函 數 名 : Ds1302Init
* 函數功能 : 初始化DS1302.
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Ds1302Init()
{
uchar i;
Ds1302Write(0x8e, 0x00);
for(i=0;i<7;i++)
{
Ds1302Write(WRITE[i], TIME[i]);
}
Ds1302Write(0x8e, 0x80);
}
/*******************************************************************************
* 函 數 名 : Ds1302ReadTime
* 函數功能 : 讀取時鐘信息
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Ds1302ReadTime()
{
uchar i;
for(i=0;i<7;i++)
{
TIME[i]=Ds1302Read(READ[i]);
}
}
|