51单片机c语言电子钟已加入调时闹铃整点报时功能.docx

上传人:b****7 文档编号:9658345 上传时间:2023-02-05 格式:DOCX 页数:11 大小:129.01KB
下载 相关 举报
51单片机c语言电子钟已加入调时闹铃整点报时功能.docx_第1页
第1页 / 共11页
51单片机c语言电子钟已加入调时闹铃整点报时功能.docx_第2页
第2页 / 共11页
51单片机c语言电子钟已加入调时闹铃整点报时功能.docx_第3页
第3页 / 共11页
51单片机c语言电子钟已加入调时闹铃整点报时功能.docx_第4页
第4页 / 共11页
51单片机c语言电子钟已加入调时闹铃整点报时功能.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

51单片机c语言电子钟已加入调时闹铃整点报时功能.docx

《51单片机c语言电子钟已加入调时闹铃整点报时功能.docx》由会员分享,可在线阅读,更多相关《51单片机c语言电子钟已加入调时闹铃整点报时功能.docx(11页珍藏版)》请在冰豆网上搜索。

51单片机c语言电子钟已加入调时闹铃整点报时功能.docx

51单片机c语言电子钟已加入调时闹铃整点报时功能

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

效果图:

 

程序如下:

//51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

//WHJWNAVY2011/10/14

 

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/*七段共阴管显示定义*/

//此表为LED的字模,共阴数码管0-9 -

ucharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制

/*定义并初始化变量*/

ucharseconde=0;//秒

ucharminite=0;//分

ucharhour=12;//时

ucharmstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1

ucharshi=0;//闹铃功能

ucharfen=0;

ucharbjcs;//报警次数

sbitP1_0=P1^0;                //second调整定义

sbitP1_1=P1^1;                //minite调整定义

sbitP1_2=P1^2;                //hour调整定义

sbitP1_5=P1^5;     //整点报时

sbitP1_3=P1^3;     //闹铃功能,调整时间

sbitP1_6=P1^6;     //调整时

sbitP1_7=P1^7;     //调整分

sbitP1_4=P1^4;     //关闭闹铃

/*函数声明*/

voiddelay(uintk); //延时子程序

voidtime_pro();     //时间处理子程序

voiddisplay();      //显示子程序

voidkeyscan();      //键盘扫描子程序

/*延时子程序*/

voiddelay(uintk)

{

ucharj;

while((k--)!

=0)

  {

   for(j=0;j<125;j++)

    {;}

  }

/*时间处理子程序*/

voidtime_pro(void)

{

 if(seconde==60)

 {

  seconde=0;

  minite++;

  if(minite==60)

  {

   minite=0;

   hour++;

   if(hour==24)

   {

    hour=0;

   }

  }

 }

}

/*显示子程序*/

voiddisplay(void)

{

 if(P1_3==1)

 {

 P2=0XFE;

 P0=dispcode[seconde%10];//秒个位

 delay

(1);

 P2=0XFD;

 P0=dispcode[seconde/10];//秒十位

 delay

(1);

 P2=0XFB;

 P0=dispcode[10];//间隔符-

 delay

(1);

 P2=0XF7;

 P0=dispcode[minite%10];//分个位

 delay

(1);

 P2=0XEF;

 P0=dispcode[minite/10];//分十位

 delay

(1);

 P2=0XDF;

 P0=dispcode[10];//间隔符-

 delay

(1);

 P2=0XBF;

 P0=dispcode[hour%10];//时个位

 delay

(1);

 P2=0X7F;

 P0=dispcode[hour/10];//时十位

 delay

(1);

 }

}

/*键盘扫描子程序*/

voidkeyscan(void)

{

 if(P1_0==0)//秒位的调整

 {

  delay(30);

  if(P1_0==0)

  {

   seconde++;

   if(seconde==60)

   {

    seconde=0;

   }

  }

  delay(250);

 }

 if(P1_1==0)//分位的调整

 {

  delay(30);

  if(P1_1==0)

  {

   minite++;

   if(minite==60)

   {

    minite=0;

   }

  }

  delay(250);

 }

 if(P1_2==0)//时位的调整

 {

  delay(30);

  if(P1_2==0)

  {

   hour++;

   if(hour==24)

   {

    hour=0;

   }

  }

  delay(250);

 }

}

/*整点报警*/

voidzhengdian(void)

 {

  if((seconde==0)&(minite==0))//整点报时

  {

    P1_5=0;

    delay(1000);

    P1_5=1;

  }

 }

/*定时闹钟*/

voiddingshi(void)

{

 if(P1_3==0)       //按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。

 {

  P2=0XFE;

  P0=dispcode[0];//秒个位

  delay

(1);

  P2=0XFD;

  P0=dispcode[0];//秒十位

  delay

(1);

  P2=0XFB;

  P0=dispcode[10];//间隔符-

  delay

(1);

  P2=0XF7;

  P0=dispcode[fen%10];//分个位

  delay

(1);

  P2=0XEF;

  P0=dispcode[fen/10];//分十位

  delay

(1);

 

  P2=0XDF;

  P0=dispcode[10];//间隔符-

  delay

(1);

 

  P2=0XBF;

  P0=dispcode[shi%10];//时个位

  delay

(1);

  P2=0X7F;

  P0=dispcode[shi/10];//时十位

  delay

(1);

 }

 if(P1_6==0)//设定时

 {

  delay(30);

  if(P1_6==0)

  {

   shi++;

   if(shi==24)

   {

    shi=0;

   }

  }

  delay(250);

 }

 if(P1_7==0)//设定分

 {

  delay(30);

  if(P1_7==0)

  {

   fen++;

   if(fen==60)

   {

    fen=0;

   }

  }

  delay(250);

 }

 if((hour==shi)&(minite==fen)&(seconde==0))//闹铃时间到,报警十次。

 {

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

  {

   P1_5=0;

   delay(500);

   P1_5=1;

   delay(500);

  }

 }

}

/*主函数*/

voidmain(void)

{

 P1=0XFF;

 TMOD=0x11;//time0为定时器,方式1

 TH0=0x3c;   //预置计数初值,50ms

 TL0=0xb0;

 EA=1;  //总中断开

 ET0=1;  //允许定时器0中断

 TR0=1;  //开启定时器0

   while

(1)

 {  

  keyscan(); //按键扫描

  dingshi();//定时闹钟

  zhengdian();//整点报时

  display(); //显示时间

 }

}

voidtimer0(void)interrupt1 //定时器0方式1,50ms中断一次

   {

  TH0=0x3c;  //手动加载计数脉冲次数

  TL0=0xb0;

  TMOD=0x11;

  mstcnt++;  //用于计算时间,每隔50ms加1

  if(mstcnt==20)//mstcnt满20即为一秒

  {

   seconde++;//秒+1

   time_pro();//时间处理

   mstcnt=0;//对计数单元的清零,重新开始计数

  }      

  }

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

当前位置:首页 > 人文社科 > 广告传媒

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

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