<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                【114.1 動態掃描的數碼管顯示小數點。】 ![](https://img.kancloud.cn/d1/98/d19803e327fa494dce4ab72902e02129_285x371.png) 上圖114.1.1 數碼管 如上圖,小數點的段碼是h,對應單片機的P0.7口。數碼管編碼轉換表(類似字庫)的11個以字節為單位的數據,把它們從十六進制轉換成二進制后,可以發現第7位(對應P0.7口)都是0。因此,從轉換表里取數據后,得到的數據默認是讓數碼管的小數點不顯示的。如果想顯示這個小數點,就需要用到“或(|)”語句操作,把第7位改為1。比如,本節程序需要顯示“1.234”這個帶小數點的數值,代碼如下: \#include "REG52.H" \#define SCAN\_TIME 1 void T0\_time(); void SystemInitial(void) ; void Delay(unsigned long u32DelayTime) ; void PeripheralInitial(void) ; void DisplayScan(void); sbit P1\_0=P1^0; sbit P1\_1=P1^1; sbit P1\_2=P1^2; sbit P1\_3=P1^3; //轉換表,里面的11個數據,轉換成二進制后,第7位數據都是0默認不顯示小數點 code unsigned char Cu8DigTable\[\]= { 0x3f, //0 序號0 0x06, //1 序號1 0x5b, //2 序號2 0x4f, //3 序號3 0x66, //4 序號4 0x6d, //5 序號5 0x7d, //6 序號6 0x07, //7 序號7 0x7f, //8 序號8 0x6f, //9 序號9 0x00, //不顯示 序號10 }; volatile unsigned char vGu8ScanTimerFlag=0; volatile unsigned int vGu16ScanTimerCnt=0; volatile unsigned char vGu8Display\_Righ\_4=1; //右起第4位數碼管顯示的變量。這里顯示“1” volatile unsigned char vGu8Display\_Righ\_3=2; //右起第3位數碼管顯示的變量。這里顯示“2” volatile unsigned char vGu8Display\_Righ\_2=3; //右起第2位數碼管顯示的變量。這里顯示“3” volatile unsigned char vGu8Display\_Righ\_1=4; //右起第1位數碼管顯示的變量。這里顯示“4” /\* 注釋一: \* vGu8Display\_Righ\_Dot\_4,vGu8Display\_Righ\_Dot\_3,vGu8Display\_Righ\_Dot\_2, \* vGu8Display\_Righ\_Dot\_1,這四個全局變量用來傳遞每位數碼管是否需要顯示它的小數點,如果是1 \* 代表需要顯示其小數點,如果是0則不顯示小數點。這四個變量作為對上面應用層調用的接口變量。 \*/ volatile unsigned char vGu8Display\_Righ\_Dot\_4=1; //右起第4位數碼管的小數點。1代表打開顯示。 volatile unsigned char vGu8Display\_Righ\_Dot\_3=0; //右起第3位數碼管的小數點。0代表關閉顯示。 volatile unsigned char vGu8Display\_Righ\_Dot\_2=0; //右起第2位數碼管的小數點。0代表關閉顯示。 volatile unsigned char vGu8Display\_Righ\_Dot\_1=0; //右起第1位數碼管的小數點。0代表關閉顯示。 void main() { SystemInitial(); Delay(10000); PeripheralInitial(); while(1) { } } void DisplayScan(void) { static unsigned char Su8GetCode; static unsigned char Su8ScanStep=1; if(0==vGu16ScanTimerCnt) { P0=0x00; P1\_0=1; P1\_1=1; P1\_2=1; P1\_3=1; switch(Su8ScanStep) { case 1: Su8GetCode=Cu8DigTable\[vGu8Display\_Righ\_1\]; /\* 注釋二: \* 這里是本節的關鍵。通過判斷全局的接口變量的數值,來決定是否打開顯示小數點。 \* 從轉換表取出字模數據后再跟0x80進行“或”運算即可把第7位數據改為1。 \*/ if(1==vGu8Display\_Righ\_Dot\_1) //如果打開了需要顯示第1個數碼管的小數點 { Su8GetCode=Su8GetCode|0x80; //把第7位數據改為1,顯示小數點 } P0=Su8GetCode; P1\_0=0; P1\_1=1; P1\_2=1; P1\_3=1; break; case 2: Su8GetCode=Cu8DigTable\[vGu8Display\_Righ\_2\]; if(1==vGu8Display\_Righ\_Dot\_2) //如果打開了需要顯示第2個數碼管的小數點 { Su8GetCode=Su8GetCode|0x80; //把第7位數據改為1,顯示小數點 } P0=Su8GetCode; P1\_0=1; P1\_1=0; P1\_2=1; P1\_3=1; break; case 3: Su8GetCode=Cu8DigTable\[vGu8Display\_Righ\_3\]; if(1==vGu8Display\_Righ\_Dot\_3) //如果打開了需要顯示第3個數碼管的小數點 { Su8GetCode=Su8GetCode|0x80; //把第7位數據改為1,顯示小數點 } P0=Su8GetCode; P1\_0=1; P1\_1=1; P1\_2=0; P1\_3=1; break; case 4: Su8GetCode=Cu8DigTable\[vGu8Display\_Righ\_4\]; if(1==vGu8Display\_Righ\_Dot\_4) //如果打開了需要顯示第4個數碼管的小數點 { Su8GetCode=Su8GetCode|0x80; //把第7位數據改為1,顯示小數點 } P0=Su8GetCode; P1\_0=1; P1\_1=1; P1\_2=1; P1\_3=0; break; } Su8ScanStep++; if(Su8ScanStep>4) { Su8ScanStep=1; } vGu8ScanTimerFlag=0; vGu16ScanTimerCnt=SCAN\_TIME; vGu8ScanTimerFlag=1; } } void T0\_time() interrupt 1 { DisplayScan(); if(1==vGu8ScanTimerFlag&&vGu16ScanTimerCnt>0) { vGu16ScanTimerCnt--; } TH0=0xfc; TL0=0x66; } void SystemInitial(void) { P0=0x00; P1\_0=1; P1\_1=1; P1\_2=1; P1\_3=1; TMOD=0x01; TH0=0xfc; TL0=0x66; EA=1; ET0=1; TR0=1; } void Delay(unsigned long u32DelayTime) { for(;u32DelayTime>0;u32DelayTime--); } void PeripheralInitial(void) { }
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看