基於51微控制器數碼管顯示

2020-10-25 18:00:25

基於51微控制器數碼管顯示

## 數碼管顯示原理

  1. 數碼管(LED Segment Displays)由多個發光二極體封裝在一起組成「8」字型的器件,引線已在內部連線完成,只需引出它們的各個筆劃,公共電極。數碼管實際上是由七個發光管組成8字形構成的,加上小數點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示,如圖所示。數碼管按段數可分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極體單元(多一個小數點顯示);按能顯示多少個「8」可分為1位、2位、3位、4位元、5位、6位、7位等數碼管。
  2. 按發光二極體單元連線方式可分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極體的陽極接到一起形成公共陽極的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一欄位發光二極體的陰極為低電時,相應欄位就點亮,當某一欄位的陰極為高電平時,相應欄位就不亮。共陰數碼管是指將所有發光二極體的陰極接到一起形成公共陰極的數碼管,共陰數碼管在應用時應將公共極接到地線GND上,當某一欄位發光二極體的陽極為高電平時,相應欄位就點亮,當某一欄位的陽極為低電平時,相應欄位就不亮。

根據數碼管共陰共陽連線,通過微控制器給微控制器I/O口送高低電平就可以控制數碼管每一段的顯示。

## 共陰級數碼管編碼

符號編碼符號編碼符號編碼符號編碼
00x3f40x6680x7fc0x39
10x0650x6d90x6fd0x5e
20x5b60x7dA0x77E0x79
30x4f70x07b0x7cF0x71

一位數碼管顯示數位程式碼

#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++);
 }
  
}