在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于單片機的數碼管實驗 八段數碼管簡介

CHANBAEK ? 來源:RYMCU ? 作者:RYMCU ? 2023-07-26 16:37 ? 次閱讀

8.1 八段數碼管簡介

在我們生活中隨處可見數碼管的應用,數碼管的應用形式多種多樣,拋開事物表象,深入到它的本質,正所謂萬變不離其中,數碼管應用的原理都是基本相通的。本章我們將詳細介紹數碼管的基本原理以及數碼管的應用。最典型的數碼管為8段LED數碼管,外觀如下圖所示:
圖片
如上圖所示,數碼管包括A、B、C、D、E、F、G以及DP共8段,實際上8段為8個獨立的LED。上面8段LED組成1位數碼管。數碼管按照內部連接方法的不同分為共陰型或共陽,當8段LED的陰極連接在一起稱為為共陰型,陽極連接在一起稱為共陽型。如下圖所示為4位共陽型的8 段數碼管。
圖片
如上圖所示,4位數碼管每一位的8段LED的陽極連在一起,組成共陽極型數碼管,8段數碼管的陰極分別連接在一起。當選中某一位的陽極使其為高電平,使8段數碼管的陰極對應的位低電平便可點亮數碼管。例如,DP、G、F、E、D、C、B、A電平值依次為:1、1、1、1、1、0、0、1時數碼管顯示為數字1。據此可以編輯共陽數碼管的真值表,如下表所示:
圖片
一般點亮一段數碼管需要至少10mA, 而單片機管腳輸出的電流較小,無法驅動數碼管,可以采用上拉電阻、三極管驅動或采用專用驅動芯片進行驅動。RY-51單片機開發板采用兩個74HC573驅動芯片,驅動2個4位的數碼管,共8位數碼管如下圖所示:
圖片

8.2 鎖存器74HC573功能介紹

如上圖所示,U3,U4為8位的數據鎖存器74HC573,D7-D0為數據輸入端,Q7-Q0為與輸入端一一對應的輸出端。74HC573有2個控制信號分別為第1、11管腳、1管腳為芯片使能控制端,11管腳為數據鎖存控制端。

當1接高電平時,芯片不工作,無論數據輸入端為高、低電平,輸出端Q7-Q0為高阻態。只有當1管腳為低電平時,芯片才能正常工作,如圖8-3所示U3、U4均將1管腳直接接地。

在1管腳接地的情況下,當11管腳為高電平時,D7-D0輸入為高電平時,Q7-Q0輸出為高、同理當輸入為低電平時,輸出為低電平,此時相當于芯片的D7-D0與Q7-Q0是一一連通的。

當11管腳為低電平時,無論輸入端D7-D0是高或者低電平,Q7-Q0保持原來的值不變。

利用上面的特點我們就可以實現數據的鎖存了。假設我們要把0xFB鎖存到Q7-Q0,首先使11管腳為高電平,給輸入端D7-D0賦值0xFB,此時輸出端Q7-Q0輸出為0xFB,此時將11管腳拉為低電平并一直保持,那么此后無論輸入端D7-D0為何值,Q7-Q0均為0xFB,因此完成了數據的鎖存。74HC573真值表如下表所示:
圖片

如上面原理圖所示,根據鎖存器74HC573的特點,利用單片的一個8位端口,以及兩個用于控制的I/O口便能控制8位數碼管了。如圖所示,輸入數據D7-D0與單片的P0口相連,U3、U4的11管腳分別與單片機的I/O口P2.7、P2.6相連。鎖存器U3的輸出端Q7~Q0分別與數碼管的a-g,DP相連,鎖存器U4的輸出端Q7-Q0分別與8位數碼管的公共端相連。

8.3 單片機控制數碼管

下面我們通過舉例來講解數碼管的控制過程,以使第5位數碼管顯示數字8為例。如表8-1所示數字8對應數碼管真值為0x80,通過單片機的P0口將0x80鎖存到U3的輸出口。如圖8-3所示,第5位數碼管公共端WE5對應的是鎖存器U4的Q4,應只需Q4為高電平,Q7-Q5,Q3-Q1為低電平,便可使第5位數碼管顯示數字8,其它數碼管不顯示。因此通過單片機的P0口將0x10鎖存到U4。數碼管的顯示總結如下,首先將字碼鎖存到U3,然后將數碼管的顯示位鎖存到U4。數碼管顯示程序如下所示:

/*----------------------------------------------------
** 數碼管5顯示數字8
----------------------------------------------------*/
#include< reg52.h >

sbit DU = P2^7;
sbit WE = P2^6;

void main()
{
	P0 = 0x80;//顯示數字8
	DU = 1;
	DU = 0;

	P0 = 0x10;//第5位數碼管
	WE = 1;
	WE = 0;

	while(1);
}

程序代碼如上所示,在主程序中首先把數字8鎖存到鎖存器U3,然后將數碼管5公共端的高電平鎖存到U4,將程序編譯并下載到單片機檢驗實際顯示效果。每一個數字對應數碼管都是固定的,在實際應用中每條語句中都對P0進行賦值的話會比較繁瑣而且不便于程序閱讀,我們往往將數碼管的真值放在一個數組中,程序中調用數組即可,改進程序如下所示:

/*----------------------------------------------------
** 數碼管5顯示數字8,字碼組放入數組中
----------------------------------------------------*/
#include< reg52.h >

#define uchar  unsigned char
#define uint unsigned int

sbit DU = P2^7;
sbit WE = P2^6;

//共陽型(0~9,A,b,C,d,E,F,全亮,全滅),字碼組
uchar code table_D[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00,0xFF};
//位選數組
uchar code table_W[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,0x00};

void main()
{
	
	P0 = table_D[8];//顯示數字8
	DU = 1;
	DU = 0;

	P0 = table_W[4];//第5位數碼管
	WE = 1;
	WE = 0;

	while(1);
}

如代碼所示,將數碼管真值表放入數組table_D[],數組的第0位對應的數字為0,第8位對應的數字為8,因此,如代碼所示,需要顯示數字8,直接將table_D[8],賦值給P0即可,方便又好記。Table_W[]設計的原理相同。將程序下載到開發板,顯示效果與前面保持一致。

前面講解的都是讓某一個數碼管顯示某一個固定的值,下面我們講解較為復雜一點數碼管顯示。例如,第1位數碼管顯示數字0,500ms之后第2位數碼管顯示數字1,直到第8位數碼管顯示7,然后循環上述步驟。要實現上面的功能我們需要用到前面講解的定時器功能,即每500ms在定時器中斷程序中給數碼管更新一次數值。程序代碼如下所示。

/*----------------------------------------------------
** 數碼管1~8循環顯示數字0~7,間隔500ms
** 定時器中斷方式
----------------------------------------------------*/
#include< reg52.h >

#define uchar  unsigned char
#define uint unsigned int

#define FOSC 11059200 //單片機晶振頻率
#define T_1ms (65536 - FOSC/12/1000)  //定時器初始值計算

uint count = 0;
uint flag  = 0;

sbit DU = P2^7;
sbit WE = P2^6;
//共陽型(0~9,A,b,C,d,E,F,全亮,全滅),字碼組
uchar code table_D[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00,0xFF};
//位選數組
uchar code table_W[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,0x00};
void main()
{
	TMOD = 0x01;	 //定時器工作模式配置
	TL0  = T_1ms;	//裝載初始值
	TH0  = T_1ms >>8;

	TR0  = 1;		 //啟動定時器
	ET0  = 1;		 //允許定時器中斷
	EA   = 1;		 //開總中斷

	while(1);	  //循環
}

void timer0() interrupt 1
{
	TL0 = T_1ms;//重裝初始值
	TH0 = T_1ms >>8;

	count++;
	if(count >= 500)//每一毫秒進入一次中斷,達到500次則為500ms,跟新一次數碼管顯示。
	{
		count = 0;

		P0 = table_D[flag];//數字0~7循環
		DU = 1;
		DU = 0;
	
		P0 = table_W[flag];//數碼管1~8循環點亮
		WE = 1;
		WE = 0;

		flag++;
		if(flag >=8)
			flag =0;
	}
}

將程序下載到單片機開發板檢驗效果是否與預期一致。

8.4動態顯示數碼管

前面講解的數碼管顯示均為在某個時間內只能顯示一個數碼管,那么如何讓8個數碼管同時顯示不同的數。前面我們講解的例子為數碼管1到8分別顯示數字1到8,顯示的間隔時間為500ms,如果我們將時間間隔該為100ms,那么數碼管切換的速度比以前快了5倍,當把間隔該為2ms時,由于間隔時間太短,感覺前一個數碼管還沒來的及完全熄滅,后面的數碼管就點亮了,這就是人眼睛的視覺暫留效應。

因此,你可以看到數碼管上同時顯示了01234567共八個數,這就是動態數碼管顯示的原理。只需要將上面的程序稍加改動便可實現,將語句“if(count>=500)”改為“if(count>=2)”。將修改好的程序編譯下載到開發板觀察效果。

8.5 數碼管消隱

當把上面的程序下載到開發板時,8位數碼管會同時顯示“01234567”共8個數字。但是,細心的同學會發現,有的數碼管不應該顯示的段會有點亮,但亮度會比較低,看起來像陰影一樣。這種現象是怎么形成的呢,又該怎么消除呢?下面我們通過程序來具體分析。
圖片

8.4節所講的定時器中斷程序如上圖所示,根據前面介紹可知,每隔2ms語句51-59會執行一次,每次flag的值會加1。第一次時flag=0,數碼管1顯示數字0,第二次時,flag=1,數碼管2顯示數字1,如此循環下去。當第二次執行到第51行語句時,此時還沒有選擇數碼管2,而是第一次執行語句57時選中了的數碼管1,只有當語句執行到57時,才完成數碼管2的選定,因此,在執行語句51-57期間,是數碼管1顯示了數字1,當執行到57之后的2ms時間內是數碼管2顯示了數字1。由于語句執行語句51-57的時間遠小于2m,因此亮度較低,這就是我們上面觀察到的陰影。陰影產生的原因找到了,下面我們講解陰影的消除了。如果我們在語句51之前先把所有的數碼關都關掉,就不會出現上述情況了。程序如下:

void timer0() interrupt 1
{
	TL0 = T_1ms;//重裝初始值
	TH0 = T_1ms >>8;

	count++;
	if(count >= 2)//每一毫秒進入一次中斷,達到2次則為2ms更新一次數碼管。
	{
		count = 0;

		P0 =table_W[9];//關閉所有數碼管,消隱處理
		WE = 1;
		WE = 0;

		P0 = table_D[flag];//數字0~7循環
		DU = 1;
		DU = 0;
	
		P0 = table_W[flag];//數碼管1~8循環點亮
		WE = 1;
		WE = 0;

		flag++;
		if(flag >=8)
			flag =0;
	}
}

將程序重新編譯,下載到開發板。正如程序設計所愿,數碼管陰影成功被消除。

8.6 數碼管應用

這里我們在擴展一下數碼管的應用,做一個簡單秒表,在數碼管上顯示。程序設計原理如下:在定時器中斷程序中增加一個變量T_count,當1ms進入一次定時器中斷時自加一次,然后在主程序中判斷是否達到了1000次即1s的時間,每秒鐘變量Sec自加1次,記錄時間。將sec個、十、百、千位保存到數組Buf_LED[]中,在將數組顯示到數碼管上,程序如下所示:

/*----------------------------------------------------
** 秒表
----------------------------------------------------*/
#include< reg52.h >

#define uchar  unsigned char
#define uint unsigned int

#define FOSC 11059200 //單片機晶振頻率
#define T_1ms (65536 - FOSC/12/1000)  //定時器初始值計算

uint count = 0;
uint flag  = 0;

uint T_count  = 0;
uint Sec   = 0;

sbit DU = P2^7;
sbit WE = P2^6;	

uchar  Buf_LED[8] ={0};


//共陽型(0~9,A,b,C,d,E,F,全亮,全滅),字碼組
uchar code table_D[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00,0xFF};
//位選數組
uchar code table_W[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,0x00};

void main()
{
	TMOD = 0x01;	 //定時器工作模式配置
	TL0  = T_1ms;	//裝載初始值
	TH0  = T_1ms >>8;

	TR0  = 1;		 //啟動定時器
	ET0  = 1;		 //允許定時器中斷
	EA   = 1;		 //開總中斷

	while(1)	  //循環
	{
		if(T_count >=1000)
		{
			T_count =0;
			Sec++;
		
		Buf_LED[7]= Sec%10;
		Buf_LED[6]= Sec/10%10;
		Buf_LED[5]= Sec/100%10;
		Buf_LED[4]= Sec/1000%10;
		}
	}
}

void timer0() interrupt 1
{
	TL0 = T_1ms;//重裝初始值
	TH0 = T_1ms >>8;
	
	T_count++;
	count++;
	if(count >= 2)//每一毫秒進入一次中斷,達到2次則為2ms更新一次數碼管。
	{
		count = 0;

		P0 =table_W[9];//關閉所有數碼管,消隱處理
		WE = 1;
		WE = 0;

		P0 = table_D[Buf_LED[flag]];//顯示秒
		DU = 1;
		DU = 0;
	
		P0 = table_W[flag];//數碼管1~8循環點亮
		WE = 1;
		WE = 0;

		flag++;
		if(flag >=8)
			flag =0;
	}
}

8.7本章小結

本章詳細介紹了數碼管的工作原理、鎖存器74HC573的工作原理及使用。數碼管的顯示控制以數碼管顯示中的定時器應用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635355
  • 數碼管
    +關注

    關注

    32

    文章

    1882

    瀏覽量

    91125
  • 鎖存器
    +關注

    關注

    8

    文章

    906

    瀏覽量

    41509
  • 開發板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97483
收藏 人收藏

    評論

    相關推薦

    中文編程鴻蒙Hi3861開發基礎案例之-04八段數碼管

    中文編程鴻蒙Hi3861開發控制八段數碼管
    的頭像 發表于 05-11 11:47 ?2896次閱讀
    中文編程鴻蒙Hi3861開發基礎案例之-04<b class='flag-5'>八段數碼管</b>

    51單片機數碼管的顯示

    51單片機數碼管的顯示一、數碼管基礎部分1.八段數碼管的共陰極和共陽極2.八段數碼管的位碼和
    發表于 11-18 07:41

    段數碼管實驗

    段數碼管實驗一)實驗目的掌握數碼管顯示數字的原理。二)實驗內容1. 靜態顯示。將8255的A口PA0~PA6分別與七
    發表于 03-25 11:00 ?7006次閱讀
    七<b class='flag-5'>段數碼管</b><b class='flag-5'>實驗</b>

    數碼管的分類

    數碼管的分類     數碼管段數分為七段數碼管八段數碼管八段數碼管比七
    發表于 11-06 11:41 ?7471次閱讀

    如何分辨數碼管引腳共陰和共陽極,LED數碼管的檢測方法

    數碼管也稱LED數碼管,不同行業人士對數碼管的稱呼不一樣,其實都是同樣的產品。數碼管段數可分為七段數碼
    發表于 05-11 17:05 ?7w次閱讀

    數碼管的分類及基于AVR單片機595驅動8位數碼管顯示電路的實現

    電路實現 8位數碼管的電路如下圖所示 數碼管是一種半導體發光器件,其基本單元是發光二極數碼管段數分為七
    發表于 11-30 11:03 ?17次下載
    <b class='flag-5'>數碼管</b>的分類及基于AVR<b class='flag-5'>單片機</b>595驅動8位<b class='flag-5'>數碼管</b>顯示電路的實現

    7段數碼管顯示的VHDL設計(兩款設計方案)

    數碼管可分為七段數碼管八段數碼管,區別在于八段數碼管比七段數碼管多一個用于顯示小數點的發光二極
    發表于 01-29 15:48 ?2.2w次閱讀
    7<b class='flag-5'>段數碼管</b>顯示的VHDL設計(兩款設計方案)

    使用單片機實現八段數碼管顯示實驗的程序和資料免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現八段數碼管顯示實驗的程序和資料免費下載。
    發表于 06-19 17:40 ?19次下載
    使用<b class='flag-5'>單片機</b>實現<b class='flag-5'>八段數碼管</b>顯示<b class='flag-5'>實驗</b>的程序和資料免費下載

    單片機運用,七段數碼管如何用單片機控制

    問題,給你還原一個真實的數碼管數碼管的一種是半導體發光器件,數碼管可分為七段數碼管八段數碼管,區別在于
    發表于 11-11 16:21 ?13次下載
    <b class='flag-5'>單片機</b>運用,七<b class='flag-5'>段數碼管</b>如何用<b class='flag-5'>單片機</b>控制

    基于51單片機數碼管顯示

    它們的各個筆劃,公共電極。數碼管實際上是由七個發光組成8字形構成的,加上小數點就是8個。這些分別由字母a,b,c,d,e,f,g,dp來表示,如圖所示。數碼管
    發表于 11-11 19:21 ?18次下載
    基于51<b class='flag-5'>單片機</b><b class='flag-5'>數碼管</b>顯示

    讓51單片機八段數碼管亮起來(靜態顯示和動態顯示、共陰極和共陽極、位碼和碼)

    51單片機數碼管的顯示一、數碼管基礎部分1.八段數碼管的共陰極和共陽極2.八段數碼管的位碼和
    發表于 11-12 10:06 ?220次下載
    讓51<b class='flag-5'>單片機</b><b class='flag-5'>八段數碼管</b>亮起來(靜態顯示和動態顯示、共陰極和共陽極、位碼和<b class='flag-5'>段</b>碼)

    51單片機)—— 數碼管電路介紹

    在51單片機關于數碼管實驗電路中,采用的硬件是一個八段共陰極數碼管,通過兩個鎖存器74HC
    發表于 11-13 17:51 ?7次下載
    51<b class='flag-5'>單片機</b>(<b class='flag-5'>八</b>)—— <b class='flag-5'>數碼管</b>電路介紹

    51單片機-8四位數碼管

    51單片機-8四位數碼管8段數碼管工作原理8四位數碼管工作方式下面是本人自寫的四位
    發表于 11-17 16:21 ?44次下載
    51<b class='flag-5'>單片機</b>-8<b class='flag-5'>段</b>四位<b class='flag-5'>數碼管</b>

    C51單片機實驗——7段數碼管實驗

    實驗二 7段數碼管實驗報告實驗名稱:7段數碼管實驗實驗
    發表于 11-23 16:36 ?19次下載
    C51<b class='flag-5'>單片機</b><b class='flag-5'>實驗</b>——7<b class='flag-5'>段數碼管</b><b class='flag-5'>實驗</b>

    【51單片機】七段數碼管顯示實驗+詳細講解

    【51單片機】七段數碼管顯示實驗前言一、兵馬未動,糧草先行——認識七段數碼管1、關于顯示器2、七段數碼管3、七
    發表于 11-23 16:36 ?115次下載
    【51<b class='flag-5'>單片機</b>】七<b class='flag-5'>段數碼管</b>顯示<b class='flag-5'>實驗</b>+詳細講解
    主站蜘蛛池模板: 天堂网www最新版在线资源| 欧美综合精品一区二区三区| 欧美成人免费| 台湾佬自偷自拍情侣在线| 激情文学综合丁香| 欧美一级视频在线高清观看| 日本在线亚洲| 欧美午夜视频在线| 天天拍天天干天天操| 性性性性bbbbxxxx| 欧美一区二区三区在线观看| 天天插一插| 国模于子涵啪啪大胆| 噜噜色小说| 久久九色| 亚洲v视频| 99国产精品农村一级毛片| 亚洲操综合| 色偷偷男人天堂| 亚洲午夜网| 欧美视频三区| 狠狠躁夜夜躁人人躁婷婷视频| 黄网在线看| 婷婷综合 在线| 亚洲aa| 日本边添边爱边摸边做边爱| 毛片网站在线| 99亚洲自拍| 日韩在线视频www色| 亚洲综合激情| 男啪女色黄无遮挡免费视频| 久久成人综合网| www.五月婷| 拍拍拍交性免费视频| 久久精品午夜| 色婷婷久久合月综| 日韩一级片在线播放| 亚州1区2区3区4区产品乱码2021| 97影院理论片在线观看| 美女三级黄| www.色爱|