?
數碼管靜態顯示其實在實際應用中很少,除非項目中就只用到了一位數碼管顯示,否則的話靜態顯示非常占用IO口。但是,靜態顯示又是動態顯示的基礎,所以,在這里我打算跟大家分享一下,數碼管靜態顯示的工作原理和編程方法。
一、電路原理圖
備注:這是一個6位數碼管的電路,在本項目中我們只用到其中的一個,電路中74LS04電路在這里主要是用作驅動芯片,用于提高單片機IO口的驅動能力。
二、相關知識
1、數碼管的結構
數碼管內部結構其實就是由8顆LED按照8自形排列組成,而根據結構的不同,數碼管可分為共陽極數碼管和共陰極數碼管,其中把所有LED的陰極連接到一起做引出端的成為共陰極數碼管,其中把所有LED的陽極連接到一起做引出端的成為共陽極數碼管。
2、取碼方式
數碼管的使用過程中,我們通過點亮數碼管的不同筆段組合,來達到顯示不同數字的效果,這就是取碼,段碼一般按照16進制書寫。而共陰極數碼管和共陽極數碼管的的段碼也不一樣。
(1)共陰極數碼管的取碼方式
“0”的段碼:取碼時a為對應地位,h對應高位
“1”的段碼:取碼時a為對應地位,h對應高位
根據這種方式我們可以總結得出,共陰極數碼管的段碼表
0x3f | 0x06 | 0x5b | 0x4f | 0x66 | 0x6d | 0x7d | 0x07 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x7f | 0x6f | 0x77 | 0x7c | 0x39 | 0x5e | 0x79 | 0x71 |
8 | 9 | A | B | C | D | E | F |
如果將段碼表使用c語言數組的方式書寫則為:
unsigned char table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0~f
(2)共陽極數碼管的取碼方式
“0”的段碼:取碼時a為對應地位,h對應高位
“1”的段碼:取碼時a為對應地位,h對應高位
根據這種方式我們可以總結得出,共陽極數碼管的段碼表
0xc0 | 0xf9 | 0xa4 | 0xb0 | 0x99 | 0x92 | 0x82 | 0xf8 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x80 | 0x90 | 0x88 | 0x83 | 0xc6 | 0xa1 | 0x86 | 0x8e |
8 | 9 | A | B | C | D | E | F |
如果將段碼表使用c語言數組的方式書寫則為:
unsigned char table[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~f
3、數顯方式
如果我們想要在數碼管上顯示數字,只需要把相應的段碼送到IO口,即可讓數碼管顯示。
三、例程
?#include?reg52.h??> #define uint unsigned int #define uchar unsigned char sbit LED1=P2^0; uchar table_K[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰極數碼管段碼表 /*-------微秒延時--------*/ void delay_us(uint z) { uint x; for(x=z;x>0;x--); } /*--------毫秒延時--------*/ void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*----------主函數-----------*/ void main() { uchar i=1; P0=0x00;P1=0xff;P2=0x00;P3=0x00; //IO口狀態初始化 while(1) { LED1=1; for(i=0;i?16;i++) //循環16次 i從0~15 { P0=table_K[i]; //把0~f的段碼一次送到P0口 delay_ms(1000);//等待1秒 } } }
審核編輯 黃宇
-
51單片機
+關注
關注
274文章
5702瀏覽量
123492 -
數碼管
+關注
關注
32文章
1882瀏覽量
91064 -
C語言
+關注
關注
180文章
7604瀏覽量
136692
發布評論請先 登錄
相關推薦
評論