|
#i nclude <msp430x14x.h> #i nclude "led.h" unsigned char seg[]={ 0x3f,0x06,0x5b,0x4f, /* 0 1 2 3*/ 0x66,0x6d,0x7d,0x07, /* 4 5 6 7 */ 0x7f,0x6f,0x77,0x7c, /* 8 9 A B */ 0x39,0x5e,0x79,0x71 /* C D E F */ };
void Init_Port(void) { //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口 P1SEL = 0; // 将P1.0 P1.1 P1.2 设置为输出方向 P1DIR |= BIT0; P1DIR |= BIT1; P1DIR |= BIT2; return; } void SHCLK_Hi(void) { //P1.2管脚输出高电平 P1OUT |= BIT2; return; } void SHCLK_Lo(void) { //P1.2管脚输出低电平 P1OUT &= ~(BIT2); return; } void STCLK_Hi(void) { //P1.1管脚输出高电平 P1OUT |= BIT1; return; } void STCLK_Lo(void) { //P1.1管脚输出低电平 P1OUT &= ~(BIT1); return; } void DataOut(unsigned char nValue) { int i; int j; for(i = 0;i < 8;i++) { if ((nValue & 0x01) == 1) { P1OUT |= BIT0;//输出高电平 } else { P1OUT &= ~(BIT0);//输出低电平 } SHCLK_Hi();//时钟高电平,上升沿有效 for(j = 10; j > 0; j--) ;//延迟一点时间 SHCLK_Lo();//时钟低电平 for(j = 10; j > 0; j--) ; nValue >>= 1; } return; } void main(void) { unsigned char nValue;
//初始化时钟 Init_CLK(); //端口初始化 Init_Port(); //清除锁存信号 STCLK_Lo(); //输出0 nValue = 0; DataOut(seg[nValue]); //输出2 nValue = 2; DataOut(seg[nValue]);
//给锁存信号,显示上面的两位数据 STCLK_Hi();
return; } void Init_CLK(void) { unsigned int i; BCSCTL1 = 0X00; //将寄存器的内容清零 //XT2震荡器开启 //LFTX1工作在低频模式 //ACLK的分频因子为1 do { IFG1 &= ~OFIFG; // 清除OSCFault标志 for (i = 0x20; i > 0; i--); } while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1 BCSCTL2 = 0X00; //将寄存器的内容清零 BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1 BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1 }
 |