久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LED數碼管時鐘程序+電路-時間可調

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年09月06日   【字體:

自上次數碼管時鐘為完善版本(玩了幾天后,懶啊不想動,汗)終于解決了不能進入調試的BUG 


 

不來廢話上程序:
/***************************************************************
* 程序名稱:51單片機數碼管電子鐘+定時鬧鐘  晶振:12.00
* 實驗對象:51hei單片機學習開發板
* 單 片 機:AT89S52或STC89C52  鬧鐘時間:7:10分(程序自定義)
*使用定時器方式,數碼管顯示24小時“00-00-00”(增加中斷進入對時功能
P1為按鍵,P2為段選,P0為位選,      
****************************************************************/
/***使用定時器方式,數碼管顯示24小時“00-00-00”(增加進入對時功能)
P1為按鍵,P2為段選,P0為位選,{鬧鐘暫時不可調待完善})***/ 
#include <reg52.h> 
#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();       /*定時器初始化*/ 
  hour=23;         /*自定義一個初值,方便快速觀察翻轉狀態(可修改)*/ 
  min=59; 
  sec=50; 
 while(1)
 
  {  
   key();   
   time24();  /*分開時間,分別顯示字符*/ 
   //alarm_clock();//鬧鐘函數
   display();    /*調用顯示函數來顯示*/ 
  } 
} 
 
關閉窗口

相關文章

主站蜘蛛池模板: 日韩手机在线看片 | 国产精品久久久久久久久久免费看 | 国产精品久久久爽爽爽麻豆色哟哟 | 成年人免费在线视频 | 久久亚洲精品国产精品紫薇 | 欧美日韩一区二区三区在线观看 | 亚洲欧美视频一区二区 | 三区四区在线观看 | 亚洲天堂一区二区 | 毛片免费看 | 欧美日韩中文字幕在线 | 精品久久一区 | 精品国产乱码久久久久久中文 | 成人久久18免费网站 | 视频一区二区中文字幕 | 亚洲成人播放器 | 日韩午夜影院 | 懂色中文一区二区在线播放 | 91精品久久久久久久久久入口 | 九色.com | 国产高清久久久 | 黄色中文字幕 | 亚洲一区视频在线播放 | 色综合色综合 | 日本又色又爽又黄又高潮 | 久久精彩视频 | 成人免费在线观看视频 | 国产japanhdxxxx麻豆| 自拍偷拍中文字幕 | 日韩成人一区二区 | 久久综合九九 | 综合网在线 | 99tv | 日韩精品一区二区三区 | 精品日韩一区二区三区av动图 | 国产精品久久久久久久久久三级 | 草樱av| 亚洲第一网站 | 91在线观看 | 97福利在线 | 黄视频网址 |