一、学习关键:
运用74HC595进行数码管显现,能够只占用3个单片机的I/O口就能完结数码管显现的功用。动态扫描办法则进一步节省了硬件资源,只运用2个74HC595就能显现多达8位数码管。
二、程序履行作用:
本试验所需运用的硬件电路为2个试验板:MSP430F135中心试验板+8位数码管动态扫描显现模块
将MSP430F135中心试验板上的P5.4、P5.2、P5.0别离与8位数码管动态扫描显现模块上的 LATCH、CLK、 DOUT衔接,并将8位数码管动态扫描显现模块上的GND、VCC衔接好。如下图
P5.0—— DOUTP5.2——CLKP5.4—— LATCH
如下图所示:在8位数码管动态扫描显现模块上的8个数码管上显现数字 4 3 2 1。本例中只运用了其间的4位数码管,读者可进行简略的更改使其显现到达8位。
三、原理解说:
检查8位数码管动态扫描显现模块的原理。如图所示,2片74HC595别离用于段码与位码的输出。试验板上数码管为共阳,因而当位码为1、段码为0时点亮。
动态扫描的原理:输出第1位的位码,紧接着输出该位要显现的段码,然后使LATCH由0跳变到1使74HC595锁存并输出数据,此刻第1位将显现,其它位悉数都不显现。 延时一段时刻。输出第2位的位码,紧接着输出该位要显现的段码,然后使LATCH由0跳变到1使74HC595锁存并输出数据,此刻第2位将显现,其它位悉数都不显现。 延时一段时刻。输出第3位的位码,紧接着输出该位要显现的段码,然后使LATCH由0跳变到1使74HC595锁存并输出数据,此刻第3位将显现,其它位悉数都不显现。 延时一段时刻。。。。输出第8位的位码,紧接着输出该位要显现的段码,然后使LATCH由0跳变到1使74HC595锁存并输出数据,此刻第8位将显现,其它位悉数都不显现。 延时一段时刻。如此循环往复,完成8位数码管显现的作用。
四、操作过程:
(1)依照IAR MSP430 项目树立与JTAG仿真设置所讲办法树立名称为 M13x LED 595 的项目。(2)将如下程序复制粘贴到main.c文件中。
//*******************************************************************************//// 描绘; 在TY-DIS1(8位数码管显现模块)上动态扫描显现 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//// 时刻:2007年10月// 硬件电路:MSP430F135中心试验板-I型 + TY-DIS1(8位数码管显现模块)// 硬件衔接: //// 调试器:MSP430FET全系列JTAG仿真器// 调试软件: IAR Embedded Workbench Version: 3.41A 编译//******************************************************************************
#include <msp430x13x.h>
//4位LED数码管显现子程序
void LED_595(char SMG1,char SMG2,char SMG3,char SMG4);
//74HC595串行输出子程序
void Led_out(unsigned char X);
//LED数码管段码转化表
const unsigned char LED_0_F[];
void main(void)
{WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
P5DIR =0; //P5口悉数设为输进口
P5SEL =0; //将P5口一切的管脚设置为一般I/O口
//将P5.0 P5.2 P5.4设置为输出方向
P5DIR |= BIT0;P5DIR |= BIT2;P5DIR |= BIT4;
for (;;) {LED_595(4,3,2,1);//调用显现子程序(改动参数表,改动显现内容)
}
}
//——————————————————
// 4位LED数码管显现子程序//
// 人口参数:SMG1,SMG2,SMG3,SMG4——待显现的数据
//void LED_595(char SMG1,char SMG2,char SMG3,char SMG4)
{char z;//最高位(最左边)LED数码管显现———————
z = LED_0_F[SMG1];
Led_out(z); //段码输出
z = 0xFE; //位码
Led_out(z); //位码输出
P5OUT &=~(BIT4); //显现输出
P5OUT |=BIT4;
//————————————————–
_NOP(); // 断点设置(调查watch)
//次高位(左数第2个)LED数码管显现———————
z = LED_0_F[SMG2];
Led_out(z); //段码输出
z = 0xFD; //位码
Led_out(z); //位码输出
P5OUT &=~(BIT4); //显现输出
P5OUT |=BIT4;
//————————————————–
_NOP(); // 断点设置(调查watch)
//次低位(左数第3位)LED数码管显现——————–
z = LED_0_F[SMG3];Led_out(z); //段码输出
z = 0xFB; //位码
Led_out(z); //位码输出
P5OUT &=~(BIT4); //显现输出
P5OUT |=BIT4;//————————————————–
_NOP(); // 断点设置(调查watch)
//最低位(左数第4位)LED数码管显现———————
z = LED_0_F[SMG4];Led_out(z); //段码输出
z = 0xF7; //位码
Led_out(z); //位码输出
P5OUT &=~(BIT4); //显现输出
P5OUT |=BIT4;//————————————————–
_NOP(); // 断点设置(调查watch)
}
//——————————————————
// 用于74HC595的LED串行移位子程序//
// 人口参数:X——待输出的数据//
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段码转化表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 项目编译与JTAG仿真调试所叙述办法进行项目编译与JTAG调试运转,即可看到程序运转作用。