专栏中心

EEPW首页 > 专栏 > C51定时闹钟程序

C51定时闹钟程序

发布人:0750long 时间:2010-02-03 来源:工程师 发布文章
C51定时闹钟程序

 

 

//定时闹钟
//声音输出P3.7
//
//


#include <reg52.h>
#define unchar unsigned char
sbit sound="P3"^7;
sbit push="P3"^5;   //暂停,继续键
unchar ssadd1;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,
                               0x99,0x92,0x82,0xF8,
                               0x80,0x90,0Xbf,0xFF};      //数码管字形表,0-9,-,灭
unchar cnt;             //定时中断计数器
unchar timeadd1=0;      //时间加1判断
unchar alarmtime;       //闹钟时间长度
unchar  bjss="5";     //以下分别为闹钟秒,分钟,小时变量
unchar  bjmm="0";
unchar  bjhh="0";
unchar ss="0";   //实际秒变量
unchar mm="0";   //实际分钟变量
unchar hh="0";   //实际小时变量
unchar t="3";   //延时常数
#define SSL  0x7f    //秒低位段码地址
#define SSH  0XBF    //秒高位段码地址
#define _L   0XFB    //8位数码管显示,分钟与秒之间的-分隔符
#define MML  0XEF    //以下同
#define MMH  0XF7
#define _H   0XDF    //8位数码管显示,小时与分钟之间的-分隔符
#define HHL  0XFD
#define HHH  0XFE

 

void add1(unchar i)   //时间加1函数
{
 while(i>0)
    { i--;
  ss++;
     timeadd1--;
     if(ss==60)
       {ss=0;
        mm++;
       if(mm==60)
       {mm=0;
        hh++;
        if(hh==24)
           hh="0";
           }
    }
  }
 }
void delay(unchar x)   //延时函数
{
   unchar i;
    for(i=0;i<=x;i++);
}
 
void display(void)     //显示函数
{
         P1 =dispcode[ss%10];
         P2 =SSL;          //显示秒低位
         delay(t);
         P1=dispcode[ss/10];
         P2=SSH;          //显示秒高位
         delay(t);

         P1 =dispcode[10];
         P2=_L;
         delay(t);

         P1 =dispcode[mm%10];
         P2=MML;          //显示分钟低位
  delay(t);
         P1=dispcode[mm/10];
         P2=MMH;          //显示分钟高位
         delay(t);

  P1 =dispcode[hh%10];
         P2=HHL;
   delay(t);
         P1=dispcode[hh/10];
  P2=HHH;
  delay(t);

  P1 =dispcode[10];
         P2=_H;
   delay(t);
}
void baojingsheng(void)  //闹钟音产生函数
{ unchar m="800";
   while(m>300)
    { sound=~sound;
 add1(timeadd1);
 display();
    m--;
    }
   while(m>0)
  {sound=~sound;
      add1(timeadd1);
   display();
      delay(15);
   m--;
  }
 }


void alarm(unchar i)    //闹钟定时函数,定时长度为alarmtime
{ if((hh==bjhh)&&(mm==bjmm)&&(ss==bjss))
   {
    while(i>0)
     {baojingsheng();
      i--;
    }
   }
}

void main(void)
{  cnt="20";
   timeadd1=0;
   TMOD="0X01";
   TL0=((65536-50000)%256);
   TH0=((65536-50000)/256);
   EA="1";
   ET0=1;
   TR0=1;
   alerttime="20";
while(1)
  {
  add1(timeadd1);
  display();
  alarm(alarmtime);
   }
}


void time0  (void) interrupt 1   //定时中断函数
{ cnt--;
  TL0+=(65536-50000)%256;
  TH0+=(65536-50000)/256;
  if(cnt==0)
  {cnt=20;
  timeadd1++;
   }
}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

中国半导体设备厂商再获资本加码

EDA/PCB 2026-03-30

\"zangchao\"的CAN通信协议与USART通信协议互相转换视频

视频 2012-05-29

60V、98% 效率、四开关同步降压-升压型控制器 IC 可驱动 LED、调节电压并给电池充电

日本三大半导体厂商将整合,功率半导体领域迎变局

2012英特尔杯大学生电子设计竞赛嵌入式系统专题邀请赛开赛

视频 2012-05-31

Google AI压缩技术引发市况反转? 两岸存储器业界:大缺货潮恐延续更久

Cirrus Logic CS161X LED 控制器调光兼容性演示

技术术语

资源下载 2007-02-09

台积电遇75年来罕见现象 外界忧引爆AI供应链新危机

模拟芯片产业迎涨价潮,AI需求推动市场变革

马瑞利将在2026北京车展发布20余项创新成果 推进本土化、成本效率优势与快速交付

三星罢工危机延烧晶圆代工 DDIC、PMIC海啸

Cirrus Logic 推出采用创新数字技术的TRIAC调光LED驱动器IC产品

复旦微电2025年营收39.82亿元,FPGA产品线营收亮眼

泰克发布高效电源测试白皮书: 以95.5%回馈效率重塑AI数据中心测试标准

测试测量 2026-03-30

三安集团实控人被调查,公司回应:经营不受影响

光电显示 2026-03-30
更多 培训课堂
更多 焦点
更多 视频

技术专区