基于51单片机的多功能电子钟设计

  • 格式:docx
  • 大小:18.77 KB
  • 文档页数:18

基于51单片机的多功能电子钟设计

主程序:

#include

#include

#include

Char

miao,shi,fen,day=24,month=12,year1=20,year2=14,cmiao,cshi,cfen,cday,cmonth,cy ear1,cyear2;

char jhmiao,jmiao,jfen;

uint s1num,s4num,s6num;

uchar count,count1,count2;

uint a1,b1,c1,d1,e1,f1,g1;

uint su,tt,mm,m,n,flag=0,flag2=0,flag3=0,flag4=0;

uchar buff[4];

char code dis[]={" mode "};

char code dis1[]={" time "};

char code dis2[]={" date "};

char code dis3[]={" stopwatch "};

char code dis6[]={"1234567"};

charcodedis4[]={*************"};unsigned char pDat[7],pDat1[7];

sbit s1=P1^7; //选择位

sbit s2=P1^0; //数值加

sbit s3=P1^4; //数值减

sbit s4=P1^2; // 闹钟设置

sbit s5=P1^5; // 凤鸣器

sbit s6=P1^6; // 模式选择

sbit s7=P1^3; //闹钟停止鸣叫

sbit s8=P1^1; //启动 sbit s9=P3^6; //温度报警

void main()

{

uint i;

s5=1;

s8=1;

m=0;

n=0;

init();

EX0=1;

//init_com(); //包含了对定时器0的设定while(s8) //初始模式设置

{

moshi();

lcd_pos(0x00);

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

{

write_date(dis[i]);

}

lcd_pos(0x40);

/* for(i=0;i<15;i++)

{

write_date(dis1[i]);

}

*/

}

jhmiao=0;

jmiao=0;

jfen=0;

miao=0; shi=0;

fen=0;

while(1)

{

lcd_pos(0x02);

write_date(0X2e);

lcd_pos(0x04);

write_date(0Xdf);

lcd_pos(0x05);

write_date(0X43);

if(flag3==1)

{

lcd_pos(0x06);

for(i=0;i<10;i++)

{

write_date(dis1[i]);

}

write_sfm(10,miao);

if(miao%2==0)

{

lcd_pos(0x46);

write_date(0X20);

lcd_pos(0x49);

write_date(0X20);

}

else{

lcd_pos(0x46);

write_date(0X3a);

lcd_pos(0x49);

write_date(0X3a); }

write_sfm(7,fen);

write_sfm(4,shi);

if(tt>310)

{

s9=0;

}

if(tt<310)

s9=1;

}

if(flag3==2)

{

lcd_pos(0x40);

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

{

write_date(dis2[i]);

}

lcd_pos(0x0a);

write_date(0X2f);

lcd_pos(0x0d);

write_date(0X2f);

write_sfm2(14,day);

write_sfm2(11,month);

write_sfm2(6,year1);

write_sfm2(8,year2);

if(tt>310) {s9=0;}

else s9=1;

}

if(flag3==3)

{ lcd_pos(0x0a);

write_date(0X2f);

lcd_pos(0x0d);

write_date(0X2f);

count2=(dis4[month-1]+2+day)%7;

lcd_pos(0x4e);

write_date(dis6[count2]);

if(dis6[count2]=='6'||dis6[count2]=='7') {

lcd_pos(0x4d);

write_date(0X57);

}

else{

lcd_pos(0x4d);

write_date(0X20);

}

if(month==12&&day==24) {

lcd_pos(0x4c);

write_date(0X56);

}

else

{

lcd_pos(0x4c);

write_date(0X20);

}

write_sfm(10,miao);

if(miao%2==0)

{

lcd_pos(0x46);

write_date(0X20);

lcd_pos(0x49); write_date(0X20);

}

else{

lcd_pos(0x46);

write_date(0X3a);

lcd_pos(0x49);

write_date(0X3a);

}

write_sfm(7,fen);

write_sfm(4,shi);

write_sfm2(14,day);

write_sfm2(11,month);

write_sfm2(6,year1);

write_sfm2(8,year2);

naozhong();

if(tt>310) {s9=0;} else s9=1;

}

if(flag3==4)

{

lcd_pos(0x06);

for(i=0;i<10;i++)

{

write_date(dis3[i]);

}

lcd_pos(0x46);

write_date(0X3a);

lcd_pos(0x49);

write_date(0X3a);

write_sfm(10,jhmiao);

write_sfm(7,jmiao); write_sfm(4,jfen);

if(s7==0)

{

delay(5);

if(s7==0)

{

flag4++;

while(!s7);

if(flag4==1)

while(1)

{

TR0=0;

if(s7==0)

{

delay(5);

if(s7==0)

while(!s7);

break;

}

}

flag4=0;

TR0=1;

}

}

}

dis_temp(tt);

// dis_temp1(mm);

keyscan();

}

} void int_0() interrupt 0

{

EA=0;

IRcvStr(0xa0,n,&pDat1[0],8);

//mm=pDat1[0];

//mm<<=8; //两个字节组合为1个字 //mm=mm|pDat1[1];

mm=pDat1[0]*100+pDat1[1]*10+pDat1[2];

pDat1[0]=0;

pDat1[1]=0;

pDat1[2]=0;

n=n+8;

EA=1;

}

void moshi()

{

if(s6==0)

{

delay(5);

if(s6==0)

{

s6num++;

while(!s6);

if(s6num==1)

{

flag3 = 1;

lcd_pos(0x41);

write_date(0X31);

}

if(s6num==2)

{ flag3 = 2;

lcd_pos(0x41);

write_date(0X32);

}

if(s6num==3)

{

flag3 = 3;

lcd_pos(0x41);

write_date(0X33);

}

if(s6num==4)

{

flag3=4;

lcd_pos(0x41);

write_date(0X34);

}

if(s6num==5)

{

s6num=0;

lcd_pos(0x41);

write_date(0X35);

}

}

}

}

void naozhong()

{

if(miao==cmiao&&fen==cfen&&cshi==shi&&cday==day&&cmonth==month) {

flag2++;