[LaunchPad]超音波テスト、デジタルチューブ表示

19673 ワード

  1 #include "io430g2553.h"

  2 

  3 unsigned char    Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  //  

  4 unsigned char    dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //  

  5 

  6 unsigned char LedOut[4];

  7 

  8 unsigned int num =1234;

  9 unsigned int time;

 10 unsigned char i;

 11 

 12 unsigned char RxFlag;

 13 unsigned char Byte_H;

 14 unsigned char Byte_L;

 15 

 16 void selectled(unsigned char led)

 17  {

 18    switch(led)

 19    {

 20    case 0:

 21      P2OUT_bit.P5=0;

 22      P1OUT_bit.P6=1; 

 23      P1OUT_bit.P7=1;

 24      break;

 25    case 1:

 26      P2OUT_bit.P5=1;

 27      P1OUT_bit.P6=0; 

 28      P1OUT_bit.P7=1;

 29      break;

 30    case 2:

 31      P2OUT_bit.P5=1;

 32      P1OUT_bit.P6=1; 

 33      P1OUT_bit.P7=0;

 34      break;

 35    default:

 36      P2OUT_bit.P5=1;

 37      P1OUT_bit.P6=1; 

 38      P1OUT_bit.P7=1;

 39      break;  

 40    }

 41  }

 42  

 43  void showled(unsigned char led)

 44  {

 45  

 46    if(led & 0x01)    P1OUT_bit.P3=1;

 47     else P1OUT_bit.P3=0;

 48     

 49    if(led & 0x02)    P1OUT_bit.P4=1;

 50     else P1OUT_bit.P4=0;

 51     

 52    if(led & 0x04)    P1OUT_bit.P5=1;

 53     else P1OUT_bit.P5=0;

 54     

 55    if(led & 0x08)    P2OUT_bit.P0=1;

 56     else P2OUT_bit.P0=0;

 57     

 58    if(led & 0x10)    P2OUT_bit.P1=1;

 59     else P2OUT_bit.P1=0; 

 60     

 61    if(led & 0x20)    P2OUT_bit.P2=1;

 62     else P2OUT_bit.P2=0; 

 63     

 64    if(led & 0x40)    P2OUT_bit.P3=1;

 65     else P2OUT_bit.P3=0; 

 66     

 67    if(led & 0x80)    P2OUT_bit.P4=1;

 68     else P2OUT_bit.P4=0; 

 69  

 70  }

 71  

 72   int putchar(int ch)

 73  {

 74    while(!(IFG2&UCA0TXIFG));

 75     UCA0TXBUF=ch;

 76     return ch;

 77  }

 78  

 79 

 80   void sendChar(unsigned char c)

 81   {

 82     while(!(IFG2&UCA0TXIFG));

 83     UCA0TXBUF=c;

 84   }

 85 

 86 void main()

 87 {

 88   

 89 WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

 90   

 91 P1DIR=0xff;

 92 P2DIR=0xff;

 93 

 94   P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

 95   P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD

 96   UCA0CTL1 |= UCSSEL_2;                     // SMCLK

 97   UCA0BR0 = 104;                            // 1MHz 9600

 98   UCA0BR1 = 0;                              // 1MHz 9600

 99   UCA0MCTL = UCBRS0;                        // Modulation   UCBRSx = 1

100   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine** 

101   IE2 |= UCA0RXIE;   // Enable USCI_A0 RX interrupt 

102   __bis_SR_register(GIE);

103   

104   

105 while(1)

106 {

107   

108 time++;

109 if(time>50)

110 {

111   time=0;

112   sendChar(0x55);

113   __delay_cycles(1000);

114   if(num>500) P1OUT_bit.P0=1;

115   else P1OUT_bit.P0=0;

116 }

117      LedOut[3]=Disp_Tab[num%10000/1000];       // 

118      LedOut[2]=Disp_Tab[num%1000/100];

119      LedOut[1]=Disp_Tab[num%100/10];           // 

120      LedOut[0]=Disp_Tab[num%10];             // 

121   

122 for(i=0;i<4;i++)

123 {

124   showled(LedOut[i]);

125   selectled(i);

126     __delay_cycles(1000);

127 }

128 }

129 

130 }

131 

132 #pragma vector=USCIAB0RX_VECTOR

133   __interrupt void USCI0RX_ISR(void)

134   {

135  

136   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

137   

138    if(RxFlag == 0)

139    {

140      Byte_H=UCA0RXBUF;

141      RxFlag=1;

142    }

143    else

144    { 

145        Byte_L=UCA0RXBUF;

146        num=Byte_H*256+Byte_L;

147        RxFlag = 0;

148    }

149 }