基于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++;