4位共陰極數碼管單片機驅動
宏晶12系列單片機單片機驅動4位數碼管計數顯示。
操作方法
(01)1、共陰極數碼管引腳分析共陰極數碼管 是指每一位數碼管的陰極,連接到電源的負極上。也就是圖中所指1,2,3,4公共端。如果不知道是共陰極和共陽極可以用萬用表,或者直接找一個電源試一試。電源測試的話最好串一個限流電阻,否則容易燒壞數碼管。
(02)2、電路原理圖P0:控制顯示段P2:控制顯示相應的位由於單片機的I/O驅動電流有限所以P0口需要加上拉電阻。P2口直接連接數碼管的選擇位即可。
軟件的編寫
(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)實際的執行效果。後面的跳線有點亂。
特別提示
硬件部分 ,最好自己動手做一下。軟件模擬還是有所差別的。
軟件部分在於 循環掃描的延時
-
stdole32.tlb丟失或損壞怎麼辦
Excel是我們辦公時候最常用的辦公軟件之一,但是有些win7專業版用戶在使用Excel的過程中出現了“某個對象程序庫丟失或損壞”的警告,這究竟是怎麼回事呢?雖然有這個錯誤提示,但是Excel大部分功能還是可以正常使用的。下面由小編給大家介紹一下丟失或損壞的解決方法...
-
Excel中身份證號計算年齡公式是什麼
Excel是一款電子表格軟件,直觀的介面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成爲最流行的個人計算機數據處理軟件。那麼EXCEL中身份證號計算年齡公式是什麼呢,下面我們就來了解一下。操作方法(01)在單元格中輸入“=2018-MID(D4,7,)”。(02)D4表示身份證...
-
顯卡位寬有哪些,有什麼區別
爲了更好的相容,更好的DIY,我們需要了解一下顯卡的位寬有哪些,有什麼區別。操作方法(01)顯卡位寬,主流有128bit還有64bit、128bit、256bit,顯存的位寬越高,顯卡的性能也就越好。(02)主流顯卡採用128bit位寬,128位的顯存能夠適應大多數遊戲。(03)顯存的帶寬=顯存頻率*顯存位...
-
如何使用QQ雲盤呢?怎麼使用微雲呢?
現在雲盤比較流行,隨着網絡的發展,以前的U盤現在逐步減少,網絡雲盤可以透過網絡盤幫我們儲存資料,不需要再隨身攜帶U盤了。下面和大家談下如何使用qq雲盤?操作方法(01)在電腦上登入QQ。(02)點擊微雲圖標進入微雲。(03)日常筆記可以在“筆記”欄開啟,然後點擊新建一個檔案。...