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

標(biāo)題: 壓力變化更新顯示,沒(méi)變化鎖定顯示,如何實(shí)現(xiàn)?如網(wǎng)上視頻所示效果 [打印本頁(yè)]

作者: zhth1979    時(shí)間: 2024-5-23 16:44
標(biāo)題: 壓力變化更新顯示,沒(méi)變化鎖定顯示,如何實(shí)現(xiàn)?如網(wǎng)上視頻所示效果
液晶段碼或數(shù)碼管顯示數(shù)據(jù)時(shí),如果顯示的數(shù)據(jù)發(fā)生變化,需要更新顯示,而如果數(shù)據(jù)沒(méi)有變化,則保持當(dāng)前顯示不變,這種效果如何實(shí)現(xiàn)?最好有例程參考一下,謝謝!下面是從網(wǎng)上找到一段視頻,如此視頻顯示效果。
https://www.bilibili.com/video/BV19e4y177FL/

/*******************************************************************************
* 文件名:定時(shí)器0中斷函數(shù)
* 描  述: 定時(shí)1ms
* 功  能:把ADC檢測(cè)給果Press送給顯示變量parm    wnd為4個(gè)窗口。
* 參  數(shù):無(wú)
*******************************************************************************/        
void Timer0Init(void)         //1毫秒@24.000MHz   20MHZ  TL0:7D  TH0:F9     倍頻:19.66MHZ
{        
        TMOD &= 0xF0;                     //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                     //設(shè)置定時(shí)器模式
        TL0 = 0xcd;                       //設(shè)置定時(shí)初始值
        TH0 = 0xfc;                       //設(shè)置定時(shí)初始值               
        TF0 = 0;                         //清除TF0標(biāo)志
        ET0=1;               //定時(shí)器0開(kāi)關(guān)        
        TR0 = 1;                         //定時(shí)器0開(kāi)始計(jì)時(shí)
}
void timer0_ISR(void) interrupt 1       //定時(shí)器中斷0,中斷號(hào):1
{
        TR0=0;                                                 //定時(shí)器0計(jì)時(shí)關(guān)閉        
        
    switch(wnd)
                {                                 
                  case 0:  parm1 = press;                break;      //parm1當(dāng)前壓力值送顯示 ,press是當(dāng)前壓力值。                                                    
                  case 1:  parm2 = press*0.689;      break;                                            
                  case 2:  parm3 = press*0.689;      break;                                                                  
                  case 3:  parm4 = press*0.7;         break;                     
                  default:break;                        
          }                                                                             
        
        TL0 = 0xcd;                                       //設(shè)置定時(shí)初始值
        TH0 = 0xfc;                                       //設(shè)置定時(shí)初始值
        TR0=1;                               //定時(shí)器0計(jì)時(shí)打開(kāi)        
}

/*******************************************************************************
* 文件名:進(jìn)入關(guān)機(jī)
* 描  述:
* 功  能:
* 參  數(shù):無(wú)
*******************************************************************************/
void sleep()
{        
  if(XmCnt==1)                                         //XmCnt定時(shí)500mS檢測(cè)一下是否休眠   
        {                 
           XM_90S_1 = press;                             
           if(XM_90S_1 == XM_90S_2)         //新舊數(shù)據(jù)判斷,如果相等休眠               
                {
                   Low_Power ++;                                        TF0 = 0;                         //加上TF0=0;如果新舊數(shù)據(jù)相等,沒(méi)變化時(shí)關(guān)閉送顯示的定時(shí)器0,這樣可以鎖定顯示.           
                }        
         else
                {                        
                    XM_90S_2 = XM_90S_1;                                             
                    Low_Power = 0;
                     TF0=1;                                        //如果新舊數(shù)據(jù)不相等時(shí),打開(kāi)定時(shí)器0,理論上應(yīng)該對(duì)的,但實(shí)際這時(shí)鎖定顯示就失效了!
                  }
          if(Low_Power > 50)         bg = 0;
          if(Low_Power > 200)
                 {
                        E2prom_write_user();                                        //用戶變量存入flash
                        LCD_display_NONE();                                    //關(guān)閉所有顯示
                        DelayXms(3000);                                 //等待時(shí)間與長(zhǎng)按時(shí)間一致
                        while(sw==0);                                          //等待按鍵松開(kāi)進(jìn)入關(guān)機(jī)        
                        System_CPU_OFF();                                      //關(guān)機(jī)
                 }
         }
}



作者: yaosongjin    時(shí)間: 2024-5-24 14:27
加個(gè)標(biāo)志位進(jìn)行判斷,當(dāng)壓力不變化的時(shí)候就不再刷新顯示,同理當(dāng)檢測(cè)到壓力變化時(shí)把標(biāo)志位清0,繼續(xù)顯示
作者: yzwzfyz    時(shí)間: 2024-5-24 15:02
1、顯示與壓力分開(kāi)寫(xiě)。
2、顯示的內(nèi)容,僅從變XS中取數(shù)據(jù)顯示。無(wú)論是掃描顯示,還是固定顯示,屏上都只顯示XS中值。
3、將首次壓力值送入XS中,以后當(dāng)壓力有變化時(shí),更新XS。無(wú)變化時(shí),什么也不做。
作者: zhth1979    時(shí)間: 2024-5-25 09:09
yzwzfyz 發(fā)表于 2024-5-24 15:02
1、顯示與壓力分開(kāi)寫(xiě)。
2、顯示的內(nèi)容,僅從變XS中取數(shù)據(jù)顯示。無(wú)論是掃描顯示,還是固定顯示,屏上都只 ...

多謝,目前我是顯示和壓力檢測(cè)分開(kāi)寫(xiě)的,壓力數(shù)據(jù)送給顯示變量,這個(gè)過(guò)程是在定時(shí)器中完成的,1ms發(fā)送一次,休眠是新的壓力數(shù)據(jù)和上次數(shù)據(jù)做比較,沒(méi)有變化就休眠,是不是在這個(gè)比較里面放個(gè)標(biāo)志位,如果標(biāo)志位為1發(fā)送上次數(shù)據(jù),為0發(fā)送新數(shù)據(jù)?
作者: zhth1979    時(shí)間: 2024-5-25 10:50
zhth1979 發(fā)表于 2024-5-25 09:09
多謝,目前我是顯示和壓力檢測(cè)分開(kāi)寫(xiě)的,壓力數(shù)據(jù)送給顯示變量,這個(gè)過(guò)程是在定時(shí)器中完成的,1ms發(fā)送一 ...

好像也不行,有這方面的例程嗎?
作者: zhth1979    時(shí)間: 2024-5-25 10:50
yaosongjin 發(fā)表于 2024-5-24 14:27
加個(gè)標(biāo)志位進(jìn)行判斷,當(dāng)壓力不變化的時(shí)候就不再刷新顯示,同理當(dāng)檢測(cè)到壓力變化時(shí)把標(biāo)志位清0,繼續(xù)顯示

好像也不行,有這方面的例程嗎?
作者: yzwzfyz    時(shí)間: 2024-5-27 08:29
正解。
顯示程序判斷你設(shè)定的標(biāo)記即可,記住:用過(guò)之后要將標(biāo)記清0。
作者: yaosongjin    時(shí)間: 2024-5-27 09:27
zhth1979 發(fā)表于 2024-5-25 10:50
好像也不行,有這方面的例程嗎?

加個(gè)記錄數(shù)據(jù)的全局變量,當(dāng)壓力不變時(shí)顯示上次記錄的值
作者: zhth1979    時(shí)間: 2024-5-28 13:53
yzwzfyz 發(fā)表于 2024-5-27 08:29
正解。
顯示程序判斷你設(shè)定的標(biāo)記即可,記住:用過(guò)之后要將標(biāo)記清0。

/*******************************************************************************
* 文件名:定時(shí)器0中斷函數(shù)
* 描  述: 定時(shí)1ms
* 功  能:
* 參  數(shù):無(wú)
*******************************************************************************/       
void Timer0Init(void)         //1毫秒
{       
        TMOD &= 0xF0;                     //設(shè)置定時(shí)器模式
        TMOD |= 0x01;                     //設(shè)置定時(shí)器模式
        TL0 = 0xcd;                       //設(shè)置定時(shí)初始值
        TH0 = 0xfc;                       //設(shè)置定時(shí)初始值               
        TF0 = 0;                         //清除TF0標(biāo)志
        ET0=1;               //定時(shí)器0開(kāi)關(guān)       
        TR0 = 1;                         //定時(shí)器0開(kāi)始計(jì)時(shí)
}
void timer0_ISR(void) interrupt 1       //定時(shí)器中斷0,中斷號(hào):1
{
        TR0=0;                                                 //定時(shí)器0計(jì)時(shí)關(guān)閉       
    switch(wnd)
                {                                
                 case 0:         parm1 = press;            break;      //parm1送數(shù)碼管顯示變量   press=adc獲取的數(shù)據(jù)                                                       
                 -------------
   
               
               default:break;                       
          }                                                                            
               
        TL0 = 0xcd;                                       //設(shè)置定時(shí)初始值
        TH0 = 0xfc;                                       //設(shè)置定時(shí)初始值
        TR0=1;                               //定時(shí)器0計(jì)時(shí)打開(kāi)       
}

休眠判斷     
void sleep()
{       
  if(XmCnt==1)                                         //XmCnt定時(shí)1中  500mS檢測(cè)一下是否休眠   
                {                 
                       XM_90S_1 = press;               
                  if(XM_90S_1 == XM_90S_2)                       
                          {                                       
                                 Low_Power ++;                         
                                }       
      else
                          {       
         XM_90S_2 = XM_90S_1;                                       
                                 Low_Power = 0;
                          }
                if(Low_Power > 200)
                 {
                        E2prom_write_user();                                        //用戶變量存入flash
                        LCD_display_NONE();                                    //關(guān)閉所有顯示
                        DelayXms(3000);                                 //等待時(shí)間與長(zhǎng)按時(shí)間一致
                        while(sw==0);                                          //等待按鍵松開(kāi)進(jìn)入關(guān)機(jī)       
                        System_CPU_OFF();                                      //關(guān)機(jī)
                 }
         }
}
作者: zhth1979    時(shí)間: 2024-5-28 13:58
yzwzfyz 發(fā)表于 2024-5-27 08:29
正解。
顯示程序判斷你設(shè)定的標(biāo)記即可,記住:用過(guò)之后要將標(biāo)記清0。

本來(lái)想在休眠判斷里開(kāi)關(guān)定時(shí)器0,會(huì)出現(xiàn):1.要么可以鎖定顯示,數(shù)據(jù)變化時(shí)不能更新顯示新數(shù)據(jù)。2.要么可以更新新數(shù)據(jù),但不能鎖定顯示。
作者: zhth1979    時(shí)間: 2024-5-28 14:00
yzwzfyz 發(fā)表于 2024-5-27 08:29
正解。
顯示程序判斷你設(shè)定的標(biāo)記即可,記住:用過(guò)之后要將標(biāo)記清0。

if(XmCnt==1)                                         //XmCnt定時(shí)500mS檢測(cè)一下是否休眠   
                {                 
             XM_90S_1 = press;               
                  if(XM_90S_1 == XM_90S_2)                       
                          {       
         TR0=0;                                       
                                 Low_Power ++;                         
                                }       
      else
                          {
    //    TR0=1;               這里注銷掉,可以鎖定顯示,但不能更新顯示新數(shù)據(jù);不注銷可以顯示新數(shù)據(jù),但又不能鎖定顯示。                               
         XM_90S_2 = XM_90S_1;                                       
                                 Low_Power = 0;
                          }
作者: zhth1979    時(shí)間: 2024-5-28 14:00
yaosongjin 發(fā)表于 2024-5-27 09:27
加個(gè)記錄數(shù)據(jù)的全局變量,當(dāng)壓力不變時(shí)顯示上次記錄的值

同上回復(fù)。
作者: xiaobendan001    時(shí)間: 2024-5-28 15:05
上個(gè)數(shù)據(jù)是0,這次數(shù)據(jù)大于0就更新,并且下次比上次數(shù)據(jù)大就更新,下次數(shù)據(jù)變小就不更新。
作者: lzts88    時(shí)間: 2024-5-28 16:02
描述不準(zhǔn)確, 應(yīng)該這樣寫(xiě), 檢測(cè)壓力大于一個(gè)較小的值, 更新顯示, 小于這個(gè)值(對(duì)應(yīng)拿開(kāi), 按我理解壓力應(yīng)該為0), 不更新顯示. 再測(cè)量重復(fù)以上
作者: zhth1979    時(shí)間: 2024-6-1 10:27
xiaobendan001 發(fā)表于 2024-5-28 15:05
上個(gè)數(shù)據(jù)是0,這次數(shù)據(jù)大于0就更新,并且下次比上次數(shù)據(jù)大就更新,下次數(shù)據(jù)變小就不更新。

可能我表達(dá)不夠清楚,下次數(shù)據(jù)變小也要更新,也就是說(shuō)檢測(cè)數(shù)據(jù)有變化都要更新,只有檢測(cè)數(shù)據(jù)穩(wěn)定后不更新并顯示.
作者: zhth1979    時(shí)間: 2024-6-1 10:32
lzts88 發(fā)表于 2024-5-28 16:02
描述不準(zhǔn)確, 應(yīng)該這樣寫(xiě), 檢測(cè)壓力大于一個(gè)較小的值, 更新顯示, 小于這個(gè)值(對(duì)應(yīng)拿開(kāi), 按我理解壓力應(yīng)該為0 ...

可能我表達(dá)不夠清楚,檢測(cè)數(shù)據(jù)有變化都要更新顯示,只有檢測(cè)數(shù)據(jù)穩(wěn)定后不更新并鎖定顯示.
作者: zhth1979    時(shí)間: 2024-6-1 14:15
重新描述一下:液晶段碼或數(shù)碼管顯示數(shù)據(jù)時(shí),如果顯示的數(shù)據(jù)發(fā)生變化,需要更新顯示,而如果數(shù)據(jù)沒(méi)有變化,則保持當(dāng)前顯示不變,這種效果如何實(shí)現(xiàn)?最好有例程參考一下,謝謝!

作者: lzts88    時(shí)間: 2024-6-2 10:56
zhth1979 發(fā)表于 2024-6-1 14:15
重新描述一下:液晶段碼或數(shù)碼管顯示數(shù)據(jù)時(shí),如果顯示的數(shù)據(jù)發(fā)生變化,需要更新顯示,而如果數(shù)據(jù)沒(méi)有變化, ...

你程序就只管檢測(cè), 更新顯示數(shù)據(jù)就達(dá)到你要的效果了. 至于顯示數(shù)據(jù)最后一位或幾位會(huì)跳變, 那是加了軟件濾波的效果, 這濾波好多種, 各有各的優(yōu)點(diǎn)和缺點(diǎn), 你可網(wǎng)上找例子看下. 或者你也可這樣弄. 檢測(cè)一次并顯示后, 隔0.5秒, 或者隔3, 4 秒后再檢測(cè)并顯示下一次, 這樣也可避免最后一位閃.
作者: xiaobendan001    時(shí)間: 2024-6-2 12:56
zhth1979 發(fā)表于 2024-6-1 14:15
重新描述一下:液晶段碼或數(shù)碼管顯示數(shù)據(jù)時(shí),如果顯示的數(shù)據(jù)發(fā)生變化,需要更新顯示,而如果數(shù)據(jù)沒(méi)有變化, ...

這不就是一直顯示嗎?有啥討論的?有變化就變化,沒(méi)變化更新了也沒(méi)變化啊,或者說(shuō)更新了你也看不到,那不就是顯示不變?你自己也沒(méi)搞懂到底想要啥
作者: zhth1979    時(shí)間: 2024-6-4 08:13
xiaobendan001 發(fā)表于 2024-6-2 12:56
這不就是一直顯示嗎?有啥討論的?有變化就變化,沒(méi)變化更新了也沒(méi)變化啊,或者說(shuō)更新了你也看不到,那不 ...

沒(méi)變化的時(shí)候,沒(méi)數(shù)據(jù)進(jìn)來(lái),也要保持顯示最后一次數(shù)據(jù)直至休眠,如視頻效果。https://www.bilibili.com/video/BV19e4y177FL/
作者: zhth1979    時(shí)間: 2024-6-4 08:14
lzts88 發(fā)表于 2024-6-2 10:56
你程序就只管檢測(cè), 更新顯示數(shù)據(jù)就達(dá)到你要的效果了. 至于顯示數(shù)據(jù)最后一位或幾位會(huì)跳變, 那是加了軟件濾 ...

不是濾波的問(wèn)題,ADC不送來(lái)數(shù)據(jù),屏也要顯示最后一次數(shù)據(jù)直至休眠。
作者: lkc8210    時(shí)間: 2024-6-4 17:59
zhth1979 發(fā)表于 2024-6-1 10:32
可能我表達(dá)不夠清楚,檢測(cè)數(shù)據(jù)有變化都要更新顯示,只有檢測(cè)數(shù)據(jù)穩(wěn)定后不更新并鎖定顯示.
  1. ADC_New = ADC_Filter();
  2. if(ADC_NEW < ADC_Old+UpperBuff && ADC_NEW > ADC_Old-LowerBuff)
  3. {
  4.         if(!Stable)
  5.         {
  6.                 Delay++;
  7.                 if(Delay>=StableTime)Stable=1;
  8.         }
  9. }else{
  10.         Delay=0;
  11. }
  12. ADC_Old = ADC_New;
  13. if(!Stable)
  14. {
  15.         ADC_Disp = ADC_New;
  16. }
復(fù)制代碼

作者: zhth1979    時(shí)間: 2024-6-5 12:55
lkc8210 發(fā)表于 2024-6-4 17:59

UpperBuff   LowerBuff   這兩個(gè)代表什么?假如ADC_Filter()獲取到如下幾個(gè)AD值:  10   9  8   7  -------    ADC_NEW == 10,ADC_Old ==9,那  UpperBuff==?    LowerBuff==?
作者: lkc8210    時(shí)間: 2024-6-6 08:56
zhth1979 發(fā)表于 2024-6-5 12:55
UpperBuff   LowerBuff   這兩個(gè)代表什么?假如ADC_Filter()獲取到如下幾個(gè)AD值:  10   9  8   7  ----- ...

UpperBuff和LowerBuff是用來(lái)定義上下限的變量
例如UpperBuff=2,LowerBuff=2
ADC_NEW == 10,ADC_Old ==9
if(10 < (9+2) && 10>(9-2))條件成立
開(kāi)始計(jì)時(shí)(Delay++)
作者: zhth1979    時(shí)間: 2024-6-7 10:22
lkc8210 發(fā)表于 2024-6-6 08:56
UpperBuff和LowerBuff是用來(lái)定義上下限的變量
例如UpperBuff=2,LowerBuff=2
ADC_NEW == 10,ADC_Old = ...

我把您這段代碼放在定時(shí)器里基本功能能實(shí)現(xiàn),但會(huì)出現(xiàn)斷開(kāi)氣源,鎖定顯示的壓力會(huì)跳變。如當(dāng)前測(cè)得50PSI壓力,斷開(kāi)氣源,會(huì)隨機(jī)顯示比50PSI小的一個(gè)數(shù)據(jù)保持顯示。這個(gè)是隨機(jī)的有可能是對(duì)的,有可能比真實(shí)值小。
作者: LotusVirginMary    時(shí)間: 2024-6-7 12:31
可以在每次顯示數(shù)據(jù)之前,先將新數(shù)據(jù)與當(dāng)前顯示的數(shù)據(jù)進(jìn)行比較,只有在數(shù)據(jù)不相同時(shí)才更新顯示。
作者: zhth1979    時(shí)間: 2024-6-14 12:50
LotusVirginMary 發(fā)表于 2024-6-7 12:31
可以在每次顯示數(shù)據(jù)之前,先將新數(shù)據(jù)與當(dāng)前顯示的數(shù)據(jù)進(jìn)行比較,只有在數(shù)據(jù)不相同時(shí)才更新顯示。

理論上是對(duì)的,有例程嗎?




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