MSP430F5529实现四位数码管数字显示
一、四位數碼管
1.四位數碼管的分類
四位數碼管使一種半導體發光器件,其基本單元為發光二極管。按照發光二極管連接方式可以分為共陽極數碼管和共陰極數碼管。
共陽數碼管使指將所有發光二極管的陽極接在一起形成公共陽極的數碼管。當某一字段發光二極管的陰極為高電平時,相應字段被點亮,當某一字段的陽極為低電平時,相應字段不亮。
共陰數碼管是指將所有發光二極管陰極接在一起形成公共陰極的數碼管。當某一字段發光二極管的陽極為高電平時,相應字段被點亮,當某一字段的陽極為低電平時,相應字段不亮。
2.四位數碼管的引腳圖
引腳排列以左下角的1管腳開始,以逆時針方向依次為1~12管腳。其中A,B,C,D,E,F,G,DP為段引腳,DIG.1,DIG.2,DIG.3,DIG.4分別代表四個數碼管的位。
3.四位數碼管的驅動方式
靜態驅動
靜態驅動是指每個數碼管每一個段碼都由一個單片機的I/0口進行驅動,優點是編程簡單,顯示亮度高,但是缺點是占用的I/O多,驅動4個8段數碼管需要32個I/O端口,容易造成硬件資源的浪費,增加了硬件電路的復雜性,減低了可靠性。
動態驅動
數碼管動態顯示是單片機應用最為廣泛的一種顯示方式。通過共用A,B,C,D,E,F,G,DP這8個段引腳,為每個數碼管公共極增加位選通端,位選通端由各自獨立的I/O端口控制。
當單片機顯示某一數字時,所有數碼管都接受相同的數字,但哪一位顯示數字取決于單片機第對四位數碼管選通段的控制,只要需要顯示的數碼管的選通段置為高電平(低電平),其他選通端置為低電平(高電平),這一位數碼管就可以正常顯示數字,其他位不會顯示。給較小的延遲(1~2ms),再讓其他位的數碼管依次顯示對應的數字,就可以實現各個數碼管輪流受控顯示。
由于人的視覺暫留效應和發光二極管的余輝效應,盡管實際上各位數碼管并非同時顯示數字,但延時時間足夠短,人眼看到的就是一組穩定顯示的數字,動態顯示的效果和靜態顯示的效果是一樣的。
動態驅動能夠節省大量的I/O端口,而且功耗更低,因此應用更加廣泛。
二、MSP430F5529單片機
引腳圖
實物圖
三、使用四位數管同時顯示兩個不同的兩位數
本次代碼要實現的目的是使用數碼管顯示不同的兩位數。
MSP430F5529的I/O端口與數碼管引腳對應情況為:
| 1(E) | P3.2 |
| 2(D) | P2.7 |
| 3(DP) | P4.2 |
| 4( C ) | P4.1 |
| 5(G) | P4.3 |
| 6(DIG.4) | P6.3 |
| 7(B) | P4.0 |
| 8(DIG.3) | P6.2 |
| 9(DIG.2) | P6.1 |
| 10(F) | P3.7 |
| 11(A) | P8.2 |
| 12(DIG.1) | P6.0 |
代碼如下:
#include <msp430.h> /*** main.c* author:wgx*/ #define DelayTime 8000void display_number(int number) {switch(number){case 1:P4OUT |= BIT1;//顯示1P4OUT |= BIT0;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT3;P3OUT &=~ BIT7;P8OUT &=~ BIT2;break;case 2:P8OUT |= BIT2;//顯示2P4OUT |= BIT0;P4OUT |= BIT3;P3OUT |= BIT2;P2OUT |= BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT1;P3OUT &=~ BIT7;break;case 3:P8OUT |= BIT2;//顯示3P4OUT |= BIT0;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT &=~ BIT2;P4OUT &=~ BIT2;P3OUT &=~ BIT7;break;case 4:P3OUT |= BIT7;//顯示4P4OUT |= BIT3;P4OUT |= BIT0;P4OUT |= BIT1;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P8OUT &=~ BIT2;break;case 5:P8OUT |= BIT2;//顯示5P3OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT &=~ BIT2;P4OUT &=~ BIT2;P4OUT &=~ BIT0;break;case 6:P8OUT |= BIT2;//顯示6P3OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT |= BIT2;P4OUT &=~ BIT2;P4OUT &=~ BIT0;break;case 7:P8OUT |= BIT2;//顯示7P4OUT |= BIT0;P4OUT |= BIT1;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT3;P3OUT &=~ BIT7;break;case 8:P8OUT |= BIT2;//顯示8P4OUT |= BIT0;P4OUT |= BIT1;P3OUT |= BIT2;P2OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT0;P3OUT |= BIT7;P8OUT |= BIT2;break;case 9:P8OUT |= BIT2;//顯示9P4OUT |= BIT0;P4OUT |= BIT1;P2OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT0;P3OUT |= BIT7;P8OUT |= BIT2;P3OUT &=~ BIT2;break;case 0:P8OUT |= BIT2;//顯示0P4OUT |= BIT0;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT |= BIT2;P3OUT |= BIT7;P8OUT |= BIT2;P4OUT &=~ BIT3;break;} }void IOint()//I/O端口初始化 {P3DIR |= BIT2;//E1P2DIR |= BIT7;//D2P4DIR |= BIT2;//DP3P4DIR |= BIT1;//C4P4DIR |= BIT3;//G5P4DIR |= BIT0;//B7P3DIR |= BIT7;//F10P8DIR |= BIT2;//A11 P6DIR |= BIT0;//DIG1P6DIR |= BIT1;//DIG2P6DIR |= BIT2;//DIG3P6DIR |= BIT3;//DIG46.3P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT1;P4OUT &=~ BIT3;P4OUT &=~ BIT0;P3OUT &=~ BIT7;P8OUT &=~ BIT2; P6OUT |=BIT0;P6OUT |=BIT1;P6OUT |=BIT2;P6OUT |=BIT3; }void display_dig1(int number)//數碼管第一位顯示 {P6OUT &=~ BIT0;P6OUT |=BIT1;P6OUT |=BIT2;P6OUT |=BIT3;display_number(number); }void display_dig2(int number)//數碼管第二位顯示 {P6OUT &=~ BIT1;P6OUT |= BIT0;P6OUT |= BIT2;P6OUT |= BIT3;display_number(number); } void display_dig3(int number)//數碼管第三位顯示 {P6OUT &=~ BIT2;P6OUT |= BIT1;P6OUT |= BIT0;P6OUT |= BIT3;display_number(number); } void display_dig4(int number)//數碼管第四位顯示 {P6OUT &=~ BIT3;P6OUT |= BIT1;P6OUT |= BIT2;P6OUT |= BIT0;display_number(number); } void temperaturepwm_digital_display(int temperature,int pwm) //將兩個兩位數轉換為四個個位數并進行顯示 {int dig1,dig2,dig3,dig4;dig1 = temperature/10;dig2 = temperature - dig1*10;dig3 = pwm/10;dig4 = pwm - dig3*10;while(1){display_dig1(dig1);//第一位顯示__delay_cycles(DelayTime);//延遲display_dig2(dig2);//第二位顯示__delay_cycles(DelayTime);//延遲display_dig3(dig3);//第二位顯示__delay_cycles(DelayTime);//延遲display_dig4(dig4);//第二位顯示__delay_cycles(DelayTime);//延遲} } int main(void) {int temperature = 45;//定義兩個要顯示的兩位數int pwm = 66;WDTCTL = WDTPW | WDTHOLD; // 關閉看門狗IOint();temperaturepwm_digital_display(temperature,pwm);return 0; }總結
以上是生活随笔為你收集整理的MSP430F5529实现四位数码管数字显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCS(Code Composer St
- 下一篇: linux系统管理常用命令