多功能数字电子钟文档格式.docx

上传人:b****6 文档编号:21124404 上传时间:2023-01-27 格式:DOCX 页数:13 大小:35.01KB
下载 相关 举报
多功能数字电子钟文档格式.docx_第1页
第1页 / 共13页
多功能数字电子钟文档格式.docx_第2页
第2页 / 共13页
多功能数字电子钟文档格式.docx_第3页
第3页 / 共13页
多功能数字电子钟文档格式.docx_第4页
第4页 / 共13页
多功能数字电子钟文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

多功能数字电子钟文档格式.docx

《多功能数字电子钟文档格式.docx》由会员分享,可在线阅读,更多相关《多功能数字电子钟文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

多功能数字电子钟文档格式.docx

sbitA0=P3^0;

sbitA1=P3^3;

sbitA2=P3^2;

sbitA3=P3^1;

bitA7=1;

sbitA5=P3^5;

sbitA6=P3^7;

sbitA4=P1^0;

sbitbusyflag_7=busyflag^7;

/////////////////endoflcdvariable////////////

voidplay();

////////////////////////////////////

voiddelay1(void)

{

ucharz;

for(z=1200;

z>

0;

z--);

}

voiddisplay()

{if(zhi==0)

{if(biao>

=0&

&

biao<

=120)

{

led[1]=hour%10;

led[0]=hour/10;

led[3]=minute%10;

led[2]=minute/10;

}

if(biao>

120&

=130)

led[1]=month%10;

led[0]=month/10;

led[3]=day%10;

led[2]=day/10;

130&

=140)

{led[3]=year%10;

led[2]=year%100/10;

led[1]=year/100%10;

led[0]=year/1000;

}

140&

=150)

led[3]=words[3];

led[2]=words[2];

led[1]=words[1];

led[0]=words[0];

150)biao=0;

}

if(zhi==1)

switch(aln)

case1:

led[1]=hour%10;

led[0]=hour/10;

if(fan==1){led[3]=minute%10;

led[2]=minute/10;

elseled[3]=led[2]=10;

break;

case2:

led[3]=minute%10;

if(fan==1){led[1]=hour%10;

elseled[1]=led[0]=10;

case3:

led[0]=month/10;

led[3]=day%10;

led[2]=day/10;

A7=0;

break;

case4:

A7=1;

led[3]=day%10;

if(fan==1){led[1]=month%10;

case5:

led[1]=year/100%10;

led[0]=year/1000;

if(fan==1){led[3]=year%10;

led[2]=year%100/10;

}elseled[2]=led[3]=10;

case6:

led[3]=year%10;

if(fan==1){led[1]=year/100%10;

}elseled[1]=led[0]=10;

default:

zhi=0;

aln=0;

if(A7==0)

if(fan==1){led[2]=led[3]=10;

play();

voidplay()

unsignedchartemp;

temp=P1&

0x80;

A0=1;

A1=0;

A2=0;

A3=0;

P1=temp|leddata[led[0]];

delay1();

A0=0;

A1=1;

P1=temp|leddata[led[1]];

A2=1;

P1=temp|leddata[led[2]];

A3=1;

P1=temp|leddata[led[3]];

 

voidint1(void)interrupt1

staticunsignedcharn;

n++;

if(zhi==0)

if(n==20)

{n=0;

biao++;

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

minute=0;

hour++;

if(hour==24)

hour=0;

day++;

if(day==31);

day=0;

month++;

if(month==13)

month=0;

year++;

}}}}

if(year==9999)

year=0;

A4=second%2;

else

A4=0;

}}

if(n>

10)

{fan=~fan;

n=0;

TH0=0x3c;

TL0=0x0b0;

voidscan()

if(A5==0)

delay1();

if(A5==0)

{aln++;

zhi=1;

while(A5==0)

play();

if(A6==0)

{

delay1();

if(A6==0)

switch(aln)

{

case1:

minute+=1;

if(minute==60)minute=0;

case2:

hour+=1;

if(hour==24)hour=0;

case3:

day+=1;

if(day==31)day=0;

case4:

month+=1;

if(month==13)month=0;

case5:

year=year+1;

if(year%100>

=99)year=0;

case6:

year=year+100;

if(year>

9900)year=0;

default:

}

while(A6==0)

{play();

fan=0;

}

///////////////ds18b20/////////////////////

//延时函数

voiddelay(unsignedinti)

while(i--);

//初始化函数

voidInit_DS18B20(void)

unsignedcharx=0;

DQ=1;

//DQ复位

delay(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

delay(80);

//精确延时大于480us

//拉高总线

delay(14);

x=DQ;

//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay(20);

//读一个字节

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

i--)

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

delay(4);

return(dat);

//写一个字节

voidWriteOneChar(unsignedchardat)

i>

i--)

DQ=dat&

0x01;

delay(5);

//读取温度

voidReadTemperature(void)

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

//跳过读序号列号的操作

WriteOneChar(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

readdata[0]=ReadOneChar();

readdata[1]=ReadOneChar();

voidTempprocess()//温度转换

unsignedintt;

if((readdata[1]&

0x80)!

=0)

t=readdata[1];

words[0]=0;

t<

<

=8;

t=t|readdata[0];

t=t-1;

t=~t;

t>

=4;

words[1]=t/100+48;

words[0]=((t/10)%10);

words[1]=t%10;

words[2]=11;

words[3]=11;

else

words[0]=1;

words[2]=11;

words[3]=12;

/////////////////////endofds18b20//////////////////

//////////////endoflcd1602///////////////////////

voidmain()

ET0=1;

EA=1;

TMOD=0x01;

TR0=1;

month=0;

day=0;

hour=0;

minute=0;

year=2010;

while

(1)

//if(p10==0)//判断P1.0是否按下

scan();

if(!

(biao>

=150))

{ReadTemperature();

Tempprocess();

display();

程序功能:

0-120秒显示时分,120-130显示月天,130-140,显示年,140-150显示温度,之后就循环.

A按下时进入分调整,每阁500MS灭和亮切换显示按下B就对分进行加,按第2下是对时进行加,按下第3下对天进行加,第4下对月,调整,第5下对年的后两位进行调整,第6下对年的前2位进行调整,按下第7下进行复位,调整时候数码管会显示相应的调整数字

6、总经费预算、资金筹措方式及来源:

需要元件清单,一个STC90C51、2个30PF电容、一个12MHZ晶振、4个共阳数码管、4个9012、4个2K电阻、8个100欧电阻、2个按键、1个DS18B20温度芯片、30uf电解电容、1K电阻、3个按键

7、项目进度安排:

预计2-4个星期,第一个星期写出报告,第二个星期设计出程序,第3-4个星期进行调试

8、研究工作基础及条件:

现有的技术基础大致完成初步设计,温度显示需要进行查阅资料,在进行改装调试

9、项目负责人及主要成员简介:

087101班、刘峰华

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

当前位置:首页 > 经管营销 > 财务管理

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

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