多功能数字电子钟文档格式.docx
《多功能数字电子钟文档格式.docx》由会员分享,可在线阅读,更多相关《多功能数字电子钟文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
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班、刘峰华