整理基于单片机DS1302的时钟万年历带闹钟doc.docx

上传人:b****2 文档编号:575552 上传时间:2022-10-11 格式:DOCX 页数:21 大小:19.13KB
下载 相关 举报
整理基于单片机DS1302的时钟万年历带闹钟doc.docx_第1页
第1页 / 共21页
整理基于单片机DS1302的时钟万年历带闹钟doc.docx_第2页
第2页 / 共21页
整理基于单片机DS1302的时钟万年历带闹钟doc.docx_第3页
第3页 / 共21页
整理基于单片机DS1302的时钟万年历带闹钟doc.docx_第4页
第4页 / 共21页
整理基于单片机DS1302的时钟万年历带闹钟doc.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

整理基于单片机DS1302的时钟万年历带闹钟doc.docx

《整理基于单片机DS1302的时钟万年历带闹钟doc.docx》由会员分享,可在线阅读,更多相关《整理基于单片机DS1302的时钟万年历带闹钟doc.docx(21页珍藏版)》请在冰豆网上搜索。

整理基于单片机DS1302的时钟万年历带闹钟doc.docx

整理基于单片机DS1302的时钟万年历带闹钟doc

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcdws=P2^1;//1602管脚定义

sbitlcden=P2^0;

sbitlcdrs=P2^2;

sbitkey1=P2^3;//闹钟设置键

sbitkey2=P2^4;

sbitkey3=P1^5;//功能键定义

sbitkey4=P1^6;//增大键定义

sbitkey5=P1^7;//减小键定义

ucharshi,fen,miao,ashi,afen,amiao,year,month,day,week;

uchars1num=0,s1num2=0,temp;

bitflag;

floatf_temp;

uinti,d;

ucharcodetable2[]={0x20,0x20,0x2e,0x20,0xdf,0x43};

ucharcodetable[]="20--";

ucharcodetable1[]=":

:

";

sbitds=P1^0;//ds18b20信号线

sbitbeep=P1^4;//蜂鸣器管脚定义

sbitACC_7=ACC^7;//位寻址寄存器定义

sbitSCLK=P1^2;//DS1302时钟信号

sbitDIO=P1^1;//DS1302数据信号

sbitCE=P1^3;

//地址、数据发送子程序

//voiddelay2(uintms)

//{

//uchart;

//while(ms--);for(t=0;t<120;t++);

//}

//voidplaymusic()

//{

//uinti2=0,j2,k2;

//while(jiepai[i2]!

=0||song[i2]!

=0)

//{

//for(j2=0;j2

//{

//beep=~beep;

//for(k2=0;k2

//}

//delay2(10);

//i2++;

//}

//}

voidwrite_1302(ucharaddr,uchardat)

{

uchari,temp;

CE=0;//CE引脚为低,数据传送中止

SCLK=0;//清零时钟总线

CE=1;//CE引脚为高,逻辑控制有效

//发送地址

for(i=8;i>0;i--)//循环8次移位

{

SCLK=0;

temp=addr;

DIO=(bit)(temp&0x01);//每次传输低字节

addr>>=1;//右移一位

SCLK=1;

}

//发送数据

for(i=8;i>0;i--)

{

SCLK=0;

temp=dat;

DIO=(bit)(temp&0x01);

dat>>=1;

SCLK=1;

}

CE=0;

}

//数据读取子程序

ucharRead1302(ucharaddr)

{

unsignedchari,temp,dat1,dat2;

CE=0;

SCLK=0;

CE=1;

//发送地址

for(i=8;i>0;i--)//循环8次移位

{

SCLK=0;

temp=addr;

DIO=(bit)(temp&0x01);//每次传输低字节

addr>>=1;//右移一位

SCLK=1;

}

//读取数据

for(i=8;i>0;i--)

{

ACC_7=DIO;

SCLK=1;

ACC>>=1;

SCLK=0;

}

CE=0;

dat1=ACC;

dat2=dat1/16;//数据进制转换

//十六进制转十进制

dat1=dat1%16;

dat1=dat1+dat2*10;

return(dat1);

}

//初始化DS1302

voidInitial(void)//初始化13022010年09月30日23点58分56秒星期一

{

write_1302(0x8e,0x00);//允许写保护

write_1302(0x80,0x56);//秒位初始化

write_1302(0x82,0x58);//分钟初始化

write_1302(0x84,0x23);//小时初始化

write_1302(0x86,0x30);//日初始化

write_1302(0x88,0x09);//月初始化

write_1302(0x8c,0x10);//年初始化

write_1302(0x8a,0x01);//日期始化

write_1302(0x8e,0x80);//禁止写保护

}

voiddelay(uintz)//延时1ms

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidwrite_com(ucharcom)//1602写命令

{

lcdrs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidwrite_data(uchardate)//1602写数据

{

lcdrs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voiddsreset(void)//DS18B20,初始化函数

{

uinti;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

bittempreadbit(void)//读1位数据函数

{

uinti;

bitdat;

ds=0;i++;

ds=1;i++;i++;//i++起到延时作用

dat=ds;

i=8;while(i>0)i--;

return(dat);

}

uchartempread(void)//读一个字节数据函数

{

uchari,j,dat;

dat=0;

for(i=1;i<=8;i++)

{

j=tempreadbit();

dat=(j<<7)|(dat>>1);

}

return(dat);

}

voidtempwritebyte(uchardat)//向DS18B20写一个字节数据函数

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//写1

{

ds=0;

i++;i++;

ds=1;

i=8;while(i>0)i--;

}

else

{

ds=0;//写0

i=8;while(i>0)i--;

ds=1;

i++;i++;

}

}

}

voidtempchange(void)//DS18B20开始获取温度并转换

{

dsreset();

delay

(1);

tempwritebyte(0xcc);

tempwritebyte(0x44);

}

uintget_temp()//获取温度

{

uchara,b;

dsreset();

delay

(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread();//读高8位

b=tempread();//读低8位

temp=b;

temp<<=8;//两个字节组合成1个字节

temp=temp|a;

f_temp=temp*0.0625;

temp=f_temp*10+0.5;

f_temp=f_temp+0.05;//温度在寄存器中为12位,分辨率为0.0625^

returntemp;

}

voiddisplay(ucharaddr,uchardat)

{

write_com(0x80+0x40+addr);

write_data(0x30+dat);

delay(5);

}

voiddis_temp(uintt)

{

uchari;

i=t/100;

display(10,i);

i=t%100/10;

display(11,i);

i=t%100%10;

display(13,i);

}

voidinit()//初始化程序

{

ucharnum;

flag=1;

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)

{

write_data(table[num]);

delay(5);

}

write_com(0x80+0x40);

for(num=0;num<8;num++)

{

write_data(table1[num]);

delay(5);

}

write_com(0x80+0x40+10);

for(num=0;num<6;num++)

{

write_data(table2[num]);

delay(10);

}

}

voiddi()//蜂鸣器响函数

{

beep=0;

delay(100);

beep=1;

}

voidwrite_sfm(ucharadd,uchardate)

{

ucharshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);

write_data(0x30+shi);

write_data(0x30+ge);

}

voidwrite_nyrz(ucharadd,uchardate)//显示年,月,日,周

{

ucharshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+add);

write_data(0x30+shi);

write_data(0x30+ge);

}

voiddisplay_week(ucharwe)

{

write_com(0x80+12);

switch(we)

{

case1:

write_data('

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1