目錄
一、數碼管概述
(1)認識數碼管
(2)數碼管的工作原理
(3)LED數碼管驅動方式-靜態顯示
二、數碼管電路圖
三、靜態數碼管顯示例程
(1)例程1:數碼管顯示某一位(某一杠)。以點亮8段數碼管最上面的橫杠為例。
(2)例程2:數碼管的8個段依次點亮(其他保持熄滅)
(3)例程3:數碼管顯示某一個數值。(本例以點亮8段數碼管顯示數組“1”為例)
(4)例程4:數碼管依次顯示0-9、-、全部熄滅,顯示間隔為500MS;
一、數碼管概述
(1)認識數碼管
led數碼管(LED Segment Displays)由多個發光二極管封裝在一起組成“8”字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。數碼管實際上是由七個發光管組成8字形構成的,加上小數點就是8個。這些段分別由字母a,b,cdefq,dp來表示:
(2)數碼管的工作原理
當數碼管特定的段加上電壓后,這些特定的段就會發亮,以形成我們眼睛看到的字樣了。如:顯示一個“2”字,那么應當是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。小尺寸數碼管的顯示筆畫常用一個發光二極管組成,而大尺寸的數碼管由二個或多個發光二極管組成。發光二極管的陽極連接到一起連接到電源正極的稱為共陽數碼管,發光二極管的陰極連接到一起連接到電源負極的稱為共陰數碼管。常用LED數碼管顯示的數字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。(藍橋杯單片機上使用的是:兩個四位一體的共陽極數碼管)
(3)LED數碼管驅動方式-靜態顯示
- LED數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據LED數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。
- 靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/0端口多,如驅動5個數碼管靜態顯示則需要5x8=40根I/O端口來驅動,要知道一個89S51單片機可用的I/O端口才32個,實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。
二、數碼管電路圖
(非實際,便于理解版本)
三、靜態數碼管顯示例程
(1)例程1:數碼管顯示某一位(某一杠)。以點亮8段數碼管最上面的橫杠為例。
//頭文件聲明區域
#include <STC15F2K60S2.H>//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開第一個數碼管程序P0 = 0XFE;//1111 1110while(1);}
(2)例程2:數碼管的8個段依次點亮(其他保持熄滅)
//頭文件聲明區域
#include <STC15F2K60S2.H>
#include<intrins.h>
//變量聲明區域
unsigned char SEG = 0;//函數定義區域
void Delay(unsigned int time) //@11.0592MHz
{unsigned char i, j;while(time--){_nop_();i = 2;j = 199;do{while (--j);} while (--i);}}}
void SEG_Left(void)
{for(SEG = 0;SEG < 8;SEG++){P0 = ~(0x01<<i);Delay(500);}}//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開第一個數碼管程序while(1){SEG_Left();}}
(3)例程3:數碼管顯示某一個數值。(本例以點亮8段數碼管顯示數組“1”為例)
//頭文件聲明區域
#include <STC15F2K60S2.H>//程序主體
void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開第一個數碼管程序P0 = 0XF9;while(1);}
(4)例程4:數碼管依次顯示0-9、-、全部熄滅,顯示間隔為500MS;
#include <STC15F2K60S2.H>void main()
{P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打開第一個數碼管程序while(1){P0 = 0XC0; Delay(500);//0P0 = 0XF9; Delay(500);//1P0 = 0XA4; Delay(500);//2P0 = 0XB0; Delay(500);//3P0 = 0X99; Delay(500);//4P0 = 0X92; Delay(500);//5P0 = 0X82; Delay(500);//6P0 = 0XF8; Delay(500);//7P0 = 0X80; Delay(500);//8P0 = 0X90; Delay(500);//9P0 = 0XBF; Delay(500);//-P0 = 0XFF; Delay(500);//全部熄滅}}