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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7589|回復: 2
打印 上一主題 下一主題
收起左側

這個單片機程序是按鍵設置有問題嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:2724 發表于 2008-7-26 18:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


 void outkey()                       //P1.4
{
 uchar Second;
   if(out==0)        
   {
  delay(10);
  if(out==0)
  {
   
   while(out==0);
   
  }
  count=0;
  //count_up=0;
  //count_down=0;
  hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
  Second=Read1302(DS1302_SECOND);
     write1302(0x8e,0x00);    //寫入允許
  write1302(0x80,Second&0x7f);
  write1302(0x8E,0x80);          //禁止寫入
  done=0;          
   }
}

//**************************************************************************
//升序按鍵******************************************************************
//**************************************************************************
void Upkey()         //P1.2
{   
   // static char count_up=0;
    Up=1;
             if(Up==0)
          {
     delay(10);
     if(Up==0)
     {
      
      //count_up=count_up+1;  / tkey按一次,count就加1
      count++;
      P21=~P21;
      done=1;    //進入調整模式
      while(Up==0);
     
     }
     
        switch(count_up)
        {
      case 1:
          P01=~P01;  
                                  temp=Read1302(DS1302_SECOND);  //讀取秒數
          temp=((temp&0x70)>>4)*10 + (temp&0x0F);
          temp=temp+1;   //秒數加1
                                  up_flag=1;     //數據調整后更新標志
          if((temp)>59)    //超過59秒,清零
                                  {
           temp=0;
          }     
            temp=temp/10*16+temp%10;
          break;
              case 2:
                                  P02=~P02;
          temp=Read1302(DS1302_MINUTE);  //讀取分數
          temp=((temp&0x70)>>4)*10 + (temp&0x0F);
          temp=temp+1;  //分數加1
                                  up_flag=1;
          if(temp>59)          //超過59分,清零
          {
           temp=0;
          }
          temp=temp/10*16+temp%10;
          break;
         case 3:

         case 4:

             
           default:break;
             }
      
     //  while(Up==0);
      }
}


//**********************************************************************
//降序按鍵**************************************************************
//**********************************************************************
void Downkey()        //P1.0
{    
  //static char count_down=0;
  Down=1;
     if(Down==0)
  {
   delay(10);
   if(Down==0)
   {
    //count_down=count_down+1;  / tkey按一次,count就加1
    count++;
   
    done=1;    //進入調整模式
    while(Down==0);
    //P01=~P01;
   }
   switch(count)
   {
    case 1:
                  temp=Read1302(DS1302_SECOND);  //讀取秒數
      temp=((temp&0x70)>>4)*10 + (temp&0x0F);
      temp=temp-1;          //秒數減1
                  down_flag=1;       //數據調整后更新標志
      if(temp==-1)     //小于0秒,返回59秒
      temp=59;
      temp=temp/10*16+temp%10;
      break;

    case 2:
                        temp=Read1302(DS1302_MINUTE);  //讀取分數
      temp=((temp&0x70)>>4)*10 + (temp&0x0F);
      temp=temp-1;  //分數減1
                        down_flag=1;
      if(temp==-1)
      temp=59;      //小于0秒,返回59秒
      temp=temp/10*16+temp%10;
      break;

 

    case 3:

    case 4:
    
    case 5:

   
         default:break;
   }

 

     
     //  while(Down==0);
  }
}

void show_time()   //數碼管顯示程序
{
//  DS1302_GetTime(&CurrentTime);  //獲取時鐘芯片的時間數據
//  Print(CurrentTime.TimeString); //顯示時間
//  GotoXY(0,0);
 // Print(CurrentTime.DateString); //顯示日期
 // GotoXY(15,0);
 // Print(week_value);             //顯示星期
 // GotoXY(11,0);
 // Print("Week"); //在液晶上顯示 字母 week
  delay(400);                 //掃描延時
}

 

//****************************************************
//**************模式選擇按鍵**************************
//****************************************************
void Setkey()
{
  Set=1;
  if(Set==0)     //P1.1
     {
           delay(10);
     if(Set==0)
           { //static char count=0;
    count=count+1;  / tkey按一次,count就加1
    P13=~P13;
    P20=~P20;
    done=1;    //進入調整模式
    while(Set==0);
   }
   }
 

//*****************************************************
//**************按鍵功能執行***************************
//*****************************************************
void keydone()
{        uchar Second;
  /* if(flag==0)    //關閉時鐘,停止計時
         { Write1302(0x8e,0x00); //寫入允許
           temp=Read1302(0x80);
           Write1302(0x80,temp|0x80);
        Write1302(0x8e,0x80); //禁止寫入
           flag=1;
         }*/
         Setkey();                //掃描模式切換按鍵
   switch(count)
   {
  
   case 1:do             //count=1,調整秒
            {
                  
                   outkey();      //掃描跳出按鈕
       Upkey();                //掃描加按鈕
       Downkey();              //掃描減按鈕
       if(up_flag==1||down_flag==1)  //數據更新,重新寫入新的數據
       {
         write1302(0x8e,0x00); //寫入允許
         write1302(0x80,temp); //寫入新的秒數
         write1302(0x8e,0x80); //禁止寫入
         up_flag=0;
         down_flag=0;
      }
                     if(Down!=0&&Up!=0)
                     {
      hide_sec++;
            if(hide_sec>3)
            hide_sec=0;
                     }
      else hide_sec=0;
      show_time();         //顯示數據
      }while(count==2);break; 
    case 2:do             //count=2,調整分
            { P22=~P22;
        hide_sec=0;
        outkey();
        Upkey();
        Downkey();
       if(temp>0x60)
         temp=0;
       if(up_flag==1||down_flag==1)
       {
         write1302(0x8e,0x00); //寫入允許
         write1302(0x82,temp); //寫入新的分數
          write1302(0x8e,0x80); //禁止寫入
          up_flag=0;
          down_flag=0;
      }
                     if(Down!=0&&Up!=0)
                     {
        hide_min++;
            if(hide_min>3)
            hide_min=0;
                     }
      else hide_min=0;
      show_time();
      }while(count==3);break;
  
    case 8: count=0;hide_year=0;  //count8, 跳出調整模式,返回默認顯示狀態
               Second=Read1302(DS1302_SECOND);
                  write1302(0x8e,0x00); //寫入允許
               write1302(0x80,Second&0x7f);
               write1302(0x8E,0x80);          //禁止寫入
      done=0;
    break; //count=7,開啟中斷,標志位置0并退出
    default:break;

   }

}
 void main(void)
{
 flag=1;            //時鐘停止標志
 P2=0x00;    //消隱
// P1=0xff;
 up_flag=0;   //數據是否更新標志
 down_flag=0;  //數據是否更新標志
 Initial_inti_time();  //中斷初始化
 Initial_DS1302();   //時鐘芯片DS_1302初始化
 while(1)
 {  
       // while(done==0)           
 // while(done==1)
          keydone();     //進入調整模式
      { 
            show_time();    //數碼管顯示數據
            flag=0;                 
        Setkey();  //掃描各功能鍵
   }
 }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 雨宫琴音一区二区在线 | 中文字幕在线视频免费观看 | 视频一区二区在线观看 | 国产在线一区观看 | 日韩欧美精品 | 国产精品亚洲成在人线 | 午夜日韩视频 | 国产亚洲www | 久久毛片 | 欧美黑人狂野猛交老妇 | 国产一区二区免费 | 午夜免费福利电影 | 久久99久久98精品免观看软件 | 狠狠爱综合 | 欧美成年视频 | 三级成人片 | 午夜精品| 国产精品久久久久久久久久免费看 | 久久久久中文字幕 | 精品视频在线观看 | 中文字幕日韩欧美 | 国产精品一区在线观看 | 在线中文字幕av | 免费看黄色小视频 | 黑人精品欧美一区二区蜜桃 | 6996成人影院网在线播放 | 日韩视频一区二区三区 | 日韩亚洲视频在线 | 国产欧美精品一区二区三区 | 精品国产91乱码一区二区三区 | 一区二区三区在线观看视频 | 国产剧情一区 | 国产精品免费看 | 亚洲男人网 | 天天干天天玩天天操 | www.99精品 | 国产一二区视频 | 91精品在线播放 | 美国一级片在线观看 | 黄色大片免费网站 | 操操操操操 |