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

📄 fg4619-touchkey.c

📁 这写C源代码是MSP430单片机的应用程序
💻 C
字号:
//******************************************************************************
//   MSP430xG461x Demo
//
//   Description: A program for the MSP430FG4619 on the 2006 ATC board 
//   to accept I2C information from the touchpad,display it numerically
//   on the LCD, and send it to a host PC for graphical display.This demo
//   connects two MSP430's via the I2C bus. The masterreceives one byte 
//   from the slave. This is the master code. It receivesa single byte as
//   soon as a button connected on P1.0 was pressed.   
//   ACLK = 32kHz, MCLK = SMCLK = TACLK = BRCLK = 1MHz
//
//  THIS IS THE MASTER CODE
//
//                MSP430F2013                 MSP430xG461x
//                    slave                       master
//              -----------------           ------------------
//            -|XIN      SDA/P1.7|<------->|P3.1/UCB0SDA    XIN|-
//       32kHz |                 |         |                   | 32kHz
//            -|XOUT             |         |               XOUT|-
//             |         SCL/P1.6|<------->|P3.2/UCB0SCL   P2.4|----
//             |                 |         |                   | 9600
//             |                 |         |               P2.5|----
//  Note: internal pull-ups are used in this example for SDA & SCL
//
//   FengLF
//   LSD SCIENCE& TECHNOLOGY CO.,LTD 
//   2007.07
//   Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include <stdint.h>
#include <msp430xG46x.h>
#include <stdint.h>
#include <msp430xG46x.h>

#define FALSE 0
#define TRUE (!FALSE)

/* Define the segment pattern for the characters we need on the LCD */
#define CHAR_ALL            (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g|SEG_h)
#define CHAR_SPACE          0
#define CHAR_MINUS          (SEG_g)
#define CHAR_0              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f)
#define CHAR_1              (SEG_b|SEG_c)
#define CHAR_2              (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g)
#define CHAR_3              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g)
#define CHAR_4              (SEG_b|SEG_c|SEG_f|SEG_g)
#define CHAR_5              (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_6              (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_7              (SEG_a|SEG_b|SEG_c)
#define CHAR_8              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_9              (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g)
#define CHAR_A              (SEG_a|SEG_b|SEG_c|SEG_e|SEG_f|SEG_g)
#define CHAR_B              (SEG_c|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_C              (SEG_a|SEG_d|SEG_e|SEG_f)
#define CHAR_D              (SEG_b|SEG_c|SEG_d|SEG_e|SEG_g)
#define CHAR_E              (SEG_a|SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_F              (SEG_a|SEG_e|SEG_f|SEG_g)
#define CHAR_t              (SEG_d|SEG_e|SEG_f|SEG_g)
#define CHAR_all           (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g|SEG_h)

/* Define the segment bit pattern for the way the LCD is wired up on the board */
#define SEG_a       0x01
#define SEG_b       0x02
#define SEG_d       0x04
#define SEG_g       0x08
#define SEG_c       0x10
#define SEG_f       0x20
#define SEG_h       0x40
#define SEG_e       0x80

const unsigned  char lcd_digit_table[18] =
{
    CHAR_0,
    CHAR_1,
    CHAR_2,
    CHAR_3,
    CHAR_4,
    CHAR_5,
    CHAR_6,
    CHAR_7,
    CHAR_8,
    CHAR_9,
    CHAR_A,
    CHAR_B,
    CHAR_C,
    CHAR_D,
    CHAR_E,
    CHAR_F,
    CHAR_MINUS,
    CHAR_SPACE
};

unsigned int  xxx = 0;
void configure_i2c_usci0(void);
void init_lcd(void);
void LCDdisplay(uint16_t val, int pos);
void configure_uart_usci0(void);

void main(void)
{
  WDTCTL = WDTPW | WDTHOLD;               // 关看门狗
  configure_uart_usci0();                 // 初始化UART通信
  configure_i2c_usci0();                  // 初始化I2C通信
  init_lcd();                             // 初始化LCD
  P5DIR |= BIT1;                          // P5.1输出方向
  P5OUT &= ~BIT1;                         // 关闭 LED
  _EINT();
  for (;;)
  {
    LCDdisplay(xxx, 3);                   // LCD 显示
  }
}
void init_lcd(void)
{
  int i;
  BTCTL = BT_fCLK2_DIV128 ;               // Flcd = ACLK/128
  for (i = 0;  i < 20;  i++)
  LCDMEM[i] = 0;                          // LCD清屏
  P5SEL |= (BIT4 | BIT3 | BIT2);          // 选择LCD的COM端
  P5DIR |= (BIT4 | BIT3 | BIT2);
  LCDACTL = LCDFREQ_128 | LCD4MUX | LCDSON | LCDON;
  LCDAPCTL0 = LCDS0 | LCDS4 | LCDS8 | LCDS12 | LCDS16 | LCDS20 | LCDS24;
  LCDAPCTL1 = 0;                          
  LCDAVCTL0 = LCDCPEN;
  LCDAVCTL1 = 1 << 1;
}

void LCDdisplay(uint16_t val, int pos)
{
  int i;
  for (i = 2;  i >= 0;  i--)
  {
    LCDMEM[9 - (pos + i)] = lcd_digit_table[val%10];
    val /= 10;
   }
}

void configure_uart_usci0(void)
{
  unsigned int i ;
  FLL_CTL0 |= XCAP14PF;
   do
   {
   IFG1 &= ~OFIFG;                           
   for(i=0;i<50000;i++);
   }
  while ((IFG1 & OFIFG)); 
  UCA0CTL0 |= UCPEN+UCMSB;               // 8位字符,奇校验
  UCA0CTL1 |= UCSSEL1 ;                  // 时钟源为SMCLK,1M
  UCA0BR0 =0x6D;                         // 设置拨特率为1M/109=9600
  UCA0BR1 =0x00;
  UCA0MCTL = UCBRF_2;                    // 小数部分调整
  P2SEL |= BIT4+BIT5;                    // P2.4,P2.5用作 USART0 TXD/RXD
  P2DIR |= BIT1+BIT4;                    // P2.4 P2.0输出
  UCA0CTL1 &= ~UCSWRST;                  // 进入操作模式  
  IE2 |= UCA0RXIE;                       // 使能 USART0接收中断
}

void configure_i2c_usci0(void)
{
  P3SEL |= (BIT2 | BIT1);
  UCB0CTL1 |= UCSWRST;                    // 复位
  UCB0CTL0 = UCMODE_3 | UCSYNC;           // I2C从机, 同步模式
  UCB0I2COA = 0x48;                       // 从机地址
  UCB0CTL1 &= ~UCSWRST;                   // 清 SW  
  UCB0I2CIE |= (UCSTPIE | UCSTTIE);       // 使能 STT 、 STP 中断
  IE2 |= UCB0RXIE;                        // 开接收中断
}

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
    xxx =
    UCA0TXBUF = UCB0RXBUF;                // 发送接收到的数据
    LPM0_EXIT; 
}

#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
    UCB0STAT &= ~(UCSTPIFG | UCSTTIFG);  //  清中断标志
    
}

⌨️ 快捷键说明

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