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

时间:2024.3.23

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

效果图:

程序如下:

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

//WHJWNAVY 2011/10/14

#include<reg51.h>

#include<absacc.h>

#define uchar unsigned char

#define uint unsigned int

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

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

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

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

uchar seconde=0;//秒

uchar minite=0;//分

uchar hour=12; //时

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

uchar shi=0;//闹铃功能

uchar fen=0;

uchar bjcs;//报警次数

sbit P1_0=P1^0;                 //second 调整定义

sbit P1_1=P1^1;                 //minite调整定义

sbit P1_2=P1^2;                 //hour调整定义

sbit P1_5=P1^5;     //整点报时

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

sbit P1_6=P1^6;     //调整时

sbit P1_7=P1^7;     //调整分

sbit P1_4=P1^4;     //关闭闹铃

/*函数声明*/

void delay(uint k );  //延时子程序

void time_pro( );      //时间处理子程序

void display( );       //显示子程序

void keyscan( );       //键盘扫描子程序

/*延时子程序*/

void delay (uint k)

{

uchar j;

while((k--)!=0)

   {

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

     {;}

   }

/*时间处理子程序*/

void time_pro(void)

{

 if(seconde==60)

 {

  seconde=0;

  minite++;

  if(minite==60)

  {

   minite=0;

   hour++;

   if(hour==24)

   {

    hour=0;

   }

  }

 }

}

/*显示子程序*/

void display(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);

 }

}

/*键盘扫描子程序*/

void keyscan(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);

 }

}

/*整点报警*/

void zhengdian (void)

 {

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

  {

    P1_5=0;

    delay(1000);

    P1_5=1;

  }

 }

/*定时闹钟*/

void dingshi(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);

  }

 }

}

/*主函数*/

void main(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();  //显示时间

 }

}

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

    {

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

  TL0=0xb0;

  TMOD=0x11;

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

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

  {

   seconde++;//秒+1

   time_pro( ); //时间处理

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

  }      

  }


第二篇:51单片机c语言电子钟


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

效果图:

程序如下:

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

//WHJWNAVY 2011/10/14

#include<reg51.h>

#include<absacc.h>

#define uchar unsigned char

#define uint unsigned int

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

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

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

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

uchar seconde=0;//秒

uchar minite=0;//分

uchar hour=12; //时

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

uchar shi=0;//闹铃功能

uchar fen=0;

uchar bjcs;//报警次数

sbit P1_0=P1^0;                 //second 调整定义

sbit P1_1=P1^1;                 //minite调整定义

sbit P1_2=P1^2;                 //hour调整定义

sbit P1_5=P1^5;     //整点报时

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

sbit P1_6=P1^6;     //调整时

sbit P1_7=P1^7;     //调整分

sbit P1_4=P1^4;     //关闭闹铃

/*函数声明*/

void delay(uint k );  //延时子程序

void time_pro( );      //时间处理子程序

void display( );       //显示子程序

void keyscan( );       //键盘扫描子程序

/*延时子程序*/

void delay (uint k)

{

uchar j;

while((k--)!=0)

   {

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

     {;}

   }

/*时间处理子程序*/

void time_pro(void)

{

 if(seconde==60)

 {

  seconde=0;

  minite++;

  if(minite==60)

  {

   minite=0;

   hour++;

   if(hour==24)

   {

    hour=0;

   }

  }

 }

}

/*显示子程序*/

void display(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);

 }

}

/*键盘扫描子程序*/

void keyscan(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);

 }

}

/*整点报警*/

void zhengdian (void)

 {

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

  {

    P1_5=0;

    delay(1000);

    P1_5=1;

  }

 }

/*定时闹钟*/

void dingshi(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);

  }

 }

}

/*主函数*/

void main(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();  //显示时间

 }

}

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

    {

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

  TL0=0xb0;

  TMOD=0x11;

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

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

  {

   seconde++;//秒+1

   time_pro( ); //时间处理

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

  }      

  }

更多相关推荐:
单片机电子时钟课程设计报告

基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重量轻抗干扰能力强环境要求不高价格低廉可靠性高灵活性好开发较为容易由于具有上述优点...

单片机电子时钟设计报告

科技创新实践[数字时钟设计][用AT89S52单片机设计电子时钟的实验报告]目录单片机的个性化电子钟设计报告1一、设计背景1二、作品介绍1三、设计目的及意义1四、设计要求1五、总体方案设计25.1硬件设计21.…

单片机电子时钟的设计报告

单片机电子时钟的设计目录1引言12设计任务与要求221设计题目222设计要求23系统的功能分析与设计方案331系统的主要功能332系统的设计方案333数码管显示工作原理434电路硬件设计5341设计原理框图53...

51单片机电子时钟设计报告

电子时钟实验报告全部代码在文档末尾51单片机LCD1602液晶显示屏平台下编程实现可直接编译运行目录一实验目的1二实验要求2三实验基本原理2四实验设计分析2五实验要求实现3A电路设计31整体设计32分块设计42...

51单片机电子时钟课程设计报告

第一部分设计任务和要求11单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟可由按键进行调时和1224小时切换12单片机课程设计要求1能实现年月日星期时分秒的显示2能实现调时功能...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

基于单片机的电子时钟课程设计报告

目录一、引言二、设计课题三、系统总体方案四、系统硬件设计1.硬件电路原理图2.元件清单五、系统软件设计1.软件流程图2.程序清单六、系统实物图七、课程设计体会八、参考文献及网站九、附录一.引言单片机因将其主要组…

《单片机原理及应用》电子时钟课程设计报告

课程设计报告20xx20xx学年第一学期题目基于单片机的电子时钟设计系别电子与电气工程系专业通信工程班级学号姓名指导教师完成时间20xx1128评定成绩目录一二三四五六设计的目的3设计的内容与要求3设计方案4硬...

基于51单片机的电子时钟设计

单片机原理及应用课程设计报告专业班级姓名指导教师二0一年月日课程设计任务书一设计题目LED数字显示电子时钟二设计要求1方案论证确定总体电路原理图2元器件选择设计PCB图或用万能电路实验板搭线3绘制程序流程图编写...

单片机电子时钟报告

单片机课程设计报告设计题目电子时钟设计姓名刘雪梅学号20xx2925881专业电气工程及其自动化班级电气学0901日期20xx11221目录摘要3第一章系统设计要求311设计任务312设计要求3第二章硬件总体设...

单片机课程设计论文_电子时钟设计

课程设计论文题目名称电子时钟设计课程名称单片机原理与接口技术学生姓名学号系专业电气工程系电气类指导教师20xx年7月2日课程设计论文任务书1指导教师签字学生签字2课程设计论文评阅表学生姓名学号系别电气工程系专业...

基于51系列单片机的电子时钟设计与制作论文

科学技术学院SCIENCEampTECHNOLOGYCOLLEGEOFNANCHANGUNIVERSITY工程训练报告REPORTONENGINEERINGTRAINING题目基于51系列单片机的电子时钟设计与...

单片机电子时钟设计报告(31篇)