<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定時鬧鐘程序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-3-31
      #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:51單片機,定時,鬧鐘程序,時鐘程序  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章:
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 国产亚洲欧洲Aⅴ综合一区| 色综合合久久天天综合绕视看| 天堂久久天堂AV色综合| 亚洲综合免费视频| 狠狠色丁香婷婷久久综合蜜芽| 亚洲国产日韩成人综合天堂| 亚洲综合国产一区二区三区| 97色伦图片97综合影院| 色综合天天娱乐综合网| 久久综合丝袜长腿丝袜| 色天天天综合色天天碰| 亚洲AV综合色区无码一区| 日韩综合在线观看| 精品综合久久久久久97超人| 色综合色综合久久综合频道| 伊人久久青草青青综合| 色综合久久中文字幕| 97色婷婷成人综合在线观看| 婷婷久久综合九色综合九七| 亚洲av一综合av一区| 精品无码综合一区| 国产成人综合久久精品尤物| 一本久道综合在线无码人妻| 色综合天天色综合| 青青草原综合久久大伊人导航| 国产成人亚洲综合一区| 91精品一区二区综合在线| 狠狠色丁香婷综合久久| 亚洲AV综合色一区二区三区| 91精品国产91久久综合| 美腿丝袜亚洲综合| 狠狠色狠狠色综合| 色综合色综合色综合色欲| 国产AV综合影院| 久久狠狠一本精品综合网| 九色综合九色综合色鬼| 六月丁香婷婷综合| 色欲综合一区二区三区| 一本久久a久久精品综合夜夜| 91精品国产综合久久四虎久久无码一级 | 亚洲色偷偷综合亚洲AV伊人蜜桃|