<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 功能強大 支持多語言、二開方便! 廣告
                【112.1 數碼管顯示的基礎知識。】 ![](https://img.kancloud.cn/d1/98/d19803e327fa494dce4ab72902e02129_285x371.png) 上圖112.1.1 數碼管 ![](https://img.kancloud.cn/7f/a8/7fa805a42ee960a6c0f1fb761a589477_303x371.png) 上圖112.1.2 等效圖 如上圖112.1.1,一個數碼管內部有8個段碼,每個段碼內部對應一顆能發光的LED燈,把相關位置的段碼點亮或熄滅就可以顯示出不同的數字或者小數點。比如,要顯示一個數字“1”,只需要點亮b和c這兩個段碼LED即可,其它6個a,d,e,f,g,h段碼LED熄滅,就可以顯示一個數字“1”。再進一步深入分析數碼管內部的等效圖(上圖112.1.2),com4是右起第1位數碼管內部8個段碼LED的公共端,要點亮任何一個段碼LED的前提必須是公共端com4為低電平(P1.0輸出0信號)。如果公共端com4為高電平(P1.0輸出1信號),則不管段碼端P0口的8個IO口輸出什么信號,8個段碼LED都是熄滅的(無正壓差,則無電流無回路)。因此,公共端(比如com4,com3,com2,com1)就是某個數碼管的“總開關”。比如,右起第1位數碼管要顯示數字“1”,要點亮b和c,則P0.1和P0.2必須輸出“1”高電平,其它P0.0,P0.3,P0.4,P0.5,P0.6,P0.7必須輸出“0”低電平,把這8個IO口二進制的信號轉換成十六進制,則整個P0口總線只需輸出一個十六進制的0x06,最后,“總開關”打開,公共端com4輸出“0”,即可顯示一個數字“1”。如果需要顯示其它的不同數字,只需要改變段碼端P0口的十六進制輸出數值即可,如果提前把要顯示的數字放在一個數組里,這個數組就是編碼轉換表,類似于一個字庫表。現在編寫一個程序例子,右起第1個和第3個數碼管循環顯示從0到9的數字,另外右起第2個和第4個數碼管則關閉不顯示,程序代碼如下: \#include "REG52.H" \#define CHANGE\_TIME 1000 //數碼管切換顯示數字的時間 void T0\_time(); void SystemInitial(void) ; void Delay(unsigned long u32DelayTime) ; void PeripheralInitial(void) ; void DisplayTask(void); //數碼管顯示的任務函數 sbit P1\_0=P1^0; //右起第1位數碼管的公共端com4 sbit P1\_1=P1^1; //右起第2位數碼管的公共端com3 sbit P1\_2=P1^2; //右起第3位數碼管的公共端com2 sbit P1\_3=P1^3; //右起第4位數碼管的公共端com1 //根據原理圖得出的共陰數碼管編碼轉換表,類似于一個字庫表 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 vGu8ChangeTimerFlag=0; //控制切換數字的時間的定時器 volatile unsigned int vGu16ChangeTimerCnt=0; unsigned char Gu8Number=0; //從0到9依次循環顯示的數字 void main() { SystemInitial(); Delay(10000); PeripheralInitial(); while(1) { DisplayTask(); //數碼管顯示的任務函數 } } void DisplayTask(void) //數碼管顯示的任務函數 { static unsigned char Su8GetCode; //從編碼轉換表中提取出來的編碼。 if(0==vGu16ChangeTimerCnt) //定時的時間到,更新顯示下一個數字,依次循環顯示 { Su8GetCode=Cu8DigTable\[Gu8Number\]; //從編碼轉換表中提取出來的編碼。 P0=Su8GetCode; //段碼端輸出需要顯示的編碼 P1\_0=0; //右起第1位數碼管的公共端com4,“總開關”打開,輸出低電平0 P1\_1=1; //右起第2位數碼管的公共端com3,“總開關”關閉,輸出高電平1 P1\_2=0; //右起第3位數碼管的公共端com2,“總開關”打開,輸出低電平0 P1\_3=1; //右起第4位數碼管的公共端com1,“總開關”關閉,輸出高電平1 Gu8Number++; //顯示的數字不斷從0到9累加 if(Gu8Number>9) { Gu8Number=0; } vGu8ChangeTimerFlag=0; vGu16ChangeTimerCnt=CHANGE\_TIME; vGu8ChangeTimerFlag=1; //啟動新一輪的定時器 } } void T0\_time() interrupt 1 { if(1==vGu8ChangeTimerFlag&&vGu16ChangeTimerCnt>0) //數碼管顯示切換時間的定時器 { vGu16ChangeTimerCnt--; } TH0=0xfc; TL0=0x66; } void SystemInitial(void) { //初始化上電瞬間數碼管的狀態 P1\_0=1; //右起第1位數碼管的公共端com4,“總開關”關閉,輸出低電平1 P1\_1=1; //右起第2位數碼管的公共端com3,“總開關”關閉,輸出高電平1 P1\_2=1; //右起第3位數碼管的公共端com2,“總開關”關閉,輸出低電平1 P1\_3=1; //右起第4位數碼管的公共端com1,“總開關”關閉,輸出高電平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>

                              哎呀哎呀视频在线观看