`
yuanyu5237
  • 浏览: 162845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MSP430单片机控制GSM模块发短信(源码)

 
阅读更多
我这套源码(2个java文件,5个c文件,使用开发环境eclipse+IAR EW for MSP430;实现的功能有,以下代码上有很多不足的地方,仅供参考,如有错误,请予以指正:
java
功能1:上位机读 写串口,  以修改单片机中短信内容
功能2:中文短信的编码
String2Unicode.java
public class String2Unicode {

	public static void main(String[] args) {
		System.out.println(convert("工作愉快!"));
		System.out.println(number("13641285663"));
		String s = composite("13641285663", "工作愉快!");
		System.out.println(s + "\n" + s.length());
		System.out.println((char)Integer.parseInt("26"));
		System.out.println("0891683108100005F0" + s);
		System.out.println("0891683108100005F011000D91683146215866F30008000a5de54f5c61095febff01".length());
		System.out.println((int)'$');
		System.out.println((int)'a');
		System.out.println((int)'_');
		System.out.println("1_25_0891683108100005F011000D91683146215866F30008000a5de54f5c61095febff01$".length());
	}

	public static String composite(String number, String msg) {
		StringBuffer sb = new StringBuffer();
		return sb.append("11000D91").append(number(number)).append("000800")
				.append(convert(msg)).toString();
	}

	public static String number(String str) {
		StringBuffer sb = new StringBuffer();
		StringBuffer sb2 = new StringBuffer();
		int length = str.length();
		if (str.length() % 2 != 0) {
			sb.append(str).append("F");
		}
		sb2.append("68");
		for (int i = 0; i < length; ++i) {
			sb2.append(sb.charAt(i + 1)).append(str.charAt(i));
			++i;
		}
		return sb2.toString();
	}

	public static String convert(String str) {
		String tmp;
		StringBuffer sb = new StringBuffer(1000);
		StringBuffer sb2 = new StringBuffer();
		char c;
		int i, j;
		sb.setLength(0);
		for (i = 0; i < str.length(); i++) {
			c = str.charAt(i);
			if (c > 255) {
				j = (c >>> 8);
				tmp = Integer.toHexString(j);
				if (tmp.length() == 1)
					sb.append("0");
				sb.append(tmp);
				j = (c & 0xFF);
				tmp = Integer.toHexString(j);
				if (tmp.length() == 1)
					sb.append("0");
				sb.append(tmp);
			} else {
				sb.append(c);
			}

		}
		int length = sb.length() / 2;
		tmp = Integer.toHexString(length);
		if (tmp.length() == 1)
			tmp = "0" + tmp;
		sb2.append(tmp).append(sb);
		return sb2.toString();
	}

}

Comm.java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.comm.CommPortIdentifier;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * 
 * @author ydp
 *
 *使用本程序前,请先安装java的串口API
 *(http://llk.media.mit.edu/projects/cricket/software/javaSerial.zip)
 *或
 *(http://www.oracle.com/technetwork/java/index-jsp-141752.html)
 *包括三个文件
 *win32com.dll放到Windows\System32目录下
 *comm.jar放到jdk1.6.0_07\jre\lib\ext目录下
 *javax.comm.properties放到jdk1.6.0_07\jre\lib目录下
 *
 *
 */

public class Comm extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;

	private JButton openCommBtn;
	private JLabel recvLabel;
	private JTextArea recvArea;
	private JScrollPane recvPane;
	private JPanel panelTest;

	private JLabel typeLabel;
	private JComboBox typeComboBox;
	private JLabel phoneNumberLabel;
	private JButton sendMsgBtn;
	private JTextField phoneNumberField;
	private JPanel panelPhone;
	private JTextArea sendMsgArea;
	private JScrollPane  sendMsgPane;
	private JPanel panelBtn;
	private JLabel sendMsgLabel;

	private CommPortIdentifier serialPortId;
	private SerialPort port;

	private JLabel commLabel;
	private JComboBox commComboBox;

	private InputStream in;
	private OutputStream out;
	private String type[] = { "1", "2" };
	private String comm[] = { "COM1", "COM2", "COM3", "COM4", "COM5", "COM6","COM7" };

	public Comm(String title) {
		super(title);
		recvLabel = new JLabel("接收消息");
		recvLabel.setSize(30, 5);
		recvArea = new JTextArea(7, 30);
		recvArea.setEditable(false);
		recvArea.setAutoscrolls(true);
		recvPane = new JScrollPane(recvArea);
	
		typeLabel = new JLabel("协议");
		typeComboBox = new JComboBox(type);
		phoneNumberLabel = new JLabel("  电话号码");
		phoneNumberLabel.setSize(5, 5);
		phoneNumberField = new JTextField(11);
		sendMsgLabel = new JLabel("  发送消息 :  ");
		panelPhone = new JPanel();
		panelPhone.add(typeLabel);
		panelPhone.add(typeComboBox);
		panelPhone.add(phoneNumberLabel);
		panelPhone.add(phoneNumberField);
		panelPhone.add(sendMsgLabel);

		sendMsgArea = new JTextArea(5, 30);
		sendMsgArea.setAutoscrolls(true);
		sendMsgPane = new JScrollPane(sendMsgArea);

		commLabel = new JLabel("串口");
		commComboBox = new JComboBox(comm);
		openCommBtn = new JButton("打开串口");
		sendMsgBtn = new JButton("发送消息 ");
		panelBtn = new JPanel();
		panelBtn.add(commLabel);
		panelBtn.add(commComboBox);
		panelBtn.add(openCommBtn);
		panelBtn.add(sendMsgBtn);

		panelTest = new JPanel();

		panelTest.add(recvLabel);
		panelTest.add(recvPane);
		panelTest.add(panelPhone);
		panelTest.add(sendMsgPane);
		panelTest.add(panelBtn);

		this.pack();
		this.getContentPane().add(BorderLayout.CENTER, panelTest);
		this.setSize(370, 380);
		this.setVisible(true);
		this.setLocation(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		this.openCommBtn.addActionListener(this);
	}

	public static void main(String[] args) {
		new Comm("短信配置工具");
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		try {
			serialPortId = CommPortIdentifier.getPortIdentifier(commComboBox
					.getSelectedItem().toString());
			System.out.println(commComboBox.getSelectedItem().toString());
			port = (SerialPort) serialPortId.open("ydp", 30);
			port.setSerialPortParams(9600, SerialPort.DATABITS_8,
					SerialPort.STOPBITS_1, SerialPort.FLOWCONTROL_NONE);

			in = port.getInputStream();
			out = port.getOutputStream();

		} catch (NoSuchPortException e) {
			e.printStackTrace();
		} catch (PortInUseException e) {
			e.printStackTrace();
		} catch (UnsupportedCommOperationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		Thread t = new Thread(new Runnable() {
			@Override
			public void run() {
				byte[] data = new byte[256];
				while (true) {
					try {
						int length = in.read(data);
						if (0 != length) {
							recvArea
									.append(new String(data, 0, length, "UTF-8") + "\n");
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}

		});
		t.start();

		this.sendMsgBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// System.out.println(sendField.getText());
				// System.out.println(sendMsgArea.getText());
				String s = String2Unicode.composite(phoneNumberField.getText(),
						sendMsgArea.getText());
				StringBuffer sb = new StringBuffer();
				sb.append(typeComboBox.getSelectedItem().toString())
						.append("_").append(s.length() / 2).append("_")
						.append("0891683108100005F0").append(s).append("$");
				System.out.println(sb);
				try {
					// out.write("AT\r\n".getBytes());
					// out.write("AT+CMGF=0\r\n".getBytes());
					// out.flush();
					// Thread.sleep(1000);
					// out.write(("AT+CMGS=" + (s.length() / 2) +
					// "\r\n").getBytes());
					// out.flush();
					// Thread.sleep(1000);
					// out.write(("0891683108100005F0" + s + (char)
					// Integer.parseInt("26") + "\r\n").getBytes());
					// System.out.println("0891683108100005F0" + s + (char)
					// Integer.parseInt("26") + "\r\n");
					out.write(sb.toString().getBytes());
					out.flush();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		});
	}
}

c
功能1:控制GSM模块发送短信
功能2:接收315模块发送的报警指令(包括烟雾,火灾和陌生人入侵信号)
功能3:修改flash中短信内容
UART.h
#include  <stdio.h>
#include <msp430x14x.h>
#include "delay.h"


#define uchar unsigned  char 
#define uint  unsigned  int 


#define   PRINTSUCCESS  0
#define   PRINTNULL     1
#define   PRINTTOOLARGE 2

#define   UARTBUFLEN    100

void    init_uart0(void);
void    R_S_Byte(uchar R_Byte);
unsigned  char  printArr(uchar*  array,  uchar  len);
unsigned  char  printStr(uchar*  string);


unsigned  char  checkUART();

UART.c
#include  "UART.h"
//#include <string.h>

uchar  uart_Buf[UARTBUFLEN];
uchar  buf_count;
uchar  finishFlag; //  0表示没有接收完,1表示接收完一条指令
/*
//======================初始化串口==============================================
void init_uart0(void)
  {
//====================串口工作模式设置========================================
    U0CTL=0x00;      // U0CTL包含串口0通信协议、通信模式、校验位等设置,允许UART0
    U0CTL +=CHAR;    //(CHAR=0x10)当CHAR=0时位7位数据,当 CHAR=1时为8位数据 
                     //不需要校验,数据位为8位,无反馈,异步UART通信,UART被允许
//====================串口发送操作设置========================================
    U0TCTL=0x00;     //U0TCTL包含串口0发送功能操作
    U0TCTL +=SSEL0;  //波特率发生器选择ACLK 
                     //#define SSEL1  (0x20)       #define SSEL0  (0x10)
//====================串口拨特率设置9600====================================
//===================拨特率计算公式:拨特率=BRCLK/(UBR+(M7+M6+。。。。+M0)/8)
    UBR0_0=0x03;     //UBR0_0为串口0波特率整数部分低地址 
    UBR1_0=0x00;     //UBR1_0为串口0波特率整数部分高地址 
    UMCTL_0=0x4A;    //UBR1_0为串口0波特率小数部分高地址 
//===================串口收发使能控制=========================================
    ME1 |= UTXE0;    //串口0发送功能使能
    ME1 |= URXE0;    //串口0接收功能使能    
//===================串口中断使能控制=========================================
    IE1 |= URXIE0;   //串口0接收中断使能
//   IE1 |= UTXIE0;   //串口0发送中断使能
//===================端口第二功能使能=========================================
    P3SEL |=BIT4;    //设置P3。4为UART0 的TXD
    P3SEL |=BIT5;    //设置P3。5为UART0 的RXD
    P3DIR |=BIT4;    //设置P3。4为输出
    
    UCTL0 &= ~SWRST;                          // 初始化UART状态机
  }*/
void init_uart0(void)
{
    P6DIR |= BIT2;P6OUT |= BIT2;              // 关电平转换
    P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    ME1 |= UTXE0 + URXE0;                     // 使能USART0收发
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    IE1 |= URXIE0;                            // 使能接收中断
    
  
}
//==============================================================================
void   R_S_Byte(uchar R_Byte)
{
    while((IFG1&UTXIFG0)==0);	//是否上一个串口数据发送完成
    TXBUF0=R_Byte;
}

unsigned  char  printArr(unsigned char*  array,  unsigned  char  len)
{
  unsigned  char  i=0;
  if(array==NULL)
    return  PRINTTOOLARGE;
  for(i=0;i<len;i++)
  {
   R_S_Byte(array[i]);
  }
  return  PRINTSUCCESS;
}
unsigned  char  printStr(unsigned char*  string)
{
  unsigned  char  i=0;
  if(string==NULL)
    return  PRINTNULL;
  while(1)
  {
   R_S_Byte(string[i]);
   delay_us(100);
   i++;
   if(string[i]==0x00)
     return  PRINTSUCCESS;
   if(i==255)
     return  PRINTTOOLARGE;
  }
  
}

/*接收中断函数,将接收到的字符放在uart_Buf中,收到$表示一条命令接收完成*/
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
  //LPM3_EXIT;//退出低功耗模式。
  if(finishFlag==0)
  {
    uart_Buf[buf_count]=RXBUF0;
    buf_count++;
    if(uart_Buf[buf_count-1]=='$'||buf_count>=UARTBUFLEN)//实际buffer的可用空间是UARTBUFLEN-1
    {
      buf_count=0;
      finishFlag=1;
      //printStr(uart_Buf);
      //memset(uart_Buf, 0, sizeof(uart_Buf));
    }
  }
    
}

flash.h
#include  <stdio.h>
#include <msp430x14x.h>

#define uchar unsigned  char 
#define uint  unsigned  int 

#define SegmentA  0x1080 //0x01080到0x010FF
#define SegmentB  0x1000 //0x1000到0x107F

void flash_clr(uint *ptr);

void flash_write_int8(uchar *ptr, uchar value);

void flash_write_int16(uint *ptr, uint value);

void flash_memcpy(uchar *ptr, uchar *from, uint len);

flash.c
#include "flash.h"

#define int8_t unsigned char
#define int16_t unsigned int

void flash_clr(uint *ptr)
{
  _DINT();                            //关中断
  FCTL3 = 0x0A500;              //* Lock = 0 开锁
  FCTL1 = 0x0A502;              //* Erase = 1 使能擦除
  *((int *) ptr) = 0;           //* 擦除段
  
  _EINT();
}

void flash_write_int8(uchar *ptr, uchar value)
{
  _DINT();
  FCTL3 = 0x0A500;          // Lock = 0 开锁
  FCTL1 = 0x0A540;          // Write = 1使能写入
  *((int8_t *) ptr) = value;       // 写入数据
  
  _EINT();
}

void flash_write_int16(uint *ptr, uint value)
{
  _DINT();
  FCTL3 = 0x0A500;              /* Lock = 0 */
  FCTL1 = 0x0A540;              /* Write = 1 */
  *((int16_t *) ptr) = value;       /* Program the flash */
  
  _EINT();
}

void flash_memcpy(uchar *ptr, uchar *from, uint len)
{
  _DINT();
  FCTL3 = 0x0A500;              /* Lock = 0 */
  FCTL1 = 0x0A540;              /* Write = 1 */
  while (len)
  {
    *ptr++ = *from++;
    len--;
  }
  
  _EINT();
}

main.c
#include <msp430x14x.h>
#include "UART.h"
#include "flash.h"
#include <string.h>
#include <stdlib.h>

unsigned int L1=~((0X01)<<0);
unsigned int L2=~((0X01)<<1);
unsigned int L3=~((0X01)<<2);
unsigned int L4=~((0X01)<<3);
unsigned int L5=~((0X01)<<4);
unsigned int L6=~((0X01)<<5);
unsigned int L7=~((0X01)<<6);
unsigned int L8=~((0X01)<<7);
unsigned int L9=~((0X01)<<8);

extern  uchar  uart_Buf[UARTBUFLEN];
extern  uchar  buf_count;
extern  uchar  finishFlag; 

struct MSG
{
  uint len;
  uint size;
  uchar m[100];
};

#define MCLK_C      (4)//定义主时钟频率,供延时使用
#define Delay_ms(n) __delay_cycles(n*(1000L)*MCLK_C)

void initSys();
void readFlash(uchar* addr, struct MSG *msg);
void sendMsg(struct MSG *msg);

uint interrupt=0;
uchar p4=0;

/**
315模块连接线0
*/
void main(void)
{ 
  WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
  initSys();
  //_EINT();
  init_uart0();
  
  //进入低功耗3模式。
  //_BIS_SR(LPM3_bits);

  P2DIR = 0xff;                   //设置P2口方向为输出  
  P2OUT = 0xff;
  
  P4DIR =0xf0;                 //设置P4口方向为输入
  //P4DIR&=~0x0F;
  

  
  P2OUT |= BIT0; 
  //P2OUT |= BIT2; 
  P2OUT ^= 0x01;
  
  P1IE |= 0x10; // P1.4中断使能
  P1IES |= 0x10; // P1.4设置为高低边沿中断 
  P1IFG &= ~0x10; // P1.4中断标志位清零 
  
  //_BIS_SR(LPM4_bits + GIE); // 进入LPM4中断
  
  struct MSG msg;
  uchar * startA = (uchar*)SegmentA;
  flash_clr((uint*)SegmentA);
  uchar * startB = (uchar*)SegmentB;
  flash_clr((uint*)SegmentB);
  while(1)
  {
    if(finishFlag != 0)
    {
      P2OUT ^= 0x01; 
      memset(&msg, 0, sizeof(msg));
      char temp[100];
      char *p;
      memcpy(temp, uart_Buf, 100);
      p = strtok(temp, "_"); //短信类型 
      switch(atoi(p))
      {
      case 1:
        {
          p = strtok(NULL, "_");
          msg.len = atoi(p);
          p = strtok(NULL, "_");
          msg.size = strlen(p)-1;
          for(int i=0; i<strlen(p)-1; ++i)
          {
             msg.m[i]=p[i];
          }
          printStr("1\r\n");
          printStr(msg.m);
          printStr("\r\n");
          flash_clr((uint*)SegmentA);
          flash_memcpy(startA, (uchar *)&msg,sizeof(struct MSG));
          memset(&msg, 0, sizeof(msg));  
          break;
        }
      case 2:
        {
          p = strtok(NULL, "_");
          msg.len = atoi(p);
          p = strtok(NULL, "_");
          msg.size = strlen(p)-1;
          for(int i=0; i<strlen(p)-1; ++i)
          {
             msg.m[i]=p[i];
          }
          printStr("2\r\n");
          printStr(msg.m);
          printStr("\r\n");
          flash_clr((uint*)SegmentB);
          flash_memcpy(startB, (uchar *)&msg,sizeof(struct MSG));
          memset(&msg, 0, sizeof(msg));  
          break;
        }
      default:
        {  
          //P2OUT ^= 0x02;
          break;
        }      
      }
      finishFlag = 0;
      memset(p,0,strlen(p));
      memset(temp,0,sizeof(temp));
      //printArr(uart_Buf, 100);
      memset(uart_Buf,0,100);
      finishFlag = 0;
    }

    if(interrupt==1)
    {
      Delay_ms(50);
      
      switch(p4)
        {
        case 8:
          {
            readFlash(startA, &msg);
            break;
          }
        case 9:
          {
            readFlash(startB, &msg);
            break;
          }
        default:
          {
            //P2OUT ^= 0x01;
            //char x[5];
            //sprintf(x, "%d", p4);
            //printStr((uchar*)x);
            //printStr("\r\n");    
            break;
          }
        }
      //while(interrupt==1);
      interrupt=0;
    }
  }
  
}

void initSys()
{
   unsigned int iq0;
   _EINT();
   BCSCTL1 &=~XT2OFF;   //打开高速晶振
   do
   {
      IFG1 &= ~OFIFG;			// 清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--);	// 延时,等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);		// 判断XT2是否起振		
   BCSCTL2 =SELM1+SELS;                 //MCLK,SMCLK时钟为XT2,MCLK SMCLK为8MHz
					//???USART0
}

void sendMsg(struct MSG *msg)
{
  printStr("AT\r\n");
  Delay_ms(100);
  printStr("AT+CMGF=0\r\n");
  Delay_ms(100);
  printStr("AT+CMGS=");
  char y[5];
  sprintf(y, "%d", msg->len);
  printStr((uchar*)y);
  printStr("\r\n");
  Delay_ms(100);
  printStr(msg->m);
  R_S_Byte(0x1A);
  printStr("\r\n");
}

void readFlash(uchar* addr, struct MSG *msg)
{
  uint l = ((struct MSG *)addr)->size;
  for(int j=0; j<l; ++j)
  {
    msg->m[j]= ((struct MSG *)addr)->m[j];
  }   
  msg->len = (uint)((struct MSG *)addr)->len;
  //printStr("\r\n");
  //printStr(msg->m);
  sendMsg(msg);
  memset(msg, 0, sizeof(*msg));
}

// 端口1的中断服务例程
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
  //LPM4_EXIT;
  p4 = P4IN&0x0F;
  P2OUT ^= 0x01; // P1.0 状态翻转
  P1IFG &= ~0x10; // P1.4 中断标志清零
  interrupt=1;
}


分享到:
评论

相关推荐

    MSP430单片机控制GSM模块.rar

    在本文中,我们将深入探讨如何使用MSP430单片机来控制GSM模块,以便实现无线通信功能。MSP430是由德州仪器(TI)开发的一种超低功耗微控制器,常用于各种嵌入式应用。GSM模块则是一种能够接入全球移动通信系统...

    单片机控制GSM模块

    在现代通信技术中,单片机控制GSM模块是实现远程数据传输、语音通话和短信服务的重要手段。GSM(Global System for Mobile communications)作为全球范围内广泛使用的移动通信标准,其模块能够与各种单片机进行有效...

    msp430单片机C语言常用模块与综合系统实例精讲(含教程及教程中的例程和电路图)

    《msp430单片机C语言常用模块与综合系统实例精讲》是秦龙编著的一本关于msp430单片机编程的教材,它深入浅出地讲解了msp430单片机的C语言编程技术,并且包含了丰富的实例、电路图和插图,为学习者提供了一站式的资源...

    msp430单片机控制步进电机实验的电路图及C程序.pdf

    msp430单片机控制步进电机实验的电路图及C程序 msp430单片机控制步进电机实验的电路图及C程序是msp430单片机控制步进电机实验的相关资料,包括电路图和C程序。该实验的目的是使用msp430单片机控制步进电机的运动,...

    MSP430单片机常用模块与综合系统实例精讲

    《MSP430单片机常用模块与综合系统实例精讲》是一份深度解析MSP430微控制器的教程资料,包含了丰富的电路图和源代码实例,旨在帮助学习者深入理解和应用这款低功耗、高性能的单片机。MSP430系列由德州仪器(TI)开发...

    MSP430单片机 模块与综合系统实例精讲程序代码

    本书针对目前流行的MSP430单片机系列,通过以实例精讲的形式,详细介绍MSP430单片机常用模块与综合应用采用系统设计的方法与技巧。全书共分为3篇,第1篇为基础知识篇,简要介绍MSP430单片机的硬件内部结构、C语言...

    msp430控制GSM模块发送短信(测试通过)

    在本文中,我们将深入探讨如何使用 MSP430 微控制器来控制 GSM 模块发送短信。MSP430 是由 Texas Instruments 公司推出的一款超低功耗的微控制器,广泛应用于各种嵌入式系统,特别是对于电池供电设备和需要高效能源...

    MSP430F149控制GSM接收解读短信

    在本文中,我们将深入探讨如何使用MSP430F149单片机来控制GSM模块,实现接收和解读短信的功能。MSP430F149是一款低功耗、高性能的微控制器,由德州仪器(Texas Instruments)生产,广泛应用于各种嵌入式系统,包括...

    msp430单片机模块程序库

    **MSP430单片机模块程序库详解** MSP430单片机是由德州仪器(TI)推出的超低功耗微控制器系列,广泛应用于各种嵌入式系统,尤其是对能耗有严格要求的场合。这个程序库包含了针对MSP430单片机各个常用外设的程序驱动...

    MSP430单片机 控制 TC35 模块 收发短信

    **MSP430单片机与TC35模块收发短信详解** MSP430系列单片机是德州仪器(Texas Instruments, TI)推出的一款超低功耗微控制器,广泛应用于各种嵌入式系统设计。在这个项目中,我们使用的是MSP430F5529型号的单片机,...

    MSP430单片机与GPS模块接口应用

    ### MSP430单片机与GPS模块接口应用 #### GPS系统简介 全球定位系统(Global Positioning System,简称GPS)是一种重要的空间定位系统,它能够实现全球范围内的精确导航和定位服务。随着科技的发展,GPS的应用领域...

    MSP430单片机控制lcd12864的汉字显示

    为了用MSP430单片机控制LCD12864,首先需要理解两者之间的通信协议。通常,MSP430会通过串行或并行接口与LCD12864交互,发送指令来设置显示模式、清屏、定位光标、写入字符等。MSP430需要配置合适的I/O引脚来驱动LCD...

    基于MSP430单片机设计的电赛论文文档资料+源代码及部分硬件PCB文件.zip

    基于MSP430单片机的智能风力检测与发电控制系统 基于MSP430单片机的节能型路灯 基于MSP430和NRF24L01的封闭环境检测系统 基于MSP430和RFID的小型化智能农业监控系统设计 基于MSP430和Zigbee技术的煤矿综合监控系统...

    MSP430教程14:MSP430单片机ADC12模块

    MSP430教程14:MSP430单片机ADC12模块

    MSP430教程:MSP430单片机ADC12模块

    MSP430单片机是德州仪器(TI)生产的一种16位RISC微控制器,广泛应用于低功耗嵌入式系统中。本文主要介绍MSP430单片机中的ADC12模块,即12位模拟数字转换模块。 首先,我们来看一下ADC12模块的主要特点和功能。ADC12...

    MSP430F149 GSM基本控制,初始化接收短息,解读短信

    在MSP430F149上初始化GSM模块接收短信,首先要确保电源、串行通信线路以及SIM卡正确连接。接着,通过串口发送AT命令来设置GSM模块进入短信接收模式,例如`AT+CMGF=1`切换到文本模式,`AT+CNMI=2,2,0,0,0`使模块在...

    基于MSP430单片机的应用设计WORD论文文档+毕业设计软件硬件设计资料(21个合集).zip

    基于MSP430单片机的智能风力检测与发电控制系统 基于MSP430单片机的节能型路灯 基于MSP430和NRF24L01的封闭环境检测系统 基于MSP430和RFID的小型化智能农业监控系统设计 基于MSP430和Zigbee技术的煤矿综合监控系统...

    msp430单片机常用模块与综合系统 随教材的例程

    《msp430单片机常用模块与综合系统 随教材的例程》这个资源是针对TI公司的MSP430系列微控制器的学习材料,由秦龙编著的教材配套提供。MSP430是一款低功耗、高性能的16位单片机,广泛应用于各种嵌入式系统,如物联网...

    MSP430单片机 DS18B20温度传感器C语言demo

    **MSP430单片机与DS18B20温度传感器的C语言实践** 在电子工程领域,MSP430单片机因其低功耗、高性能和丰富的外设接口而广受欢迎,尤其适用于嵌入式系统设计。本教程将深入探讨如何使用MSP430单片机来读取并处理DS...

Global site tag (gtag.js) - Google Analytics