MSP430搭的一个简易电压表,上位机用JAVA写的
来源:互联网 发布:分析大数据的意义 编辑:程序博客网 时间:2024/05/15 23:47
- import java.io.*;
- import java.util.*;
- import javax.comm.*;
- import javax.swing.*;
- public class SimpleRead implements Runnable, SerialPortEventListener {
- static CommPortIdentifier portId;
- static Enumeration portList;
- InputStream inputStream;
- SerialPort serialPort;
- Thread readThread;
- static JTextField textfield;
- public static void UiPaint()
- {
- JFrame frame = new JFrame("电压转换软件-徐方鑫");
- frame.setSize(250,70);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JPanel panel = new JPanel();
- frame.add(panel);
- JLabel label = new JLabel("电压检测为:");
- panel.add(label);
- textfield = new JTextField(6);
- textfield.setHorizontalAlignment(JTextField.CENTER);
- panel.add(textfield);
- //textfield.enable(false);
- JLabel label2 = new JLabel("V");
- panel.add(label2);
- frame.setVisible(true);
- }
- public static void main(String[] args) {
- UiPaint();
- portList = CommPortIdentifier.getPortIdentifiers();
- while (portList.hasMoreElements()) {
- portId = (CommPortIdentifier) portList.nextElement();
- if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
- if (portId.getName().equals("COM1")) {
- //if (portId.getName().equals("/dev/term/a")) {
- SimpleRead reader = new SimpleRead();
- }
- }
- }
- }
- public SimpleRead() {
- try {
- serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
- } catch (PortInUseException e) {}
- try {
- inputStream = serialPort.getInputStream();
- } catch (IOException e) {}
- try {
- serialPort.addEventListener(this);
- } catch (TooManyListenersException e) {}
- serialPort.notifyOnDataAvailable(true);
- try {
- serialPort.setSerialPortParams(9600,
- SerialPort.DATABITS_8,
- SerialPort.STOPBITS_1,
- SerialPort.PARITY_NONE);
- } catch (UnsupportedCommOperationException e) {}
- readThread = new Thread(this);
- readThread.start();
- }
- public void run() {
- try {
- Thread.sleep(20000);
- } catch (InterruptedException e) {}
- }
- public void serialEvent(SerialPortEvent event) {
- switch(event.getEventType()) {
- case SerialPortEvent.BI:
- case SerialPortEvent.OE:
- case SerialPortEvent.FE:
- case SerialPortEvent.PE:
- case SerialPortEvent.CD:
- case SerialPortEvent.CTS:
- case SerialPortEvent.DSR:
- case SerialPortEvent.RI:
- case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
- break;
- case SerialPortEvent.DATA_AVAILABLE:
- byte[] readBuffer = new byte[6];
- try {
- while (inputStream.available() > 0) {
- int numBytes = inputStream.read(readBuffer);
- }
- //System.out.print(new String(readBuffer));
- textfield.setText(new String(readBuffer));
- } catch (IOException e) {}
- break;
- }
- }
- }
- #include <msp430x14x.h>
- #include "Init.h"
- /*******************************************
- 函数名称:Init_AD
- 功 能:AD初始化函数
- 参 数:无
- 返回值 :无
- ********************************************/
- void Init_AD(void)
- {
- P6SEL |= 0x01; // 使能ADC通道
- ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间
- ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器
- ADC12IE = 0x01; // 使能ADC中断
- ADC12CTL0 |= ENC; // 使能转换
- ADC12CTL0 |= ADC12SC; // 开始转换
- }
- /*******************************************
- 函数名称:Init_watchdog
- 功 能:看门狗初始化函数
- 参 数:无
- 返回值 :无
- ********************************************/
- void Init_watchdog(void) // WatchdogInit
- {
- WDTCTL=WDTPW+WDTHOLD;// Stop watchdog
- }
- /*******************************************
- 函数名称:Init_uart
- 功 能:串口初始化
- 参 数:无
- 返回值 :无
- ********************************************/
- void Init_uart(int Bund) // Uart_Init
- {
- P3SEL|=0xc0; // P3.6,7 = USART1 TXD/RXD
- P3DIR |= 0x40; // 串口发送数据端口为输出,接收数据端口为输入
- UCTL1=SWRST; // Initialize USART state machine
- UTCTL1|=SSEL0; // UCLK = ACLK
- UBR01=32000/Bund; // 9600 from 1Mhz,波特率设置32k/9600 - 13.65
- UBR11=0x00;
- UMCTL1=0x4a; // Modulation
- UCTL1=CHAR; // 8 bits data format. enable UART
- IFG2&=~UTXIFG1; // Enable USART0 RX/TX interrupt
- IE2|=URXIE1; // Enable receive interrupt.
- ME2|=URXE1+UTXE1; // Enabled USART1 TXD/RXD
- //_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
- }
- #define uchar unsigned char
- #define uint unsigned int
- void Init_uart(int Bund); // Uart_Init
- void Init_watchdog(void); // WatchdogInit
- void Init_AD(void); // ADInit
- #include <msp430x14x.h>
- #include <string.h>
- #include "Init.h"
- #define Num_of_Results 32
- static uint results[Num_of_Results]; //保存ADC转换结果的数组 // is not used for anything.
- void Trans_val(uint Hex_Val); //AD电压转换
- void Send_data(char *data); //Uart_send_function
- void Init(void); // Main_Init
- uchar shuzi[] = {"0123456789."}; //字码转换
- /*******************************************
- 函数名称:主函数
- 功 能:主函数
- 参 数:无
- 返回值 :无
- ********************************************/
- int main(void)
- {
- Init(); //主初始化程序
- _EINT();
- LPM0;
- while(1);
- return 0;
- }
- /*******************************************
- 函数名称:初始化函数
- 功 能:初始化模块调用
- 参 数:无
- 返回值 :无
- ********************************************/
- void Init(void)
- {
- Init_watchdog(); // WatchdogInit
- Init_uart(9600); // Uart_Init
- Init_AD(); // AD_Init
- }
- /*******************************************
- 函数名称:串口发送数据
- 功 能:发送数据
- 参 数:字符串
- 返回值 :无
- ********************************************/
- void Send_data(char *data)
- {
- unsigned char i;
- for(i=0;i<strlen(data)+1;i++)
- {
- TXBUF1=data[i];
- while((UTCTL1&TXEPT)!=TXEPT);
- }
- }
- /*******************************************
- 函数名称:串口接收中断函数
- 功 能:串口接受
- 参 数:无
- 返回值 :无
- ********************************************/
- //ISR for uart1 receive a byte.
- #pragma vector=UART1RX_VECTOR
- __interrupt void usart1_rx (void)
- {
- if (RXBUF1 =='u') // 'u' received?
- {
- _NOP();
- //TXBUF1 = string1[i++];
- }
- }
- /*******************************************
- 函数名称:Trans_val
- 功 能:将16进制ADC转换数据变换成三位10进制
- 真实的模拟电压数据,并在液晶上显示
- 参 数:Hex_Val--16进制数据
- n--变换时的分母等于2的n次方
- 返回值 :无
- ********************************************/
- void Trans_val(uint Hex_Val)
- {
- unsigned long caltmp;
- uint Curr_Volt;
- uchar t1,i;
- uchar ptr[4];
- caltmp = Hex_Val;
- caltmp = (caltmp << 5) + Hex_Val; //caltmp = Hex_Val * 33
- caltmp = (caltmp << 3) + (caltmp << 1); //caltmp = caltmp * 10
- Curr_Volt = caltmp >> 12; //Curr_Volt = caltmp / 2^n
- ptr[0] = Curr_Volt / 100; //Hex->Dec变换
- t1 = Curr_Volt - (ptr[0] * 100);
- ptr[2] = t1 / 10;
- ptr[3] = t1 - (ptr[2] * 10);
- ptr[1] = 10; //shuzi表中第10位对应符号"."
- //在液晶上显示变换后的结果
- uchar result[4];
- for(i = 0;i < 4;i++)
- {
- result[i]=shuzi[ptr[i]];
- }
- Send_data(result);
- }
- /*******************************************
- 函数名称:ADC12ISR
- 功 能:ADC中断服务函数,在这里用多次平均的
- 计算P6.0口的模拟电压数值
- 参 数:无
- 返回值 :无
- ********************************************/
- #pragma vector=ADC_VECTOR
- __interrupt void ADC12ISR (void)
- {
- static uint index = 0;
- results[index++] = ADC12MEM0; // Move results
- if(index == Num_of_Results)
- {
- uchar i;
- unsigned long sum = 0;
- index = 0;
- for(i = 0; i < Num_of_Results; i++)
- {
- sum += results[i];
- }
- sum >>= 5; //除以32
- Trans_val(sum);
- }
- }
花了一个白天搭了下,还是挺好玩的
- MSP430搭的一个简易电压表,上位机用JAVA写的
- 飞思卡尔简易路径检测上位机(JAVA写的)
- 用java写的一个简易记事本
- 基于单片机的简易数字电压表设计
- 基于单片机的简易数字电压表设计
- 用Qt写的上位机
- 用vb.net开发的简易(通用)上位机
- 用J2ME写一个简易的备忘录
- 用JS写的一个简易计算器
- 用Android写的一个简易计算器
- java上位机的界面
- 自己写的一个较大的上位机程序,不知道大家感觉怎么样
- 电压表的工作原理
- 电压表的原理
- 用Java写的简易记事本
- 用JAVA写的简易记事本
- 用JAVA写的简易计算器
- 使用JAVA写的一个简易通讯程序(一)
- .Net面试题汇总(一) 帮你轻松过笔试关 --不断增加中
- NET FrameWork 4.0 的新特性
- javascript兼容问题
- Out 与Ref 的却别
- 学JSP步骤
- MSP430搭的一个简易电压表,上位机用JAVA写的
- 从五个方面考虑Oracle的性能调优问题
- vi命令
- 打字游戏
- java中方法的可变参数的研究
- js解析xml
- 没有你的路,我依然会好好的走下去!
- 仿google分页
- 数据结构学习连载(二)