<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      時間可調的定時鬧鐘C51程序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2010-10-4
      /*
      程序效果:時鐘,包括時間可調,定時到了鬧鐘響,用蜂鳴器,本程序已經調試通過
      您可從http://www.51hei.com/ziliao/file/naozhong.rar 下載本程序的代碼.
      喇叭接在p2.0上.端口均可自行更改.
      */
      #include<reg52.h> //頭文件
      #include<intrins.h>
      #define uchar unsigned char//宏定義
      #define uint  unsigned int
      sbit key1=P3^5;   //位聲明
      sbit key2=P3^6;
      sbit key3=P3^7;
      sbit fmq=P2^0;
      uchar code table[]={0x3f,0x06,0x5b,//數碼管顯示的數值
      0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
      0xbf,0x86,0xdb,//帶小數點的數值
      0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
      void jia();   //函數聲明
      void jian();
      uchar table_1[6]; //定義數組,數組內含有6個數值
      uchar table_2[6];
      uchar shi=23,fen=59,miao=50; //顯示初始值
      uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定義全局變量
      uchar flag,flag1,cnt,count;//定義全局變量
      void delay(uchar i)  //延時函數,用于動態掃描數碼管
      {
           uchar x,y;
           for(x=i;x>0;x--)
                for(y=110;y>0;y--);
      }
      void init()   //初始化函數
      {
           TMOD=0X01; //工作方式1
           TH0=(65536-50000)/256; //定時時間為:50ms
           TL0=(65536-50000)%256;
           ET0=1;     //打開定時器
           EA=1;    //開總中斷
           TR0=1;    //啟動定時器
      }
      void display()  //顯示子函數,用于顯示時間數值
      {
           uchar i,j;
           table_1[0]=miao%10;  //分離秒的各位與十位
           table_1[1]=miao/10;
           table_1[2]=fen%10+11;  //分離分的各位與十位
           table_1[3]=fen/10;
           table_1[4]=shi%10+11; //分離時的各位與十位
           table_1[5]=shi/10;
           j=0x7f;    //從秒到時的掃描
           for(i=0;i<6;i++)
           {
            P2=j;
            P0=table[table_1[i]];//顯示數值
            delay(10);
            j=_cror_(j,1);//循環右移
           }
      }
      void display_1() //顯示子函數,用于顯示定時時間
      {
           uchar i,j;
           table_2[0]=miao2%10;  //以下含義同上
           table_2[1]=miao2/10;
           table_2[2]=fen2%10+11;
           table_2[3]=fen2/10;
           table_2[4]=shi2%10+11;
           table_2[5]=shi2/10;
           j=0x7f;
           for(i=0;i<6;i++)
           {
                P2=j;
                P0=table[table_2[i]];
                delay(10);
                j=_cror_(j,1);
           }
      }
      void shijian() //時間子函數
      {
           if(flag>=20)  //判斷是否到一秒
           {
                flag=0;  //到了,則標志位清零
                miao++;  //秒加1
                if(miao>=60) //判斷秒是否到60s
                {
                     miao=0;//到了,則清零
                     fen++; //分加1
                     if(fen>=59) //以下含義同上
                     {
                          fen=0;
                          shi++;
                          if(shi>23)
                               shi=0;
                     }
                }
           }
      }
      void key_scan() //鍵盤掃描子函數
      {
           uchar i;   //定義局部變量
           if(key1==0)
           {
                while(!key1)  //防止掉顯
                {
                     if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
                     {
                          display();
                     }
                     if(cnt==5||cnt==6||cnt==7)
                     {
                          display_1();
                     }
                }
                cnt++; //記下按鍵key1按下的次數
                if(cnt==1) //第一次按下,停止計數
                TR0=0;
                if(cnt==2)   //第二次按下
                {
                     miao1=miao; //保存秒的數值
                     miao=99;//顯示99,表示可以調節秒的數值了
                     for(i=0;i<100;i++)
                      display(); //顯示99
                     miao=miao1; //恢復前一刻秒的數值
                }
                if(cnt==3) //以下含義同上
                {
                     fen1=fen;
                     fen=99;
                     for(i=0;i<100;i++)
                          display();
                     fen=fen1;
                }
                if(cnt==4)
                {
                     shi1=shi;
                     shi=99;
                     for(i=0;i<100;i++)
                          display();
                     shi=shi1;
                }
                if(cnt==5)
                {
                     miao1=miao2;
                     miao2=88;
                     for(i=0;i<100;i++)
                          display_1();
                     miao2=miao1;
                }
                if(cnt==6)
                {
                     fen1=fen2;
                     fen2=88;
                     for(i=0;i<100;i++)
                          display_1();
                     fen2=fen1;
                }
                if(cnt==7)
                {
                     shi1=shi2;
                     shi2=88;
                     for(i=0;i<100;i++)
                          display_1();
                     shi2=shi1;
                }
                if(cnt==8) //第八次按下
                {
                     TR0=1;  //開始計數
                     cnt=0; //按下次數清零
                }
           }
           if(key2==0)   //判斷key2是否按下
           {
                while(!key2)  //防止掉顯
                {
                     if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
                     {
                          display();
                     }
                     if(cnt==5||cnt==6||cnt==7)
                     {
                          display_1();
                     }
                }
                jia();//調用加1的子函數
           }
           if(key3==0)  //判斷key3是否按下
           {
                while(!key3)  //防止掉顯
                {
                     if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
                     {
                          display();
                     }
                     if(cnt==5||cnt==6||cnt==7)
                     {
                          display_1();
                     }
                }
                jian(); //調用減1子函數
           }
      }
      void jia()   //加1子函數
      {
           if(cnt==2) //判斷key1按下的次數是否為2
           {
                miao++; //是,則秒加1
                if(miao>59) //判斷秒是否大于59,是,則秒清零
                     miao=0;
           }
           if(cnt==3) //以下含義同上
           {
                fen++;
                if(fen>59)
                     fen=0;
           }
           if(cnt==4)
           {
                shi++;
                if(shi>23)
                     shi=0;
           }
           if(cnt==5)
           {
                miao2++;
                if(miao2>59)
                     miao2=0;
           }
           if(cnt==6)
           {
                fen2++;
                if(fen2>59)
                     fen2=0;
           }
           if(cnt==7)
           {
                shi2++;
                if(shi2>23)
                     shi2=0;
           }
      }
      void jian()    //減1子函數
      {
           if(cnt==2) //判斷key1按下的次數是否為2,是則秒減1
           {
                miao--;
                if(miao==255)  //判斷秒是否減到255,是,則秒清零
                     miao=59;
           }
           if(cnt==3)
           {
                fen--;
                if(fen==255)
                     fen=59;
           }
           if(cnt==4)
           {
                shi--;
                if(shi==255)
                     shi=23;
           }
           if(cnt==5)
           {
                miao2--;
                if(miao2==255)
                     miao2=59;
           }
           if(cnt==6)
           {
                fen2--;
                if(fen2==255)
                     fen2=59;
           }
           if(cnt==7)
           {
                shi2--;
                if(shi2==255)
                     shi2=23;
           }
      }
      void clock() //鬧鈴子函數
      {
           if(miao2==miao) //顯判斷秒的數值是否相等
                if(fen2==fen)  //是,在判斷分是否相等
                     if(shi2==shi) //是,再判斷時是否相等
                     {
                          flag1=0; //是,則標志位,flag1清零
                          while(!(flag1==100))  //判斷flag1是否到100
                          {
                               fmq=0;  //沒有,則,繼續驅動蜂鳴器響,時間約為:5s
                               shijian(); //調用時間子函數
                               display(); //調用顯示子函數  
                          }
                          fmq=1;//關閉蜂鳴器
                     }
      }
      void main()
      {
           init();//調用初始化子函數
           while(1)
           {
                key_scan(); //調用鍵盤掃描子函數
                shijian(); //時間子函數
                clock(); //鬧鐘子函數
                //顯示子函數
                if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
                {
                     display();
                }
                if(cnt==5||cnt==6||cnt==7)
                {
                     display_1();
                }
           }
      }
      void time0() interrupt 1 //定時器0
      {
           TH0=(65536-50000)/256; //初值50ms
           TL0=(65536-50000)%256;
           flag++;   //標志位
           flag1++;
      }
      Tags:單片機,定時,鬧鐘,程序  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章:
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 亚洲国产精品综合一区在线 | 国产亚洲综合色就色| 一本色道久久88亚洲综合 | 久久久久久综合网天天| 欧洲亚洲综合一区二区三区| 国内精品综合久久久40p| 一本一道久久精品综合| 狠狠激情五月综合婷婷俺| 91精品国产综合久久久久| 久久―日本道色综合久久| 亚洲小说图区综合在线| 久久综合九色综合精品| 色婷婷久久综合中文久久一本| 亚洲综合免费视频| 色综合久久无码五十路人妻| 精品无码综合一区| 国产综合精品久久亚洲 | 丁香六月婷婷综合激情动漫| 天天综合色天天桴色| 伊人久久综合精品无码AV专区| 色综合热无码热国产| 伊人久久婷婷五月综合97色| 久久综合给合久久狠狠狠97色| 综合人妻久久一区二区精品| 久久99亚洲综合精品首页| 久久久久噜噜噜亚洲熟女综合| 色综合婷婷在线观看66| 美腿丝袜亚洲综合| 亚洲精品综合久久| 中文自拍日本综合| 久久久久综合国产| 亚洲国产品综合人成综合网站| 久久一本色系列综合色| 亚洲人成依人成综合网 | 伊人久久亚洲综合影院| 香蕉久久综合精品首页| 自拍三级综合影视| 亚洲五月综合网色九月色| 亚洲国产综合AV在线观看| 国产成人综合野草| 日本道色综合久久影院|