動態數碼管中信號的定義是什麽
由於三八譯碼器的特性導致每次只能選擇點亮壹位數碼管,而人肉眼可區分範圍是20-50ms(余暉效應),所以控制數碼管點亮間隙小於20ms,即想讓人眼看見第壹個數碼管顯示1和第二個數碼管顯示2在壹起出現,則將0和1之間的延時時間控制在小於20ms(1顯示完後等待小於20ms時間,點亮2)。
74HC245和74HC138芯片介紹
要使單片機能控制開發板上 2 位壹體的***陰數碼管顯示,僅靠單片機 IO 口來驅動是不行的,這裏就需要增加外部驅動芯片,開發板上使用的是 74HC245 芯片。2 個 4 位壹體的***陰數碼管的位選線有 8 根,直接讓單片機 IO 口控制是沒有任何問題的,但考慮到 51 單片機 IO 口資源的限制,通常我們會使用壹種 IO 擴展芯片,比如 74HC138、74HC164、74HC595 芯片等,只需要很少的單片機 IO 口就可以擴展出 8 個控制口,通過級聯方式甚至可擴展出更多的控制口(在後面 LED 點陣實驗章節中會有詳細介紹)。我們開發板上使用的是 74HC138 譯碼器芯片,只需單片機 3 個 IO 口就可以實現 8 個位選管腳的控制,節省了芯片的 IO 資源。
74HC245芯片
74HC245 是壹種三態輸出、八路信號收發器,主要應用於大屏顯示,以及其它的消費類電子產品中增加驅動。可以增加I/O的電流,通過芯片可以驅動八個數碼管。
(1)主要特性
①采用 CMOS 工藝
②寬電壓工作範圍:3.0V-5.0V
③雙向三態輸出
④八線雙向收發器
⑤封裝形式:SOP20、SOP20-2、TSSOP20、DIP20
(2)管腳功能定義
從上面的管腳功能定義說明及真值表可以知道該芯片使用方法很簡單,給 OE
使能管腳低電平,DIR 管腳為高電平傳輸方向是 A->B 輸出,DIR 為低電平傳輸方
向是 B->A,至於輸出高電平還是輸出低電平取決於輸入端的狀態,如果輸入為
低電平,輸出即為低;輸入為高電平,輸出即為高。如果 OE 使能管腳為高電平,
不論 DIR 管腳是高還是低,輸出是高組態。
通常我們使用 74HC245 芯片用作驅動只會讓其在壹個方向輸出,即 DIR 管腳
為高電平,傳輸方向是 A->B(根據二極管單向導電性DIR為高電平,OE非為低電平)。
74HC138芯片
74HC138D 是壹種三通道輸入、八通道輸出譯碼器,主要應用於消費類電子產品。
(1)主要特性
①采用 CMOS 工藝
②低功耗
③工作電壓:3.0V-5.0V
④封裝形式:SOP16
(2)管腳功能定義
從上面的管腳功能定義說明及真值表可以知道該芯片使用方法很簡單。首先要使能有效,給E1、E2 使能管腳低電平,E3 管腳為高電平。至於哪個管腳輸出有效電平(帶非號就為低電平有效),要看 A0,A1,A2 輸入管腳的電平狀態。如果 A0,A1,A2 都為低電平,則Y0 輸出有效電平(低電平),其他管腳均輸出高電平。如果 A0 為高電平,A1,A2 都為低電平,則 Y1 輸出有效電平(低電平),其他管腳均輸出高電平。其他幾種輸出大家可以對照真值表查看。如果 E1、E2 使能管腳任意壹個為高電平或者 E3 為低電平,不論輸入是什麽,輸出都為高電平。
這裏給大家總結壹個方法:A0、A1、A2 輸入就相當於 3 位 2 進制數,A0 是低位,A1 是次高位,A2 是高位。而 Y0-Y7 具體哪壹個輸出有效電平,就看輸入二進制對應的十進制數值。比如輸入是 101(A2,A1,A0),其對應的十進制數是 5,所以 Y5 輸出有效電平(低電平)。
硬件設計
A2-A4開發板電路圖:
A5-A7開發板電路圖:
A5-A7開發版輸入端加入了下拉電阻,比如輸入端連接了P0端口,因為P0內不存在上拉電阻,但是外界了上拉電阻,所以會默認輸入高電平,不加入下拉電阻,就會發生自動點亮,產生幹擾。
!!!註意A2-A4開放版和A5-A7開發版的位選是相反的。
軟件設計
編程
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG_A_DP_PORT P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x6e,0x79,0x71};//***陰0-F
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void smg_display()//數碼管smg同時顯示0—7
{
u8 i=0;
for(i=0;i<8;i++)//for(i=7;i>=0;i--) //改變位選方向//A2-A4開發板
{
switch(i)
{
case 0:LSA=0;LSB=0;LSC=0;break;
case 1:LSA=1;LSB=0;LSC=0;break;
case 2:LSA=0;LSB=1;LSC=0;break;
case 3:LSA=1;LSB=1;LSC=0;break;
case 4:LSA=0;LSB=0;LSC=1;break;
case 5:LSA=1;LSB=0;LSC=1;break;
case 6:LSA=0;LSB=1;LSC=1;break;
case 7:LSA=1;LSB=1;LSC=1;break;
}
SMG_A_DP_PORT=gsmg_code[i]; //改變位選值//SMG_A_DP_PORT=gsmg_code[7-i]; A2-A4開發板
//delay_10us(100);//1ms //時間越大,數碼管動態顯示越明顯(相當於流水燈)
delay_10us(1000);//10ms
SMG_A_DP_PORT=0x00; //數碼管段數據口清零(消隱)
}
}
void main()
{
SMG_A_DP_PORT=gsmg_code[0];
while(1)
{
smg_display();
}
}
登錄後復制
消除重影!!!
在關閉前壹個數碼管的顯示前要對數碼管段的數據口清零。因為每個數碼管的段碼是並聯在壹起的,所以當前壹個有效位關閉,下壹個有效位開啟的時候,P0的數據依然會存在前壹個有效位(可以理解為電路的延遲,在前壹個有效位在關閉前壹瞬間,下壹個有效位的數據已經影響到前壹個有效位了)
實驗現象
間隙1ms:
間隙10ms:
單片機
學習
嵌入式硬件
炒黃金認準領峰貴金屬,正規平臺,全程在線實盤教學!
領峰貴金屬