📄 fg4619-touchkey.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 + -