?? 萬年歷+溫度+鬧鐘+lcd.c
字號:
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
/******************************************************************************/
void WriteOneChar(unsigned char dat)//寫一個字節(jié)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);
DQ = 1;
dat>>=1;
}
}
/******************************************************************************/
unsigned int ReadTemperature(void)//讀取溫度
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
b=ReadOneChar(); //讀高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍輸出并四舍五入
return(t);
}
/******************************************************************************/
//1302驅(qū)動程序
void clock_out(unsigned char dd)
{
ACC=dd;
clock_dat=a0; clock_clk=1; clock_clk=0;
clock_dat=a1; clock_clk=1; clock_clk=0;
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
/******************************************************************************/
unsigned char clock_in(void)
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC);
}
/******************************************************************************/
unsigned char read_clock(unsigned char ord)
{
unsigned char dd=0;
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
dd=clock_in();
clock_Rst=0;
clock_clk=1;
return(dd);
}
/******************************************************************************/
void write_clock(unsigned char ord, unsigned char dd)
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}
/******************************************************************************/
void Disp(void)//顯示和閃爍函數(shù)!
{
unsigned int i=0;
unsigned char a=0,b=0,c=0,f=0;
i=ReadTemperature();//讀溫度并送顯
a=i/100;
Mcs=1;Scs=0;
Disp_Digit(5,40,zero+a*16);
b=i/10-a*10;
Mcs=1;Scs=0;
Disp_Digit(5,48,zero+b*16);
c=i-a*100-b*10;
Mcs=0;Scs=1;
Disp_Digit(5,0,zero+c*16);
if(sec==1) //秒閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x81);//讀秒
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,40,zero+d*16);//送顯示
Disp_Digit(3,48,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,40,space); //顯示空格
Disp_Digit(3,48,space);
}
}
else
{
d=read_clock(0x81);//讀秒
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
/********************************************************************************/
if(d == 0 && e == 0)
{
flag_sec = 1;//秒標(biāo)志位設(shè)定
}
/********************************************************************************/
Disp_Digit(3,40,zero+d*16);
Disp_Digit(3,48,zero+e*16);
}
if(min==1) //分鐘閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x83);//讀分鐘
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,16,space); //顯示空格
Disp_Digit(3,24,space);
}
}
else
{
d=read_clock(0x83);//讀分鐘
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
/******************************************************************************/
if(d == 0 && e == 0)
{
flag_min = 1;//分標(biāo)志位設(shè)定
}
/******************************************************************************/
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}
if(flag_sec == 1 && flag_min == 1)
{
Beep();//整點報警
flag_sec = 0;//清除標(biāo)志位
flag_min = 0;
}
if(hour==1) //小時閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x85);//讀小時
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(3,56,space); //顯示空格
Mcs=0;Scs=1;
Disp_Digit(3,0,space);
}
}
else
{
d=read_clock(0x85);//讀小時
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}
if(year==1) //年閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x8d);//讀年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,24,space); //顯示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x8d);//讀年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}
if(mon==1) //月閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x89);//讀月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,56,space); //顯示空格
Mcs=0;Scs=1;
Disp_Digit(1,0,space);
}
}
else
{
d=read_clock(0x89);//讀月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}
if(day==1) //日閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x87);//讀日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(1,24,space); //顯示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x87);//讀日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}
if(weekk==1) //星期閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0x8b);//讀星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//寫入星期的漢字
}
else
{
Mcs=1;Scs=0;
Disp_Chinese(3,40,spaces); //顯示空格
}
}
else
{
d=read_clock(0x8b);//讀星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//寫入星期的漢字
}
}
/******************************************************************************/
void Disp2(void)//顯示和閃爍函數(shù)
{
if(Kgb==1) //開關(guān)閃爍標(biāo)志位
{
if(flag==1)
{
if(Bell_Swh == 0)//0為關(guān)
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,guan);//顯示關(guān)
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,kai);//顯示開
}
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,spaces); //顯示空格
}
}
else
{
if(Bell_Swh == 0)//關(guān)
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,guan);
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,kai);
}
}
if(Hourb==1) //時閃爍標(biāo)志位
{
if(flag==1)
{
d=read_clock(0xc3);//讀鬧鐘小時的數(shù)值
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(4,48,zero+d*16);
Disp_Digit(4,56,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(4,48,space); //顯示空格
Disp_Digit(4,56,space);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -