<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        單片機鬧鐘程序及PROTUES仿真文件

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月16日   【字體:

        //提示:k1k2k3k4分別是:小時。分鐘。秒鐘的調節功能。定時時間的顯示功能。k5k6分別是設定第二時間定為0:01:00,啟用或者關閉鬧鐘,

        下面是仿真圖,芯片是用的51單片機: 


        PROTUES工程文件可以從 http://www.thefapper.com/bbs/dpj-24552-1.html 下載

        下面是源程序:
        #include"AT89X52.H"
        #define uchar unsigned char
        uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};   //斷碼
        uchar code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                                                //微碼
        sbit k1=P1^0;
        sbit k2=P1^1;
        sbit k3=P1^2;
        sbit k4=P1^3;
        sbit k5=P1^4;
        sbit jidianqi1=P1^5;
        sbit k6=P1^6;
        sbit led=P1^7;
        uchar k[8]={0,0,16,0,0,16,0,0};      //01234567

        uchar code seg00[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};   //斷碼
        uchar code pos00[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                                                //微碼
        uchar k00[8]={0,0,16,0,0,16,0,0};                                                                            //01234567
        uchar second;
        uchar minite;
        uchar hour;
        uchar num;  
        uchar naozhongqiyongFlag;
         
        uchar second00;
        uchar minite00;
        uchar hour00;
        uchar num00;
        ////////////////////////////////////////////////////////////////////////////////////
        void TimeCompate(void)
          {
        if(naozhongqiyongFlag) 
          {
            if((second00==0)&&(minite00==1)&&(hour00==0))               ///&&(minite00<=2),,,(naozhongqiyongFlag==1)&&,,  led=1
                {
               jidianqi1=0;                          
              }
          else if((second00==5)&&(minite00==42)&&(hour00==0))
                {
               jidianqi1=1;   naozhongqiyongFlag=~naozhongqiyongFlag;    led=~led;                   
              }
          }   
        /* if(hour00!=0)
               { jidianqi1=1;   naozhongqiyongFlag=0;                             
            }
          if(hour00==0) 
               {
              if(minite00<1)
              { jidianqi1=1;   naozhongqiyongFlag=0;                             
              }
             else if(minite00>2)
               { jidianqi1=1;   naozhongqiyongFlag=0;                             
               }
              else
                   {
                   jidianqi1=0;                                 
                }
          }
         
        /*/
        //////////////////////////////////////////

            
        }

         


        //////////////// //延時程序///////////////////////////////
        void delay_5ms(void)         
        {
          uchar i,j;
          for(i=10;i>0;i--)
          for(j=248;j>0;j--)
          ;
        }

        ////////////顯示程序,這個寫法不錯啊。//////////////////////////
        void disp(uchar m,uchar n)    
        {
        P2=pos[n];                          //查表法 把對應的段碼送P2?
        P0=seg[m];                           //查表法 把對應的未碼送P0口
        delay_5ms();
        P2=0x00;
        }


        ////////////顯示程序,這個寫法不錯啊。//////222222222222222/////
        void disp00(uchar x,uchar y)    
        {
        P2=pos00[y];                          //查表法 把對應的段碼送P2?
        P0=seg00[x];                           //查表法 把對應的未碼送P0口
        delay_5ms();
        P2=0x00;
        }

         

        ////////////////////主程序//////////////////////////////
        void main(void)
        {

          uchar j;
          uchar p;
          TMOD=0x01;
          // TH0=-50000/256;
          // TL0=-50000%256;
          TR0=1;
          ET0=1;
          EA=1;
          second=0;
          minite=0;
          hour=0;

          second00=7;
          minite00=8;
          hour00=9;

          jidianqi1=1;
          naozhongqiyongFlag=0;
          led=1;

          while(1)
           {

           TimeCompate();
             if(k1==0)
               {
                 delay_5ms();
                  if(k1==0)        //判斷按鍵是否按下
                    { 
                     second=0;
                 while(k1==0);               
                    }
                }
             if(k2==0)                //判斷按鍵是否按下
                {
                  delay_5ms();
                  if(k2==0)
                    {
                      minite++;
                      if(minite==60)  minite=0;
             while(k2==0);
                    }
                }
             if(k3==0)                    //判斷按鍵是否按下
                {
                  delay_5ms();
                  if(k3==0)
                    {
                      hour++;
                      if(hour==24)  hour=0;
                      while(k3==0)
                           {for(j=0;j<8;j++)              //掃描顯示程序,循環有8次,01234567.
                           disp(k[j],j);               //掃描顯示程序
                 }     
                    }
                }

         //////////////////////////////////////////////////////////////////////
          
           if(k4==0)                    //判斷按鍵是否按下
                {
                  delay_5ms();
                  if(k4==0)
                    {
                      while(k4==0)
               {
                            for(p=0;p<8;p++)
                             disp00(k00[p],p); 
               TimeCompate();
                 ;
                         }    
                    }
                }

            ///////////////////////////////////////////////////////////////////////////////
          if(k5==0)                    //判斷按鍵是否按下
                {
                  delay_5ms();
                  if(k5==0)
                    {
             second00=57;
                      minite00=0;
                      hour00=0;


                      while(k5==0)
               {
                            for(p=0;p<8;p++)
                             disp00(k00[p],p); 
                 ;
                         }    
                    }
                }
        //////////////////////////////////////////////////////////////////////////////////////
        if(k6==0)                    //判斷按鍵是否按下
                {
                  delay_5ms();
                  if(k6==0)
                    {
                     naozhongqiyongFlag=~naozhongqiyongFlag;
             led=~led;
             
                      while(k6==0)
               {
                          ;
                         }    
                    }
                }

           ////////////////////////////////////////////////////////////////////////////////////
              for(j=0;j<8;j++)              //掃描顯示程序,循環有8次,01234567.
              disp(k[j],j);               //掃描顯示程序
          ////////////////////////////////////////////////////////////////////////////////////

              TimeCompate();
          ////////////////////////////////////////////////////////////////////////////////////

         

           
           }
        }
        ////////////////*定時器工作方式*/ /////////////////////////////////
        void t0(void) interrupt 1  /*定時器工作方式*/  using 0   //工作寄存器
        {
          num++;
         
          if(num==20)
            {
              num=0;
              second++;
              if(second==60)
                {
                  second=0;
                  minite++;
                  if(minite==60)
                    {
                      minite=0;
                      hour++;     
                      if(hour==24)
                        {
                          hour=0;
                        }
                     }
                 }
             k[0]=second%10;     //各位
             k[1]=second/10;         //各十位
             k[3]=minite%10;        //各位
             k[4]=minite/10;      //各十位
             k[6]=hour%10;        //各位
             k[7]=hour/10;        //各十位

            }
          num00++;
          if(num00==20)
            {
              num00=0;
              second00++;
              if(second00==60)
                {
                  second00=0;
                  minite00++;
                  if(minite00==60)
                    {
                      minite00=0;
                      hour00++;
                      if(hour00==99)
                        {
                          hour00=0;
                        }
                     }
                 }
                k00[0]=second00%10;         //各位
                      k00[1]=second00/10;         //各十位
                      k00[3]=minite00%10;         //各位
                      k00[4]=minite00/10;         //各十位
                      k00[6]=hour00%10;           //各位
                      k00[7]=hour00/10;           //各十位
             }

         

         
         
           TH0=-50000/256;
           TL0=-50000%256;
           
        }

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮