新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430單片機(jī)實(shí)踐篇-數(shù)碼管顯示-74HC595動(dòng)態(tài)掃描

MSP430單片機(jī)實(shí)踐篇-數(shù)碼管顯示-74HC595動(dòng)態(tài)掃描

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
一、學(xué)習(xí)要點(diǎn):
利用74HC595進(jìn)行數(shù)碼管顯示,可以只占用3個(gè)單片機(jī)的I/O口就能完成數(shù)碼管顯示的功能。動(dòng)態(tài)掃描方式則進(jìn)一步節(jié)省了硬件資源,只使用2個(gè)74HC595就能顯示多達(dá)8位數(shù)碼管。
二、程序執(zhí)行效果:
本實(shí)驗(yàn)所需使用的硬件電路為2個(gè)試驗(yàn)板:MSP430F135核心實(shí)驗(yàn)板+8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊
將MSP430F135核心實(shí)驗(yàn)板上的P5.4、P5.2、P5.0分別與8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的 LATCH、CLK、 DOUT連接,并將8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的GND、VCC連接好。如下圖
P5.0—— DOUTP5.2——CLKP5.4—— LATCH

如下圖所示:在8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊上的8個(gè)數(shù)碼管上顯示數(shù)字 4 3 2 1。本例中只使用了其中的4位數(shù)碼管,讀者可進(jìn)行簡單的更改使其顯示達(dá)到8位。

三、原理講解:
查看8位數(shù)碼管動(dòng)態(tài)掃描顯示模塊的原理。如圖所示,2片74HC595分別用于段碼與位碼的輸出。實(shí)驗(yàn)板上數(shù)碼管為共陽,因此當(dāng)位碼為1、段碼為0時(shí)點(diǎn)亮。
動(dòng)態(tài)掃描的原理:輸出第1位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第1位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。輸出第2位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第2位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。輸出第3位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第3位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。。。。輸出第8位的位碼,緊接著輸出該位要顯示的段碼,然后使LATCH由0跳變到1使74HC595鎖存并輸出數(shù)據(jù),此時(shí)第8位將顯示,其它位全部都不顯示。 延時(shí)一段時(shí)間。如此循環(huán)往復(fù),實(shí)現(xiàn)8位數(shù)碼管顯示的效果。
四、操作步驟:
(1)按照IAR MSP430 項(xiàng)目建立與JTAG仿真設(shè)置所講方法建立名稱為 M13x LED 595 的項(xiàng)目。(2)將如下程序拷貝粘貼到main.c文件中。
//*******************************************************************************//// 描述; 在TY-DIS1(8位數(shù)碼管顯示模塊)上動(dòng)態(tài)掃描顯示 4321// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k//// 硬件連接:如下圖// MSP430F13x// -----------------// /|| XIN|- // | | |// --|RST XOUT|-// | |// | P5.0|-->LED_DOUT// | P5.2|-->LED_CLK// | P5.4|-->LED_LATCH//// 時(shí)間:2007年10月// 硬件電路:MSP430F135核心實(shí)驗(yàn)板-I型 + TY-DIS1(8位數(shù)碼管顯示模塊)// 硬件連接: //// 調(diào)試器:MSP430FET全系列JTAG仿真器// 調(diào)試軟件: IAR Embedded Workbench Version: 3.41A 編譯//******************************************************************************
#include <msp430x13x.h>
//4位LED數(shù)碼管顯示子程序
void LED_595(char SMG1,char SMG2,char SMG3,char SMG4);
//74HC595串行輸出子程序
void Led_out(unsigned char X);
//LED數(shù)碼管段碼轉(zhuǎn)換表
const unsigned char LED_0_F[];
void main(void)
{WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
P5DIR =0; //P5口全部設(shè)為輸入口
P5SEL =0; //將P5口所有的管腳設(shè)置為一般I/O口
//將P5.0 P5.2 P5.4設(shè)置為輸出方向
P5DIR |= BIT0;P5DIR |= BIT2;P5DIR |= BIT4;
for (;;) {LED_595(4,3,2,1);//調(diào)用顯示子程序(改變參數(shù)表,改變顯示內(nèi)容)
}
}
//------------------------------------------------------
// 4位LED數(shù)碼管顯示子程序//
// 人口參數(shù):SMG1,SMG2,SMG3,SMG4——待顯示的數(shù)據(jù)
//void LED_595(char SMG1,char SMG2,char SMG3,char SMG4)
{char z;//最高位(最左側(cè))LED數(shù)碼管顯示---------------------
z = LED_0_F[SMG1];
Led_out(z); //段碼輸出
z = 0xFE; //位碼
Led_out(z); //位碼輸出
P5OUT &=~(BIT4); //顯示輸出
P5OUT |=BIT4;
//--------------------------------------------------
_NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
//次高位(左數(shù)第2個(gè))LED數(shù)碼管顯示---------------------
z = LED_0_F[SMG2];
Led_out(z); //段碼輸出
z = 0xFD; //位碼
Led_out(z); //位碼輸出
P5OUT &=~(BIT4); //顯示輸出
P5OUT |=BIT4;
//--------------------------------------------------
_NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
//次低位(左數(shù)第3位)LED數(shù)碼管顯示--------------------
z = LED_0_F[SMG3];Led_out(z); //段碼輸出
z = 0xFB; //位碼
Led_out(z); //位碼輸出
P5OUT &=~(BIT4); //顯示輸出
P5OUT |=BIT4;//--------------------------------------------------
_NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
//最低位(左數(shù)第4位)LED數(shù)碼管顯示---------------------
z = LED_0_F[SMG4];Led_out(z); //段碼輸出
z = 0xF7; //位碼
Led_out(z); //位碼輸出
P5OUT &=~(BIT4); //顯示輸出
P5OUT |=BIT4;//--------------------------------------------------
_NOP(); // 斷點(diǎn)設(shè)置(觀察watch)
}
//------------------------------------------------------
// 用于74HC595的LED串行移位子程序//
// 人口參數(shù):X——待輸出的數(shù)據(jù)//
void Led_out(unsigned char X)
{unsigned char i;for(i=8;i>0;i--)
{if (X&0x80) P5OUT |=BIT0;
else P5OUT &=~(BIT0);X<<=1;
P5OUT &= ~(BIT2); //P5.2管腳輸出低電平
P5OUT |= BIT2; //P5.2管腳輸出高電平
}
}
//------------------------------------------------------
// LED段碼轉(zhuǎn)換表0——F
//------------------------------------------------------
const unsigned char LED_0_F[] =
{// 0 1 2 3 4 5 6 7 8 9 A b c d E F 不顯示 - o(18)H(19)h(20)C(21)0(22)n(23)
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab
};
(3)按照IAR MSP430 項(xiàng)目編譯與JTAG仿真調(diào)試所講述方法進(jìn)行項(xiàng)目編譯與JTAG調(diào)試運(yùn)行,即可看到程序運(yùn)行效果。


評論


技術(shù)專區(qū)

關(guān)閉