基于51單片機數碼管顯示
## 數碼管顯示原理
- 數碼管(LED?Segment?Displays)由多個發光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極,數碼管實際上是由七個發光管組成8字形構成的,加上小數點就是8個,這些段分別由字母a,b,c,d,e,f,g,dp來表示,如圖所示,數碼管按段數可分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極管單元(多一個小數點顯示);按能顯示多少個“8”可分為1位、2位、3位、4位、5位、6位、7位等數碼管,
- 按發光二極管單元連接方式可分為共陽極數碼管和共陰極數碼管,共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一欄位發光二極管的陰極為低電時,相應欄位就點亮,當某一欄位的陰極為高電平時,相應欄位就不亮,共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極的數碼管,共陰數碼管在應用時應將公共極接到地線GND上,當某一欄位發光二極管的陽極為高電平時,相應欄位就點亮,當某一欄位的陽極為低電平時,相應欄位就不亮,
根據數碼管共陰共陽連接,通過單片機給單片機I/O口送高低電平就可以控制數碼管每一段的顯示,
## 共陰級數碼管編碼
| 符號 | 編碼 | 符號 | 編碼 | 符號 | 編碼 | 符號 | 編碼 |
|---|---|---|---|---|---|---|---|
| 0 | 0x3f | 4 | 0x66 | 8 | 0x7f | c | 0x39 |
| 1 | 0x06 | 5 | 0x6d | 9 | 0x6f | d | 0x5e |
| 2 | 0x5b | 6 | 0x7d | A | 0x77 | E | 0x79 |
| 3 | 0x4f | 7 | 0x07 | b | 0x7c | F | 0x71 |
一位數碼管顯示數字代碼
#include <reg51.h>
unsigned char code LED[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//數碼管顯示0-9數字編碼,寫成陣列直接給I/O口送進陣列元素就歐克
void main(){
P1=LED[1];//可以根據電路圖所接單片機I/O口改變向數碼管介面
}
當數碼管多位一體時,它們內部的公共端是獨立的,而負責顯示什么數字的段線全部連接在一起, 獨立的公共端可以控制多位 一體中的哪一 位數碼管點亮,連接在-起的段線可以控制這個能點亮數碼管亮什么數字,通常我們把公共端叫做“位選線”,連接在一起的段線叫做“段選線”,有了這兩個線后,通過單片機及外部驅動電路,就可以控制任意的數碼管顯示任意的數字了,
一般單位數碼管有10個引腳,二位數碼管也是10個引腳,四位數碼管是12個引腳,關于具體的引腳及段、位標號大家可以查詢相關資料,最簡單的辦法是用數字萬用表測量, 若沒有數字萬用表,也可用直流電源串接1k電阻后測量,將測量結果進行記錄,通過統計便可繪制出引腳標號,
多位數碼管顯示需要用到段選與位選信號,也就是當你用到那一位數碼管的時候,需要打開位選端,只有這樣才可以向那一位傳輸資料,傳輸段選信號時還要打開段選段,這樣才能可控的任意選擇給哪一位數碼管送入那一段資料;
多位數碼管顯示代碼
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint x);
sbit wela = P2^7; //定義位選IO口
sbit dula = P2^6‘、//定義段選IO口
uchar code D[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//0-9段選編碼
uchar code W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//I/O口位選編碼
void main()
{
uint i;
for(i=0;i<8;i++)//i可以控制幾位數碼管
{
delay(500);
wela=1;
P0=W[i];
wela=0;
P0=0xff;//消隱防止數碼管亮的不均衡
dula=1;
P0=D[i];
dula=0;
}
}
//延時函式 這里是軟體代碼空運行延時
void delay(uint x){
uint i,j;
for(i=0;i<x;i++){
for(j=0;j<110;j++);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190186.html
標籤:java
