4位共陰極數碼管微控制器驅動

來源:酷知科普網 2.36W

巨集晶12系列微控制器微控制器驅動4位數碼管計數顯示。

操作方法

(01)1、共陰極數碼管引腳分析共陰極數碼管 是指每一位數碼管的陰極,連線到電源的負極上。也就是圖中所指1,2,3,4公共端。如果不知道是共陰極和共陽極可以用萬用表,或者直接找一個電源試一試。電源測試的話最好串一個限流電阻,否則容易燒壞數碼管。

4位共陰極數碼管微控制器驅動

(02)2、電路原理圖P0:控制顯示段P2:控制顯示相應的位由於微控制器的I/O驅動電流有限所以P0口需要加上拉電阻。P2口直接連線數碼管的選擇位即可。

4位共陰極數碼管微控制器驅動 第2張

軟體的編寫

(01)1、編寫的方式:(1)、驅動方式P2口相應的位置0  即選擇要顯示的數碼管位P0口相應的位置1即可顯示相應的數碼管段(2)、 採用動態掃描的方式進行顯示4位即每隔一段時間顯示一位,迴圈掃                 描,由於輝光效應,肉眼觀察到的是4位同時顯示。下面編寫相應的函式。

(02)2、數碼管顯示函式void  Dig_OutPut(int i){unsigned char a , b ,c ,d;a = i%10;                    //提取個位b = (i/10)%10;            //提取十位c = (i/100)%10;           //提取百位d = (i/1000)%10;         //提取千位if(i<=9){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();Delay1ms();}if((i<=99)&&(i>9)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay1ms();}if((i<=999)&&(i>99)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay334us();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay334us();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();Delay334us();}if((i<=9999)&&(i>999)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();P2 = 0x0e;P0 = DIG4_TABLE[d];Delay1ms();}}函式分析:(1)、首先定義了4無符號型別的char資料,用於儲存要顯示資料的相應位。(2)、判斷資料的大小來判斷需要點亮的數碼管位數。(3)、觀察每個每個if判斷語句裡的延時都是4ms,這樣做的原因是 保證再迴圈顯示的過程中,每一位的數碼管亮度一樣。注意事項:延時的選擇不宜過大也不宜過小,過小迴圈的太快,資料顯示不正確;過大顯示閃頻,看不到4位同時顯示的效果

(03)3、主函式void main(){int i,j;P0M0 = 0xff;P0M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;while(1){i++;j = 99;while(j--){Dig_OutPut(i);}}函式分析:(1)、定義兩個整數型變數,i作為要顯示的數,j延時技術。(2)、STC12系列微控制器的使用IO口的時候需要進行設定io的工作模式,上面設定位傳統51工作模式,即若上拉。(3)、while(1)重複執行這個函式裡的內容,也就是動態顯示。(4)、while(j--)的作用是間隔性的對i增加,如果直接執行的話,數字跑的太快我們根本就看不清。現在程式到微控制器後:數碼管會從0開始計數,間隔略小於1s。最大值是9999過了9999後就會顯示亂碼,可以新增函式對於大於9999的數進行處理。

(04)原始碼#include<STC12C5A60S2.H>unsigned  char  DIG4_TABLE[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void Delay10ms()//@11.0592MHz{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);}void Delay1ms()//@11.0592MHz{unsigned char i, j;i = 11;j = 190;do{while (--j);} while (--i);}void Delay334us()//@11.0592MHz{unsigned char i, j;i = 4;j = 148;do{while (--j);} while (--i);}void  Dig_OutPut(int i){unsigned char a , b ,c ,d;a = i%10;b = (i/10)%10;c = (i/100)%10;d = (i/1000)%10;if(i<=9){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();Delay1ms();}if((i<=99)&&(i>9)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay1ms();}if((i<=999)&&(i>99)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();Delay334us();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();Delay334us();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();Delay334us();}if((i<=9999)&&(i>999)){P2 = 0x07;P0 = DIG4_TABLE[a];Delay1ms();P2 = 0x0b;P0 = DIG4_TABLE[b];Delay1ms();P2 = 0x0d;P0 = DIG4_TABLE[c];Delay1ms();P2 = 0x0e;P0 = DIG4_TABLE[d];Delay1ms();}}void main(){int i,j;P0M0 = 0xff;P0M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;while(1){i++;j = 99;while(j--){Dig_OutPut(i);}}沒有找到新增原始碼的位置,所以將整個程式碼放在了一個檔案內。實際操作中,可以分成多個檔案便於管理呼叫。

(05)實際的執行效果。後面的跳線有點亂。

4位共陰極數碼管微控制器驅動 第3張
4位共陰極數碼管微控制器驅動 第4張

特別提示

硬體部分 ,最好自己動手做一下。軟體模擬還是有所差別的。

軟體部分在於 迴圈掃描的延時

熱門標籤