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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

再發一貼:還是關于單片機數碼管設置時某位讓它閃爍的問題

[復制鏈接]
跳轉到指定樓層
樓主
采用老貼各位大神的方法,目前數碼管設置時可以讓它閃爍了,但還不是我想要的功能。我想加或減鍵按下數碼管(含小數點)需要顯示的位(含小數點)閃爍,加減調整時不閃爍,調整完成后閃爍3秒退出。現在的情況是:按下加或減數字會按設定的500ms閃爍,不管調整不調整都一直閃爍到3s退出(主要是閃爍時調數字不方便觀看)。
定時部分單片機源程序如下:

void Timer1Init(void)                //1毫秒@12.000MHz
{
        TMOD &= 0x0F;                     //設置定時器模式
        TMOD |= 0x10;                     //設置定時器模式
        TL1 = 0x18;                       //設置定時初始值
        TH1 = 0xFC;                       //設置定時初始值
        TF1 = 0;                         //清除TF1標志
        ET1=1;               //定時器1開關
        TR1 = 1;                         //定時器1開始計時
}
void timer1_ISR(void) interrupt 3          //定時器中斷1,中斷號:3
{        
  TR1=0;                                   //定時器1計時關閉

//定時設定值3S顯示
  if(T1Cnt != 0)                           //如果T1Cnt不等于0
    {                                
      T1Cnt--;                             //每次進入定時中斷都自減1,直到等于零為止。
    keyflag=1;                           //3S到keyflag=1:讀EEPROM值,顯示3S按鍵調整值               
    }
  else                                      
          {
                keyflag=0;                           //3S到keyflag=0:退出顯示壓力值
          }
        
        if(++SSCnt>=500)                        //閃爍累加>=500ms
                {
                   SSCnt=0;                                 //清0,下一個500ms
               flag =~ flag;                                        //閃爍標志500ms取反一次
                }


顯示部分
if(keyflag)
         {
        switch(wnd)                                //不同窗口顯示按鍵值
              {                        
                case 0: parm1 = keynum1;    break;         //窗口1顯示按鍵值
                case 1: parm2 = keynum2;    break;         //窗口2顯示按鍵值
                case 2: parm3 = keynum3;    break;         //窗口3顯示按鍵值
                case 3: parm4 = keynum4;    break;         //窗口4顯示按鍵值
                default:break;                        
               }        
          }
else
         {
          switch(wnd)                                 //不同窗口顯示壓力值//補氣值
            {                        
                case 0: if(md1==1) parm1 = press-30;         else parm1 = press; if(press<30) parm1=0; break;      //窗口1顯示壓力值
                case 1: if(md1==1) parm2 = press*0.689-30;   else parm2 = press; if(press<30) parm2=0; break;   //窗口2顯示壓力值                case 2: if(md1==1) parm3 = press*0.689-30;   else parm2 = press; if(press<30) parm3=0; break;   //窗口3顯示壓力值
                case 3: if(md1==1) parm4 = press*0.7-30;     else parm2 = press; if(press<30) parm4=0; break;    //窗口4顯示壓力值
                default:break;                        
             }
         }
按鍵部分      keynum1<996本來這里是按小于1000判斷的,但不知道為什么退一位后再加直接跳到104,不能顯示101 102 103,再往回減到101再加可以102,103,如果減到995再加又直接跳到104.    改到小于996后可以正常加減并正常顯示,但不知道為什么?   注:只有三位數碼管,小于100顯示兩位整數加一位小數,超出100,舍棄小數位,顯示三位整數。
void key_Service()
{        
switch(key_scan(160))
    {        
      case 1:
        switch(wnd)       按下按鍵先讀取eeprom,然后判斷加減范圍,現在發現第一次上電后按減鍵會超出范圍,顯示亂碼,只有按加鍵才行,不理                                        解?還有加減后保存到eeprom,每次只能保存一個窗口的值,再選到其它窗口再設置保存后,上次的窗口的值就會復位還原!
        {        
       case 0:T1Cnt=epxs_short; keynum1 = Read_EEPROM_u16(0x0400);
          if(keynum1<996) keynum1 = keynum1+5;else keynum1++;   if(keynum1>1050) keynum1=30;  Save_EEPROM_u16(0x0400, keynum1); break;                                                                                                                                          //范圍:0~150,0~100加5,到100退位顯示100~150加1
       case 1:T1Cnt=epxs_short; keynum2 = Read_EEPROM_u16(0x0500);
         if(keynum2<996) keynum2 = keynum2+5; else keynum2++;   if(keynum2>1003) keynum2=20;  Save_EEPROM_u16(0x0500, keynum2); break;                                                                                                                                
      case 2:T1Cnt=epxs_short; keynum3 = Read_EEPROM_u16(0x0600);
                     keynum3 = keynum3+5;                   if(keynum3>995)  keynum3=20;  Save_EEPROM_u16(0x0600, keynum3); break; //kpa:20-995
      case 3: T1Cnt=epxs_short; keynum4 = Read_EEPROM_u16(0x0700);
        if(keynum4<996) keynum4 = keynum4+5; else keynum4++;   if(keynum4>1003) keynum4=20;  Save_EEPROM_u16(0x0700, keynum4); break;                                                                                //kg/cm:0.2-10.5                                                                                                          }                                                                                        FMQCnt = FMQ_short;        //按鍵聲音觸發,滴一聲就停。                                                                                break;


上面紅字部分都是我需要各路大神的指點,不勝感激!

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

使用道具 舉報

沙發
ID:123289 發表于 2022-4-19 09:03 | 只看該作者
LED各個位閃爍的方法(設8個LED):
1、做一個標記S03,S03每0.3秒求反一次。(在時間中斷中實現,你可以不用0.3秒,改用其它值)
2、用一個字節BX其8個位叫:BX7-BX0(其中的一個叫BXN),分別對應指出哪個LED位正在閃爍。
   例如當BX=10000000(即BX7=1,BX6-0=0)表示只有LED7閃動顯示,其它不閃。BX=10100000,表示LED7,5同時閃。
3、定義一個字節ID,指示掃描正處于顯示哪一個LED,每次時間中斷將ID+1,且ID=0-7。比如ID=4,則顯示LED4,其它的不顯示。
4、定義8個字節RXS7-RXS0,用于存放LED的顯示內容(當然需要你事先做好譯碼工作)。
5、每次中斷只顯示的一個LED(先關全部,再顯示一個),顯示哪一位由ID指出。
6、是否將RXSN(RXS7-RXS0中的一個)送到LED進行顯示,由下列計算決定:BXS=/BXN+BXN*S03
     當BXS=1時,表示顯示,則將RXSN送至LED顯示;

     當BXS=0時,則將不顯示(實際是將黑字送到LED,通常是FFH或00H,也可用“-”)。
例如:ID=2,RXS2=“3”(譯碼后的3),BX2=1(閃動),S03=0。則:BXS=/BX2+BX2*S03=/1+1*0=0,所以不顯示,將FFH送至LED2(無顯)。
     如果送“_”則形成“_”與“3”互閃。
例如:ID=2,RXS2=“3”(譯碼后的3),BX2=1(閃動),S03=1。則:BXS=/BX2+BX2*S03=/1+1*1=1,所以顯示,將“3”送至LED2。
例如:ID=2,RXS2=“3”(譯碼后的3),BX2=0(不閃動),S03=x。則:BXS=/BX2+BX2*S03=/0+1*S03=1,所以顯示,將“3”送至LED2。

如此閃動就操作簡單了:需要哪位閃動,就將哪位對應的BXn置1,即可。不閃就清0。
回復

使用道具 舉報

板凳
ID:686513 發表于 2022-4-22 21:22 | 只看該作者
yzwzfyz 發表于 2022-4-19 09:03
LED各個位閃爍的方法(設8個LED):
1、做一個標記S03,S03每0.3秒求反一次。(在時間中斷中實現,你可以不用 ...

多謝 !
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费三级网 | 国产一二区免费视频 | 国产一区二区三区免费 | 亚洲免费在线 | 国产免费让你躁在线视频 | 亚洲区一区二 | 欧美久久免费观看 | 国产激情小视频 | 99久久精品一区二区毛片吞精 | 一本久久a久久精品亚洲 | 亚洲国产精品人人爽夜夜爽 | 91av视频在线免费观看 | 久久一| 国产成人精品视频在线观看 | 免费一区 | 精品一区二区在线观看 | 天天综合日日夜夜 | 99热.com| 免费欧美| 久久综合色综合 | 精品亚洲一区二区 | 欧美三级视频在线观看 | 国产精品一区二区久久 | 国产精品日韩欧美一区二区三区 | 成人毛片网站 | 国产精品日韩欧美一区二区三区 | 波多野结衣先锋影音 | 999国产精品视频免费 | 成人在线精品 | 欧美精品一区二区三区四区 在线 | 久久久久久久综合 | 天天综合网天天综合色 | 国产成人亚洲精品自产在线 | 久久久精品国产 | 伊人免费在线观看高清 | 国产精品视频在线免费观看 | 久草久草久草 | 色资源站| 粉嫩一区二区三区四区公司1 | 夏同学福利网 | 日本超碰 |