欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機兩路延時時間 存儲的程序問題 [打印本頁]

作者: yong761228    時間: 2019-7-17 12:11
標題: 單片機兩路延時時間 存儲的程序問題
各位師傅您們好,我用STC15W404AS和TM1650編程兩路延時程序,不能存儲兩個時間,哪位師傅幫我看看,怎樣修改,非常感謝。

if(key_timeto)//如果按鍵掃描時間到,此變量在定時器中會被每隔60ms置1一次
                    {                 
                                 key_L = key;
                                     key_timeto = 0; //清0
                                     key = Scan_Key();//讀按鍵
                                     //第一個按鍵按下
                                     if(key == 0x44)   //此鍵值和數據手冊上對應
                                     {
                                      if(key_ok==0) //按鍵按下
                                       {
                                         key_ok = 1;
                                        mode = (mode+1)%2;//切換模式
                                       }
                                     }
                                    //第二個按鍵按下
                                    else if(key == 0x4c)
                                     {        if(mode == 0)//模式0為設置模式
                                       {
                                         if(time2<999)
                                        time2 = (time2+1);//按此鍵加時間
                                       }
                                      if(mode == 1)//模式1為設置模式
                                       {
                                         if(time1<999)
                                        time1 = (time1+1);//按此鍵加時間
                                       }
                                    
                                     timea=time1;
                                        IapEraseSector(0);//保持改變后的時間值
                                    IapProgramByte(0,(timea>>8));
                                    IapProgramByte(1,(uchar)timea);
                                     timeb=time2;
                                        IapEraseSector(1);//保持改變后的時間值
                                    IapProgramByte(1,(timea>>8));
                                    IapProgramByte(2,(uchar)timea);
                                       
                                        }
                                    //第三個按鍵按下
                                   else if(key == 0x54)
                                   {  if(mode == 0)//模式0
                                       {
                                         if(time2>0)
                                         {
                                           time2--;//減時間
                                         }
                                       }
                                   
                                    
                                    if(mode == 1)//模式1
                                    {
                                     if(time1>0)
                                      {
                                       time1--;//減時間
                                      }
                                    }
                                   
                                     timea=time1;
                                        IapEraseSector(0); //保存時間
                                    IapProgramByte(0,(timea>>8));
                                    IapProgramByte(1,(uchar)timea);
                                            timeb=time2;
                                           IapEraseSector(1); //保存時間
                                    IapProgramByte(1,(timeb>>8));
                                    IapProgramByte(2,(uchar)timeb);
                                   }
                                   else
                                   {
                                    key_ok = 0;
                                    }
                  
                  
                   }
        if(update_dis) //30ms到,更新顯示
         {
                        update_dis = 0;
                        TM1650_Set(0x48,0x11);

                        if(stat ==0)
                          {
                            if(mode == 1)//如果是模式1
                              {
                                                TM1650_Set(0x68,CODE[timea/100]);        //顯示
                                                TM1650_Set(0x6A,CODE[timea/10%10]);
                                                TM1650_Set(0x6C,CODE[timea%10]);
                                                
                             }
                           else if(mode == 0)
                              {
                                           TM1650_Set(0x68,CODE[timeb/100]);
                                           TM1650_Set(0x6A,CODE[timeb/10%10]);
                                           TM1650_Set(0x6C,CODE[timeb%10]);
                                          
                              }
                           }
                        else if(stat == 1)//最后倒計時完后顯示的內容
                          {         
                            timea=time1;
                                TM1650_Set(0x68,CODE[timea/100]);
                                TM1650_Set(0x6A,CODE[timea/10%10]);
                                TM1650_Set(0x6C,CODE[timea%10]);         
                                stat=0;         
                          }  
         }

   }


作者: yong761228    時間: 2019-7-17 12:13
初始化:uchar key,key_L,key_ok;
          TM1650_Set(0x48,0x11);//初始化數碼管
          TM1650_Set(0x68,CODE[0]);//初始化后要把顯存先寫數據就能顯示
          TM1650_Set(0x6A,CODE[0]);
          TM1650_Set(0x6C,CODE[0]);
       
          time1 = (IapReadByte(0)<<8)+IapReadByte(1);//讀eeproM中數據,初始化時間初值
          time2 = (IapReadByte(0)<<8)+IapReadByte(2);//讀eeproM中數據,初始化時間初值
          if(time1 >= 999)//如果時間值大于999則是第一次上電
           {
             time1 = 000;//則為默認值
                 time2 = 002;
           }
         Timer0Init();//定時器初始化
         timea = time1;//初始化時間
         timeb = time2;
作者: yong761228    時間: 2019-7-18 13:48
有哪位師傅可以幫忙看看嗎?
作者: cjm82    時間: 2019-7-19 23:22
程序有點長,代碼得一行行看,挺費腦筋的.這里只說說思路吧.
粗略看了下,你這程序大概是利用TM1650讀按鍵,根據輸入來決定具體操作,保存之類的.
既然程序存儲有問題,而且是根據輸入的東西來決定保存,那么影響它不能保存的可能是輸入狀態的那部分代碼沒寫好導致保存的代碼沒有得到執行,或者用于保存的那部分代碼沒寫好.你可以先另建個工程,寫個很簡單的小程序.建立個兩個常量比如 0xa3和0xb4把他保存到FLASH的某個地址里,然后再從這個地址里讀出來,假如讀出來的數字也是0XA3和0xb4,那么就點亮LED1,如果不是 就點亮LED2.這樣很容易驗證你保存的代碼是否有誤.
用類似的辦法,也很容易驗證輸入部分的代碼有無出錯了.
兩者都調試完,整合一下就可以了.
或者會用單步調試的話,用單步調試也是不錯的辦法.(51的單步調試以前學的時候沒怎么研究過,現在也很少用51,所以懶得去研究了)
作者: yong761228    時間: 2019-7-20 06:14
cjm82 發表于 2019-7-19 23:22
程序有點長,代碼得一行行看,挺費腦筋的.這里只說說思路吧.
粗略看了下,你這程序大概是利用TM1650讀按鍵,根 ...

非常感謝師傅,我昨晚已經搞好了,就是根據您的類似方法,我先存儲1個時間,沒問題了,再存儲第二個時間。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1