⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 449stk2.c

📁 430系列单片机,真是郁闷,为什么一定要够20个字啊
💻 C
字号:
//******************************************************************************

#include  <msp430x44x.h>
//#include  <io430x44x.h>

#define          B1                 P3IN & BIT4       //B1 - P4.4
#define          B2                 P3IN & BIT5       //B2 - P4.5
#define          B3                 P3IN & BIT6       //B3 - P4.6
#define          B4                 P3IN & BIT7       //B4 - P4.7
#define          STATUS_LED         BIT3              //STATUS_LED - P1.3
#define          time               200
#define          time_s             200
#define          BUZ1_ON            P1OUT |= BIT0     //P4.2
#define          BUZ1_OFF           P1OUT &= ~BIT0    //P4.2
#define          BUZ2_ON            P1OUT |= BIT2     //P4.3
#define          BUZ2_OFF           P1OUT &= ~BIT2    //P4.3
#define          DALLAS             P2IN & BIT7       //P2.7 - DALLAS
#define          CR                 0x0d
#define          LF                 0x0a
#define          LED_OFF            P1OUT |= BIT3
#define          LED_ON             P1OUT &= ~BIT3


//LCD digit segments


unsigned char i,time_segment,TXData;
unsigned int j;

const unsigned char UART_Message [] = "http://www.olimex.com/dev";


void Delay (unsigned int a);
void DelayX(unsigned int b);
void Clear_LCD(void);
void LCD_all(void);
void BUZZER (void);
void UART_transmit (unsigned char Transmit_Data);

void main(void)
{
//++++++++++++++++++++++++++++++
  WDTCTL = WDTPW | WDTHOLD;                      // stop watchdog timer

  FLL_CTL0 &= ~XTS_FLL;                           // XT1 as low-frequency
  _BIC_SR(OSCOFF);                               // turn on XT1 oscillator

  do                                             // wait in loop until crystal is stable
    IFG1 &= ~OFIFG;
  while (IFG1 & OFIFG);

  FLL_CTL1 &= ~FLL_DIV0;                              // ACLK = XT1
  FLL_CTL1 &= ~FLL_DIV1;


  IFG1 &= ~OFIFG;                                // clear osc. fault int. flag
  FLL_CTL1 &= ~SELM0;                             // set DCO as MCLK
  FLL_CTL1 &= ~SELM1;


//++++++++++++++++++++++++++++++



//  SVSCTL = 0x68;                                    //brown out

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

//  SCFI0 = BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7;	
//  SCFI0 |= FN_4;														// x2 DCO frequency, 8MHz nominal DCO
//  SCFQCTL = SCFQ_1M;			

//  FLL_CTL0 = /*DCOPLUS + */XCAP10PF;                  //Set load Cap. for Cristal = 10pF  																// x2 DCO frequency, 8MHz nominal DCO	

//  FLL_CTL1 |= SELM_XT2;                             //Select XT2 for CPU MCLK
//  SCFI1 = 0;
//  SCFQCTL = SCFQ_M | SCFQ_1M;                       //M=1, 1Mhz
//  _BIS_SR(SCG0+SCG1);                               //disable DCO in status_reg
//  DelayX(200);


//UART ini
  U1TCTL = SSEL0;                                     //UCLOCK = ACLK
  U1BR0 = 0x03;                                       //BAUD RATE = 9600
  U1BR1 = 0x00;
  U1MCTL = 0x4a;                                      //with modulation
  U1CTL = CHAR;                                       //Start 8bit 1stop, N
  ME2 = UTXE1 | URXE1;                                //enable RX and TX
  P4SEL |= BIT0 | BIT1;                               //select UART pins
  P4DIR |= BIT0;                                      //port direction for TXD0
  P4DIR &= ~BIT1;                                     //port direction for RXD0
//  IE1 |= URXIE0;                                    // Enable USART0 RX interrupt
//  _EINT();                                          // Enable interrupts
//  U1CTL &= ~SWRST;                                  //reset UART logic



//LCD ini
  Clear_LCD();
  TACTL = TASSEL0 | TACLR;                                //set timer_A
  LCDCTL = LCDON + LCD4MUX + LCDP0 + LCDP1 + LCDP2;       // STK LCD 4Mux, S0-S39
  BTCTL = BT_fLCD_DIV64;                                  // STK LCD freq ACLK/64
  P5SEL = 0xFC;                                           // Common and Rxx all selected

//IO port ini

  P1SEL=BIT5;                                             //p1.5 is 32768Hz
  P1DIR=BIT5 | BIT3 | BIT0 | BIT2;                        //BUZ,LED are outputs

  LCD_all();                                              //light all LCD segments

  for (i=0; i!=15; i++)
    {
      LED_ON;
      DelayX(60);
      LED_OFF;
      DelayX(60);
    }

  UART_transmit (CR);                                     //send message by RS232
  UART_transmit (LF);
  for (i=0; i!=26; i++)  UART_transmit (UART_Message[i]);
  UART_transmit (CR);
  UART_transmit (LF);

//---------------MAIN LOOP-----------------------------------

  while (1)
    {

     if ((IFG2 & URXIFG1) != 0) UART_transmit (U1RXBUF+1);      //test RS 232 (echo+1)

     while ((DALLAS) == 0) BUZZER();                            //test DALLAS button

L1:  if ((B1) == 0) Clear_LCD();
     if ((B2) == 0) LCD_all();

     if ((B3) == 0)
       {
        time_segment=100;
        for (i=0; i!= 20; i++)
         {
           for (j=0; j!=9; j++)
            {
              LCDMEM[i] = (BIT0 << j);
              if ((IFG2 & URXIFG1) != 0) UART_transmit (U1RXBUF+1);      //test RS 232 (echo+1)
              DelayX(time_segment);
              if((B1) == 0 ) goto L1;
              if((B2) == 0 ) goto L1;
              if((B4) == 0 )
                {
                  LCD_all();
                  goto L1;
                }
            }
         }
       }
      if((B4) == 0)
        {
           BUZZER();
           P1OUT &= ~STATUS_LED;                 //switch on status_led
        }
      else  P1OUT |= STATUS_LED;            //switch off status led
    }
}


void Delay (unsigned int a)                           //9+a*12 cycles
{
  unsigned int l;
  for (l=0 ; l != a; l++);
}

void Clear_LCD(void)
{
for (i=0; i!= 20; i++) LCDMEM[i]=0x00;                  //clear Sxx
}

void LCD_all(void)
{
for (i=0; i!= 20; i++) LCDMEM[i]=0xff;                  //turnon all LCD segments
}

void DelayX(unsigned int b)
{
unsigned int m;
for(m=0;m!=b;m++) Delay(255);
}

void BUZZER (void)
{
  BUZ1_OFF;
  BUZ2_ON;
  Delay(40);
  BUZ2_OFF;
  BUZ1_ON;
  Delay(40);
}

void UART_transmit (unsigned char Transmit_Data)              //UART1 Transmit Subroutine
{
  while ((IFG2 & UTXIFG1) == 0);                              //Wait for ready U1TXBUF
  U1TXBUF = Transmit_Data;                                    //send data
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -