① keil51單片機數碼管滾的顯示
一,LED數碼管顯示的原理
數碼管的發光原理實際是七段LED燈(不包括小數點)或者八段LED燈被點亮的結果。八段依次是 a,b,c,d,e,f,g,dp(表示點)。LED數碼管是常見的顯示器件,在很多場合都可以看到,比如,鬧鍾沖胡的顯示,家電的顯示功能,車站等等。我們看到的數碼管為「8」字形,數碼管又分為共陰極和共陽極兩種。
1.共陰極:就是將八段數碼管的陰極(負極)接地在一起,需要高電平點亮。如下圖所示
2.共陽極:就是將八段數碼管的陽極(正極)接(+5v)在一起,需要低電平點亮。如下圖所示
3.數碼管的具體顯示
①共陰數碼管的點亮
為使數碼管的不同段顯示不同的字元,需要點亮和熄滅不同段的LED燈,才可以實現。對於共陰極數碼管來說,只需要給高電平LED燈就會被點亮,對應的斷碼就會亮起。給低電平相應的斷碼就會熄滅。
以顯示「0」為例 只需要給「dp」和「g」給低電平熄滅就可以了
斷碼的順序為:dp g f e d c b a
「0」斷碼用16進製表示為:3FH
其他字元的斷碼以此類推:如下表所示
②共陽數碼管的點亮
為使數碼管的不同段顯示不同的字元,需要點亮和熄滅不同段的LED燈,才可以實現。對於共陽極數碼管來說,只需要給低電平LED燈就會被點亮,對應的斷碼就會亮起。給高電平相應的斷碼就會熄滅。
以顯示「0」為例 只需要給「dp」和「g」給高電平熄滅就可以了
斷碼的順序為:dp g f e d c b a
1 1 0 0 0 0 0 0
「0」斷碼用16進製表示為:C0H
其他字元的斷碼以此類推:如下表所示
二.動態數碼管的顯示(共陰)
思路: 建立顯存、斷碼、位碼表格,將軟體延時部分設計成子函數的結構,在主函數中利用查表的方法來獲得相應的位碼和段碼,這種思路經常用於顯示變化的字元。
顯示的狀態(左移動態顯示,類似於常見的廣告牌)
3.原理圖(protues模擬圖)
4.設計方法
在多個數碼管的顯示中點亮數碼管需要 位碼和段碼共同作核搏用才能點亮
位碼(低電平有效):表示要點亮的數碼管的位置。
斷碼(上面講過了):就是要點亮哪一段數碼管
舉例說明:
如果要在上面的六個數碼管中點亮第一個數碼管,且讓它顯示「1」,首先確定它的位置是第六個。用八個二進製表示,最低位從0開始,最高位為7 那麼它的位碼為:11111110 (低電平有效)
斷碼為0x06
其他的以此類推
先要數碼管動態顯示要建一個數組。下圖為斷碼
源代碼:
#include#include#define uchar unsigned char#define uint unsigned intsbit an=P2^6; sbit wei=P2^7; uchar code tab[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00,0x40}; //共陰極數碼管段碼表uchar idata dis_buf[6]={17,17,17,17,17,17}; //顯示緩沖區數據(十進制)void delayms(uint i) //延時1ms函數{ uint j; for(;i>0;i--) for(j=120;j>0;j--) {;}}void main() //主函數{ uchar k,m,n,bitcode,segcode; while(1) { for(n=0;n<17;n++) { dis_buf[0]=dis_buf[1]; //數據移動 dis_buf[1]=dis_buf[2]; dis_buf[2]=dis_buf[3]; dis_buf[3]=dis_buf[4]; dis_buf[4]=dis_buf[5]; dis_buf[5]=n; for(m=0;m<100;m++) //100次掃描,大約600ms { bitcode=0xfe; //起始位碼 for(k=0;k<6;k++) { P0=0xff; //消影 wei=1; wei=0; segcode=dis_buf[k]; //取數據 P0=tab[segcode]; //送段碼散氏攔 an=1; an=0; P0=bitcode; //送位碼 wei=1; wei=0; delayms(1); bitcode=_crol_(bitcode,1); //更新位碼,准備顯示下一位 } } } }}
② 單片機 共陰數碼管。如何編程
你所說的「8」 0xff是共陰的,那麼要是他點亮,8段數碼管abcdefg都應該為1,h是小數點,沒有用到,則是0.
abcdefgh則為:11111110
把順序倒過來就是01111111
把八為二進制分2組,四位一組
根據8421碼:
8 4 2 1 8 4 2 1
-----------------------------------------------------
0 1 1 1 1 1 1 1
4+2+1=7 8+4+2+1=15 (分數下面是0的不用和上面相加的)
16進制中 10=a 11=b 12=c13=d14=e15=f
即 0x7f
你上面說的8=0xff是把小數點也算上去了的!
③ 知道UM2003晶元是干什麼的嗎我在做一個單片機控制電動機的東西。
ULN2003 是高耐壓、大電流達林頓陳列,由七個硅NPN 達林頓管組成。
該電路的特點如下: ULN2003 的每一對達林頓都串聯一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路 直接相連,可以直接處理原先需要標准邏輯緩沖器來處理的數據。 ULN2003 工作電壓高,工作電流大,灌電流可達500mA,並且能夠在關態時承受50V 的電壓,輸出還 可以在高負載電流並行運行。 ULN2003 採用DIP—16 或SOP—16 塑料封裝。 方框圖 封裝外形圖封裝外形圖 ULN2003內部還集成了一個消線圈反電動勢的二極體,可用來驅動繼電器。它是雙列16腳封裝,NPN晶體管矩陣,最大驅動電壓=50V,電流=500mA,輸入電壓=5V,適用於TTL COMS,由達林頓管組成驅動電路。 ULN是集成達林頓管IC,內部還集成了一個消線圈反電動勢的二極體,它的輸出端允許通過電流為200mA,飽和壓降VCE 約1V左右,耐壓BVCEO 約為36V。用戶輸出口的外接負載可根據以上參數估算。採用集電極開路輸出,輸出電流大,故可直接驅動繼電器或固體繼電器,也可直接驅動低壓燈泡。通常單片機驅動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應該懸空或接電源。 ULN2003是一個非門電路,包含7個單元,單獨每個單元驅動電流最大可達350mA,9腳可以懸空。 比如1腳輸入,16腳輸出,你的負載接在VCC與16腳之間,不用9腳。
[編輯本段]作用
ULN2003是大電流驅動陣列,多用於單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。 輸入5VTTL電平,輸出可達500mA/50V。 ULN2003是高耐壓、大電流達林頓陳列,由七個硅NPN達林頓管組成。 該電路的特點如下: ULN2003的每一對達林頓都串聯一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路 直接相連,可以直接處理原先需要標准邏輯緩沖器。 ULN2003 是高壓大電流達林頓晶體管陣列系列產品,具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點,適應於各類要求高速大功率驅動的系統。