標(biāo)題:
單片機(jī)萬(wàn)年歷電路圖&PCB圖
[打印本頁(yè)]
作者:
高級(jí)2015
時(shí)間:
2016-12-20 21:01
標(biāo)題:
單片機(jī)萬(wàn)年歷電路圖&PCB圖
0.png
(225.1 KB, 下載次數(shù): 85)
下載附件
2016-12-23 04:19 上傳
0.png
(399.72 KB, 下載次數(shù): 72)
下載附件
2016-12-23 04:19 上傳
萬(wàn)年歷電路圖&PCB圖.zip
(702.87 KB, 下載次數(shù): 36)
2016-12-20 21:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
萬(wàn)年歷(51程序).zip
(64.73 KB, 下載次數(shù): 24)
2016-12-20 21:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ds1302_sec_add 0x80 //秒數(shù)據(jù)地址
#define ds1302_min_add 0x82 //分?jǐn)?shù)據(jù)地址
#define ds1302_hr_add 0x84 //時(shí)數(shù)據(jù)地址
#define ds1302_date_add 0x86 //日數(shù)據(jù)地址
#define ds1302_month_add 0x88 //月數(shù)據(jù)地址
#define ds1302_day_add 0x8a //星期數(shù)據(jù)地址
#define ds1302_year_add 0x8c //年數(shù)據(jù)地址
#define ds1302_control_add 0x8e //控制數(shù)據(jù)地址
#define ds1302_charger_add 0x90
#define ds1302_clkburst_add 0xbe
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E =P2^2;
sbit DS_CLK=P1^0;
sbit DS_IO =P1^1;
sbit DS_RES=P1^2;
sbit Key_Clock=P1^4;
sbit Key_Set=P1^5;
sbit Key_up=P1^6;
sbit Key_down=P1^7;
sbit fengmingqi=P1^3;
sbit DQ =P3^3;
uchar warning_tem[4]=0;
uchar time_buf[10];
uchar time_buf1[10];
uchar time_buf2[20];
uchar temp_buf[7];
uchar taozhong_buf[6]={0};
uchar anjianzhi=0;
uchar time1_jishu1=0;
uchar time_jishu2=0;
///////////////////////
uchar DS18B20_Mode=0;
uchar Clock_Mode=0;
uchar Set_Mode=0;
uchar forbid_Tem=0;
uchar guang_wei=0;
uchar guang_wei2=0;
uchar nao_change_wei=0;
uint fengmingqi_jishi=0;
uchar time_view1=2;
uchar time_view2=0;
void delay_1ms(int delay); //毫秒延遲
void delay_1us(int delay_us); //微妙延遲
void delay(uint i); //18B20所用延遲
void Write_Dat_1602(uchar Dat_1602); //1602數(shù)據(jù)寫(xiě)入
void Write_Com_1602(uchar Com_1602); //1602命令寫(xiě)入
void ds1302_read_time(void); //1302讀取溫度
uchar ds1302_read_byte(uchar addr); //1302單字節(jié)讀取
void ds1302_write_byte(uchar addr, uchar Dat); //1302單字節(jié)寫(xiě)入
void ds1302_write_time(void); //1302時(shí)間寫(xiě)入
void ds1302_read_time(void); //1302時(shí)間讀取
void Init_1602(); //1602初始化
void Init_DS18B20(void); //18b20初始化
uchar ReadOneChar(void); //18b20單字節(jié)讀
void WriteOneChar(unsigned char dat); //18b20單字節(jié)寫(xiě)
void ChangeTemperature(void);
uint ReadTemperature(void); //18b20讀取溫度
void Time_View(); //
void Temp_View(); //
void naozhong_View();
void tiaoshi_view();
void Init_1302()
{
DS_RES=0;
DS_CLK=0;
}
void main()
{fengmingqi=1;
warning_tem[0]=' ';
warning_tem[1]=3;
warning_tem[2]=0;
TMOD=0X11;
ET0=1;
ET1=1;
EA=1;
TH0=(65536-10000)/256; //10ms
TL0=(65536-10000)%256;
TH1=(65536-50000)/256; //50ms
TL1=(65536-50000)%256;
Init_1302();
Init_1602();
Time_View();
TR0=1;
TR1=1;
while(1)
{if(anjianzhi!=0)
{
///////////////////////////////
if(anjianzhi==8&&Set_Mode==0)
{if(Clock_Mode==0)
{Clock_Mode=1;
TR1=0;
guang_wei=0x09;
Write_Com_1602(0X01);
delay_1ms(5);
Write_Com_1602(0x0f);
nao_change_wei=1;
naozhong_View();
}
else
{TR1=1;
Write_Com_1602(0x0c);
Write_Com_1602(0X01);
delay_1ms(5);
Clock_Mode=0;
guang_wei=0x80;
guang_wei2=0;
}
}
/////////////////////////////////////////////////
if(anjianzhi==4)
{
if(Clock_Mode==1)
{
if(guang_wei2==0x0b)
{guang_wei=0x06;nao_change_wei=0;guang_wei2=0;}
if(nao_change_wei>3)
{nao_change_wei++;
guang_wei2++;
}
if(nao_change_wei==3)
{guang_wei2=0x09;
nao_change_wei++;
}
if(nao_change_wei<3)
{
guang_wei+=3;
nao_change_wei++;
}
naozhong_View();
}
else
{
switch(Set_Mode)
{case 0:TR1=0;Write_Com_1602(0X01);delay_1ms(5);Write_Com_1602(0x0f);guang_wei=0x83;Set_Mode++;break;
case 1:guang_wei=0x86;Set_Mode++;break;
case 2:guang_wei=0x89;Set_Mode++;break;
case 3:guang_wei=0x8b;Set_Mode++;break;
case 4:guang_wei=0x80+0x41;Set_Mode++;break;
case 5:guang_wei=0x80+0x44;Set_Mode++;break;
case 6:guang_wei=0x80+0x47;Set_Mode++;break;
case 7:TR1=1;Set_Mode=0;
Write_Com_1602(0x0c);
ds1302_write_time();
break;
}
tiaoshi_view();
}
}
//////////////////////////////////////////////////////////////
if(anjianzhi==2&&(Clock_Mode==1||Set_Mode!=0))
{
if(Clock_Mode==1)
{if(nao_change_wei==1)
{
if(taozhong_buf[0]*10+taozhong_buf[1]<23)
{ taozhong_buf[1]+=1;
if(taozhong_buf[1]==10&&taozhong_buf[0]<2)
{taozhong_buf[1]=0;taozhong_buf[0]+=1;}
}
}
if(nao_change_wei==2)
{ if(taozhong_buf[2]*10+taozhong_buf[3]<59)
taozhong_buf[3]+=1;
if(taozhong_buf[3]==10&&taozhong_buf[2]<6)
{taozhong_buf[3]=0;taozhong_buf[2]+=1;}
}
if(nao_change_wei==3)
{ if(taozhong_buf[4]*10+taozhong_buf[5]<59)
taozhong_buf[5]+=1;
if(taozhong_buf[5]==10&&taozhong_buf[4]<6)
{taozhong_buf[5]=0;taozhong_buf[4]+=1;}
}
if(nao_change_wei==4)
{
if(warning_tem[0]==' ')
warning_tem[0]='-';
else
warning_tem[0]=' ';
}
if(nao_change_wei==5)
{if(warning_tem[1]<10)
warning_tem[1]+=1;
}
if(nao_change_wei==6)
{if(warning_tem[2]<10)
warning_tem[2]+=1;
}
naozhong_View();
}
else
{
switch(Set_Mode)
{
case 1: {if(time_buf2[3]*10+time_buf2[4]<99)
time_buf2[4]+=1;
if(time_buf2[4]==10&&time_buf2[3]<9)
{time_buf2[4]=0;time_buf2[3]+=1;}
break;}
case 2:{if(time_buf2[5]*10+time_buf2[6]<12)
time_buf2[6]+=1;
if(time_buf2[6]==10&&time_buf2[5]<1)
{time_buf2[6]=0;time_buf2[5]+=1;}
break;}
case 3:{if(time_buf2[7]*10+time_buf2[8]<31)
time_buf2[8]+=1;
if(time_buf2[8]==10&&time_buf2[7]<3)
{time_buf2[8]=0;time_buf2[7]+=1;}
break;}
case 4:{if(time_buf2[18]<7)
time_buf2[18]+=1;
break;}
case 5:{if(time_buf2[12]*10+time_buf2[13]<23)
{ time_buf2[13]+=1;
if(time_buf2[13]==10&&time_buf2[12]<2)
{time_buf2[13]=0;time_buf2[12]+=1;}
}
break;
}
case 6:{if(time_buf2[14]*10+time_buf2[15]<59)
{ time_buf2[15]+=1;
if(time_buf2[15]==10&&time_buf2[14]<6)
{time_buf2[15]=0;time_buf2[14]+=1;}
}
break;
}
case 7:{if(time_buf2[17]*10+time_buf2[16]<59)
time_buf2[16]+=1;
if(time_buf2[17]==10&&time_buf2[16]<6)
{time_buf2[17]=0;time_buf2[16]+=1;}
break;
}
}
tiaoshi_view();
}
}
//////////////////////////////////////////////////////////////////
if(anjianzhi==1&&(Clock_Mode==1||Set_Mode!=0))
{if(Clock_Mode==1)
{switch(nao_change_wei)
{case 1:{if(taozhong_buf[1]>0)
taozhong_buf[1]=taozhong_buf[1]-1;
if(taozhong_buf[1]==9&&taozhong_buf[0]>0)
{taozhong_buf[1]-=1;}
break;
}
case 2:{if(taozhong_buf[3]>0)
taozhong_buf[3]=taozhong_buf[3]-1;
if(taozhong_buf[3]==9&&taozhong_buf[2]>0)
{taozhong_buf[3]-=1;}
break;
}
case 3:{if(taozhong_buf[5]>0)
taozhong_buf[5]=taozhong_buf[5]-1;
if(taozhong_buf[5]==9&&taozhong_buf[4]>0)
{taozhong_buf[5]-=1;}
break;
}
case 5:{if(warning_tem[1]>0)
warning_tem[1]-=1;
break;
}
case 6:{if(warning_tem[2]>0)
warning_tem[2]-=1;
break;
}
}
naozhong_View();
}
else
{
switch(Set_Mode)
{case 1:{if(time_buf2[4]>0)
time_buf2[4]-=1;
if(time_buf2[4]==0&&time_buf2[3]>0)
{time_buf2[4]=9;time_buf2[3]-=1;}
break;}
case 2:{if(time_buf2[6]>0)
time_buf2[6]-=1;
if(time_buf2[6]==0&&time_buf2[5]>0)
{time_buf2[6]=9;time_buf2[5]-=1;}
break;}
case 3:{if(time_buf2[8]>0)
time_buf2[8]-=1;
if(time_buf2[8]==0&&time_buf2[7]>0)
{time_buf2[8]=9;time_buf2[7]-=1;}
break; }
case 4:{if(time_buf2[18]>0)
time_buf2[18]-=1; }
case 5:{if(time_buf2[13]>0)
time_buf2[13]-=1;
if(time_buf2[13]==0&&time_buf2[12]>0)
{time_buf2[13]=9;time_buf2[12]-=1;}
break;}
case 6:{if(time_buf2[15]>0)
time_buf2[15]-=1;
if(time_buf2[15]==0&&time_buf2[14]>0)
{time_buf2[15]=9;time_buf2[14]-=1;}
break;}
case 7:{if(time_buf2[17]>0)
time_buf2[17]-=1;
if(time_buf2[17]==0&&time_buf2[16]>0)
{time_buf2[17]=9;time_buf2[16]-=1;}
break;}
}
tiaoshi_view();
}
}
anjianzhi=0;
}
}
}
void naozhong_View()
{uchar i;
Write_Com_1602(0x80);
Write_Dat_1602('C');
Write_Dat_1602('l');
Write_Dat_1602('o');
Write_Dat_1602('_');
Write_Dat_1602('S');
Write_Dat_1602('e');
Write_Dat_1602('t');
Write_Dat_1602(' ');
for(i=0;i<6;i++)
{Write_Dat_1602(taozhong_buf[i]+48);
if(i==1||i==3)
Write_Dat_1602(':');
}
Write_Com_1602(0x80+0x40);
Write_Dat_1602('T');
Write_Dat_1602('e');
Write_Dat_1602('m');
Write_Dat_1602('_');
Write_Dat_1602('S');
Write_Dat_1602('e');
Write_Dat_1602('t');
Write_Dat_1602(' ');
Write_Dat_1602(' ');
Write_Dat_1602(warning_tem[0]);
Write_Dat_1602(warning_tem[1]+48);
Write_Dat_1602(warning_tem[2]+48);
Write_Dat_1602('.');
Write_Dat_1602(warning_tem[3]+48);
Write_Dat_1602(0xdf);
Write_Dat_1602('C');
if(Clock_Mode==1)
{if(guang_wei2==0)
Write_Com_1602(0x80+guang_wei);
else
Write_Com_1602(0x80+0x40+guang_wei2);
}
}
void time0() interrupt 1
{uchar anjian=0;
TR0=0;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(Key_Clock==0||Key_Set==0||Key_up==0||Key_down==0)//有按鍵按下
{
delay_1ms(12);
if(Key_Clock==0||Key_Set==0||Key_up==0||Key_down==0)//有按鍵按下
{anjian=P1&0xf0;
switch(anjian)
{case 0xe0:anjianzhi=8;break; //鬧鐘鍵按下
case 0xd0:anjianzhi=4;break; //設(shè)置鍵按下
case 0xb0:anjianzhi=2;break; //上調(diào)移鍵按下
case 0x70:anjianzhi=1;break; //下調(diào)鍵按下
}
}
}
while(Key_Clock==0||Key_Set==0||Key_up==0||Key_down==0);
TR0=1;
}
void time1() interrupt 3
{uchar m,i;
TR1=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(time1_jishu1<3)
time1_jishu1++;
else
{time1_jishu1=0;
Time_View();
}
if(time_jishu2<13)
time_jishu2++;
else
{time_jishu2=0;
if(forbid_Tem==0)
{
if(DS18B20_Mode==0)
{
ChangeTemperature();
DS18B20_Mode=1;
}
else
{Temp_View();
DS18B20_Mode=0;
if(warning_tem[0]=='-'&&temp_buf[0]!='-')
{fengmingqi=0;fengmingqi_jishi=0;}
if((warning_tem[0]!='-'&&temp_buf[0]!='-')&&(warning_tem[1]*10+warning_tem[2]<=(temp_buf[1]-48)*10+(temp_buf[2]-48)))
{fengmingqi=0;fengmingqi_jishi=0;
}
if((warning_tem[0]=='-'&&temp_buf[0]=='-')&&(warning_tem[1]*10+warning_tem[2]>=(temp_buf[1]-48)*10+(temp_buf[2]-48)))
{fengmingqi=0;fengmingqi_jishi=0;}
} //溫度報(bào)警
}
}
if( taozhong_buf[0]==time_buf2[12]&& //時(shí)間報(bào)警
taozhong_buf[1]==time_buf2[13]&&
taozhong_buf[2]==time_buf2[14]&&
taozhong_buf[3]==time_buf2[15]&&
taozhong_buf[4]==time_buf2[16]&&
taozhong_buf[5]==time_buf2[17])
{fengmingqi=0;
fengmingqi_jishi=0;
}
fengmingqi_jishi++;
if(fengmingqi==0&&fengmingqi_jishi>=200)
{fengmingqi=1;
fengmingqi_jishi=0;
}
TR1=1;
}
void tiaoshi_view()
{uchar i;
Write_Com_1602(0x80);
switch(time_buf2[18])
{case 1:time_buf2[9]='M'-48;time_buf2[10]='O'-48;time_buf2[11]='N'-48;break;
case 2:time_buf2[9]='T'-48;time_buf2[10]='U'-48;time_buf2[11]='E'-48;break;
case 3:time_buf2[9]='W'-48;time_buf2[10]='E'-48;time_buf2[11]='D'-48;break;
case 4:time_buf2[9]='T'-48;time_buf2[10]='H'-48;time_buf2[11]='U'-48;break;
case 5:time_buf2[9]='F'-48;time_buf2[10]='R'-48;time_buf2[11]='I'-48;break;
case 6:time_buf2[9]='S'-48;time_buf2[10]='A'-48;time_buf2[11]='T'-48;break;
case 7:time_buf2[9]='S'-48;time_buf2[10]='U'-48;time_buf2[11]='N'-48;break;
}
for(i=1;i<18;i++)
{ Write_Dat_1602(time_buf2[i]+48);
if(i==4|i==6)
Write_Dat_1602('-');
if(i==8)
Write_Dat_1602(' ');
if(i==11)
{
Write_Com_1602(0x80+0x40);
}
if(i==13||i==15)
Write_Dat_1602(':');
}
Write_Dat_1602(' ');
Write_Dat_1602('T');
Write_Dat_1602('i');
Write_Dat_1602('m');
Write_Dat_1602('_');
Write_Dat_1602('S');
Write_Dat_1602('e');
Write_Dat_1602('t');
if(Set_Mode>0)
Write_Com_1602(guang_wei);
}
void Time_View()
{ uchar i;
ds1302_read_time();
Write_Com_1602(0x80);
for(i=1;i<18;i++)
{ Write_Dat_1602(time_buf2[i]+48);
if(i==4|i==6)
Write_Dat_1602('-');
if(i==8)
Write_Dat_1602(' ');
if(i==11)
{
Write_Com_1602(0x80+0x40);
}
if(i==13||i==15)
Write_Dat_1602(':');
}
if(Set_Mode>0)
Write_Com_1602(guang_wei);
}
void Temp_View()
{uint t;
uchar i;
t=ReadTemperature();
temp_buf[5]=0xdf;
temp_buf[6]='C';
temp_buf[3]='.';
Write_Com_1602(0x80+0x49);
if(t&0x8000)
{temp_buf[0]='-';t=~t;t+=1;}
else
temp_buf[0]=' ';
if(t&0x0001)
temp_buf[4]='5';
else
temp_buf[4]='0';
t=t>>4;
temp_buf[1]=t/10+48;
temp_buf[2]=t%10+48;
for(i=0;i<7;i++)
Write_Dat_1602(temp_buf[i]);
}
////////////////////////////DS1302驅(qū)動(dòng)///////////////////////////
uchar ds1302_read_byte(uchar addr)
{ uchar i;
uchar temp;
DS_RES=1; /*啟動(dòng)DS1302總線*/
addr=addr|0x01; /*最低位置高*/
/*寫(xiě)入目標(biāo)地址:addr*/
for (i=0;i<8;i++)
{
if (addr&0x01)
DS_IO=1;
else
DS_IO=0;
DS_CLK=1;
DS_CLK=0;
addr=addr>>1;
}
/*輸出數(shù)據(jù):temp*/
for(i=0;i<8;i++)
{
temp=temp>>1;
if(DS_IO)
temp|=0x80;
else
temp&=0x7F;
DS_CLK=1;
DS_CLK=0;
}
DS_RES=0; /*停止DS1302總線*/
return temp;
}
void ds1302_write_byte(uchar addr, uchar Dat)
{
uchar i;
DS_RES=1; /*啟動(dòng)DS1302總線*/
/*寫(xiě)入目標(biāo)地址:addr*/
addr=addr&0xFE; /*最低位置零*/
for(i=0;i<8;i++)
{
if(addr&0x01)
DS_IO=1;
else
DS_IO=0;
DS_CLK=1;
DS_CLK=0;
addr=addr>>1;
}
/*寫(xiě)入數(shù)據(jù):Dat*/
for (i=0;i<8;i++)
{
if (Dat&0x01)
DS_IO=1;
else
DS_IO=0;
DS_CLK=1;
DS_CLK=0;
Dat=Dat>>1;
}
DS_RES=0; /*停止DS1302總線*/
}
void ds1302_write_time(void)
{
unsigned char i,tmp;
time_buf1[1]=time_buf2[3]*10;
time_buf1[1]+=time_buf2[4];
time_buf1[2]=time_buf2[5]*10;
time_buf1[2]+=time_buf2[6];
time_buf1[3]=time_buf2[7]*10;
time_buf1[3]+=time_buf2[8];
time_buf1[4]=time_buf2[12]*10;
time_buf1[4]+=time_buf2[13];
time_buf1[5]=time_buf2[14]*10;
time_buf1[5]+=time_buf2[15];
time_buf1[6]=time_buf2[16]*10;
time_buf1[6]+=time_buf2[17];
time_buf1[7]=time_buf2[18];
for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf1[i]/10;
time_buf[i]=time_buf1[i]%10;
time_buf[i]=time_buf[i]+tmp*16;
}
ds1302_write_byte(ds1302_control_add,0x00); //關(guān)閉寫(xiě)保護(hù)
ds1302_write_byte(ds1302_sec_add,0x80); //暫停
ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充電
ds1302_write_byte(ds1302_year_add,time_buf[1]); //年
ds1302_write_byte(ds1302_month_add,time_buf[2]); //月
ds1302_write_byte(ds1302_date_add,time_buf[3]); //日
ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
ds1302_write_byte(ds1302_hr_add,time_buf[4]); //時(shí)
ds1302_write_byte(ds1302_min_add,time_buf[5]); //分
ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒
ds1302_write_byte(ds1302_day_add,time_buf[7]); //周
ds1302_write_byte(ds1302_control_add,0x80); //打開(kāi)寫(xiě)保護(hù)
}
void ds1302_read_time(void)
{
uchar i,tmp;
time_buf[1]=ds1302_read_byte(ds1302_year_add); //年
time_buf[2]=ds1302_read_byte(ds1302_month_add); //月
time_buf[3]=ds1302_read_byte(ds1302_date_add); //日
time_buf[4]=ds1302_read_byte(ds1302_hr_add); //時(shí)
time_buf[5]=ds1302_read_byte(ds1302_min_add); //分
time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//秒
time_buf[7]=ds1302_read_byte(ds1302_day_add); //周
for(i=0;i<8;i++)
{ //BCD處理
tmp=time_buf[i]/16;
time_buf1[i]=time_buf[i]%16;
time_buf1[i]=time_buf1[i]+tmp*10;
}
time_buf2[1]=time_view1;
time_buf2[2]=time_view2;
time_buf2[3]=(time_buf1[1]%100)/10;
time_buf2[4]=time_buf1[1]%10;
time_buf2[5]=(time_buf1[2]%100)/10;
time_buf2[6]=time_buf1[2]%10;
time_buf2[7]=(time_buf1[3]%100)/10;
time_buf2[8]=time_buf1[3]%10;
switch(time_buf1[7])
{case 1:time_buf2[9]='M'-48;time_buf2[10]='O'-48;time_buf2[11]='N'-48;break;
case 2:time_buf2[9]='T'-48;time_buf2[10]='U'-48;time_buf2[11]='E'-48;break;
case 3:time_buf2[9]='W'-48;time_buf2[10]='E'-48;time_buf2[11]='D'-48;break;
case 4:time_buf2[9]='T'-48;time_buf2[10]='H'-48;time_buf2[11]='U'-48;break;
case 5:time_buf2[9]='F'-48;time_buf2[10]='R'-48;time_buf2[11]='I'-48;break;
case 6:time_buf2[9]='S'-48;time_buf2[10]='A'-48;time_buf2[11]='T'-48;break;
case 7:time_buf2[9]='S'-48;time_buf2[10]='U'-48;time_buf2[11]='N'-48;break;
}
time_buf2[18]=time_buf1[7];
time_buf2[12]=(time_buf1[4]%100)/10;
time_buf2[13]=time_buf1[4]%10;
time_buf2[14]=(time_buf1[5]%100)/10;
time_buf2[15]=time_buf1[5]%10;
time_buf2[16]=(time_buf1[6]%100)/10;
time_buf2[17]=time_buf1[6]%10;
}
/////////////////////////LCD1602驅(qū)動(dòng)//////////////////////
void Write_Com_1602(uchar Com_1602)
{LCD_RS=0;
LCD_RW=0;
LCD_E=0;
delay_1us(3);
LCD_E=1;
P0=Com_1602;
delay_1us(3);
LCD_E=0;
}
void Write_Dat_1602(uchar Dat_1602)
{LCD_RS=1;
LCD_RW=0;
LCD_E=0;
delay_1us(3);
LCD_E=1;
P0=Dat_1602;
delay_1us(3);
LCD_E=0;
}
void Init_1602()
{
Write_Com_1602(0X38);
delay_1ms(5);
Write_Com_1602(0X08);
delay_1ms(5);
Write_Com_1602(0X01);
Write_Com_1602(0X06);
delay_1ms(5);
Write_Com_1602(0X0C);
}
//////////////////////18B20驅(qū)動(dòng)/////////////////////
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復(fù)位
delay(8); //稍做延時(shí)
DQ = 0; //單片機(jī)將DQ拉低
delay(80); //精確延時(shí) 大于 480us
DQ = 1; //拉高總線
delay(10);
x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
delay(5);
}
uchar ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號(hào)
dat>>=1;
DQ = 1; // 給脈沖信號(hào)
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
void ChangeTemperature(void)
{Init_DS18B20();
WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
}
uint ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;
return(t);
}
void delay_1us(int delay_us)
{while(delay_us)
{
delay_us--;
}
}
void delay_1ms(int delay)
{int delay1;
for(;delay;delay--)
for(delay1=80;delay1;)
{delay1--;}
}
void delay(uint i)//延時(shí)函數(shù)
{
while(i--);
}
復(fù)制代碼
作者:
admin
時(shí)間:
2017-1-2 03:16
好資料,51黑有你更精彩。!
作者:
gsgsg
時(shí)間:
2017-1-2 11:27
謝謝分享
作者:
quice
時(shí)間:
2017-12-18 21:35
謝謝,這是好資料
作者:
Cookiens
時(shí)間:
2018-1-5 12:00
謝謝分享
作者:
甫生啊啊啊
時(shí)間:
2021-2-1 21:31
Thank you a lot for such sharing and help
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1