中文版 | English

ҷϢ  点击这里给我发消息  点击这里给我发消息  点击这里给我发消息  ҷϢ

新闻中心
信息搜索
关键字:
范 围:
首页新闻中心 数码管开模
 
LED数码管
新闻来源:深圳市芯斯美电子有限公司    点击数:7618    更新时间:2012/9/11 16:13:24    收藏此页


LED数码管时钟程序+电路-时间可调 

不来废话上程序:
/***************************************************************
* 程序名称:51单片机数码管电子钟+定时闹钟  晶振:12.00
* 实验对象:51hei单片机学习开发板
* 单 片 机:AT89S52或STC89C52  闹钟时间:7:10分(程序自定义)
*使用定时器方式,数码管显示24小时“00-00-00”(增加中断进入对时功能
P1为按键,P2为段选,P0为位选,     
****************************************************************/
/***使用定时器方式,数码管显示24小时“00-00-00”(增加进入对时功能)
P1为按键,P2为段选,P0为位选,{闹钟暂时不可调待完善})***/
#include
#define uchar unsigned char           /*宏定义 */
#define uint unsigned int             /*宏定义 */
uchar hour,hour_h,hour_l;             /*定义小时,小时的高位,小时的低位*/
uchar min,min_h,min_l;                /*分*/
uchar sec,sec_h,sec_l;         /*秒*/
uchar int_num;            /*定时溢出作用标号*/
sbit key_secadd=P1^1;     /*定义了 p1.1为秒增1键,用在调时中断里*/
sbit key_minadd=P1^2;     /*定义了 p1.2为分增1键,用在调时中断里*/
sbit key_houradd=P1^3;    /*定义了 p1.3为时增1键,用在调时中断里*/
sbit key_intime=P1^0;     //按P1.0进入调时
sbit key_quit=P1^5;    //P1.5退出调时
sbit bell=P1^5;     //小喇叭
void delay(uchar time);        /*延时子函数声明*/
void display();                /*显示子函数声明*/
void inter_init();         /*定时器初始化子函数声明*/
void time24();
/****专用数码管显示表***/
uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; /*0x40显示“一”符号*/
uchar code wema[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};
/*小时hour  分min  秒sec*/


//---------------------延时子函数--------------------------------
void delay(uchar time)   /*延时子函数*/
  {
   uchar time_1;
   for (;time>0;time--)
    for (time_1=100;time_1>0;time_1--);
  }


//---------------------初始化T0函数--------------------------
void time0(void) interrupt 1  /*定时器T0服务子程序*/
 {
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  int_num++;
 }


//---------------------定时器函数--------------------------
void inter_init()     /*定时器初始化子函数*/
  {
   EA=1;    /*开总中断*/
   EX0=1;    /*开外部中断0*/
   ET0=1;     /*打开定时器T0*/
   TMOD=0x01; /*工作方式1*/
   TCON = 0x00;   /*触发方式*/
   IP = 0x01;    /*中断优先级别,T0优先*/
   TH0=(65535-50000)/256; /*置初值,大约50ms一个中断 */
   TL0=(65535-50000)%256;
   TR0=1;    /*置位TR0,启动定时器0*/
  }
//---------------------24小时时间自加 --------------------------
 void time24()       /*时间递增*/
  {
   if(int_num==20)  /*值满20,大约就是一秒的时间。*/
    {         /* 其值设为2,则定时时间快10倍,可做毫秒计时*/
     int_num=0;
     sec++;       /*秒值加1*/
     if(sec==60)  /*如果秒值满60,就归0*/
      {
       sec=0;
       min++;  /*分值加1*/
       if(min==60)
        {
         min=0;
         hour++;    /*分值归0,时值加1*/
         if(hour==24)
          {
           hour=0;   /*时值满24归0*/
          }
        } 
      }
    }
  }


//-----------按键调整子函数-------------------------------------
void key(void) //按键调整子函数
 
{
 if(key_intime==0)
  {EA=0;  //      关中断
   sec=0;  //秒归零
 
 while(100) //正确  
 { display();
  if(key_quit==0)
   {
    EA=1;
    break;
   }
  if(key_secadd==0)
   {
    delay(1);
    if(key_secadd==0)
     {
    sec++;
      while(!key_secadd);
      if(sec==60)
       {
        sec=0;
       }
     }
   }
  if(key_minadd==0)
   {
    delay(80);
    if(key_minadd==0)
        {
      min++;
      while(!key_minadd);
      if(min==60)
       {
        min=0;
       }
     }
   }
  if(key_houradd==0)
   {
    delay(80);
    if(key_houradd==0)
     {
      hour++;
      while(!key_houradd);
      if(hour==24)
       {
        hour=0;
       }
      }
    }
  } }
}


//---------------------数码管显示子函数-------------------------------------
void display()  /*数码管显示子函数*/ 
  {
   sec_h=sec/10;     /*求出秒高位需要显示的字符*/
   sec_l=sec%10;   /*求出秒低位需要显示的字符*/
   min_h=min/10;
   min_l=min%10;
   hour_h=hour/10;
   hour_l=hour%10; 
   P2=duma[sec_h];  /*显示秒高位*/
   P0=wema[6];
   delay(10);
 
   P2=duma[sec_l];  /*显示秒低位*/
   P0=wema[7];
   delay(10);
 
   P2=duma[10]; /* “一”符号的显示 */
   P0=wema[5];
   delay(10);
 
   P2=duma[min_h];   /*分*/
   P0=wema[3];
   delay(10);
 
   P2=duma[min_l];
   P0=wema[4];
   delay(10);
 
   P2=duma[10];   /* “一”符号的显示 */
   P0=wema[2];
   delay(10);
 
   P2=duma[hour_h];    /*时*/
   P0=wema[0];
   delay(10);
 
   P2=duma[hour_l];
   P0=wema[1];
   delay(10);
 
  }


 //---------------------主函数--------------------------------
/*void alarm_clock() //闹钟子函数-变频发声
{
   uint i,j,y,m;
   if(hour==00)//时到了00点?
     {
      if(min>=01){m=0;} //分大于或等于01就把m清零,若不成立向下执行
      if(min==00)//到了00分?
        {
         if(m<15)
           {
           do{    //循环-变频
               m++; display();
               for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<24;j++);} //取反/
               for(y=0;y<2000;y++)
               {bell=~bell;for(j=0;j<25;j++);} //取反/
      for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<26;j++);} //取反/
    for(i=0;i<2000;i++)
               {bell=~bell;for(j=0;j<27;j++);} //取反/
             }
           while(m<15); //闹15次结束
          }
       }
     }
}*/


//---------------------主函数--------------------------------
void main()
{
  inter_init();     &

总页数:2  第  1  2    页 

上一篇:74HC595驱动24位数码管   下一篇:数码管
【刷新页面】【加入收藏】【打印此文】 【关闭窗口】
 
粤ICP备18084008号
数码管|数码管厂家|二位数码管|三位数码管|四位数码管|数码管开模-芯斯美电子 2005-2010 版权所有 粤ICP备18084008号
邮件:xsm005@126.com 电话:+86 755-29179255 29171966 传真:+86 755-29179206 地址:深圳市宝安区沙井街道向兴路同富裕工业区恒明珠科技工业园3栋