生活随笔
收集整理的這篇文章主要介紹了
单片机——数码管
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 數碼管簡介
數碼管:也稱為LED數碼管,基本單元是發光二極管(LED)。分為七段數碼管和八段數碼管(多一個小數點DP)。
- 共陽數碼管:所有LED的陽極連接到一起形成一個公共陽極接VCC,單片機需要控制某段LED的陰極為低電平時,相應led就會點亮
- 共陰數碼管:所有LED的陰極連接到一起形成一個公共陰極接GND,單片機需要控制某段LED的陽極為高電平,相應LED會點亮。注:單片機上IO口的電壓不足以驅動數碼管的led,因此共陰數碼管的陽極一般并不直接連到單片機的IO上,而是中間再接一個電源。
動態數碼管:兩個或兩個以上單個數碼管并列在一起形成的多位數碼管,內部分為公共端和段碼端。多位數碼管上的所有數碼管在同一時刻現實的數字是一樣的,因為它們共用段選線,而在極短的時間內通過“位選”不同的數碼管顯示不同的數字,從視覺上實現了多個數碼管在同一時間的動態顯示不同數字。
- 公共端:各個數碼管相互獨立,負責控制多位數碼管中具體哪個數碼管工作
- 段碼端:各個數碼管共用用七段/八段的段選線
2. 原理圖分析
靜態數碼管:靜態化數碼管是共陽數碼管,可以直接通過單片機輸出低電平來控制對應的數碼管led是否亮
動態數碼管:動態化數碼管是共陰數碼管,通過單片機控制段線實現控制數碼管的顯示具體數字,通過單片機控制位線實現控制具體哪個數碼管顯示
74138譯碼器:默認狀態輸出的8個IO口(Yn)都是高電平,通過3個輸入IO口(A、B 、C)組成的8種狀態,實現對8個輸出IO口(Yn)具體哪個IO口輸出低電平
3. 代碼編寫
共陽數碼管碼表
靜態數碼表
uunsigned
char val
[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void delay()
{int i
= 100, j
= 100;while(i
--){while(j
--){}}
}void main(void)
{while (1){for(int i
=0; i
<15; i
++){P0
= val
[i
];delay();}}
}
共陰數碼管碼表
動態數碼表
unsigned char led_select
[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char bit_select
[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
void delay()
{int i
= 2, j
= 100;while(i
--){while(j
--){}}
}
void main(void)
{while (1){for(int i
=0; i
<8; i
++){P2
= bit_select
[i
]; P0
= val
[i
]; delay();P0
= 0x0; }}
}
38譯碼器真值表
unsigned char led_select
[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay()
{int i
= 2, j
= 100;while(i
--){while(j
--){}}
}
void main(void)
{while (1){for(int i
=0; i
<8; i
++){P2
= i
; P0
= val
[i
]; delay();P0
= 0x0; }}
}
總結
以上是生活随笔為你收集整理的单片机——数码管的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。