- importjava.io.*;
- importjava.util.*;
- importjavax.comm.*;
- importjavax.swing.*;
- publicclassSimpleReadimplementsRunnable,SerialPortEventListener{
- staticCommPortIdentifierportId;
- staticEnumerationportList;
- InputStreaminputStream;
- SerialPortserialPort;
- ThreadreadThread;
- staticJTextFieldtextfield;
- publicstaticvoidUiPaint()
- {
- JFrameframe=newJFrame("电压转换软件-徐方鑫");
- frame.setSize(250,70);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JPanelpanel=newJPanel();
- frame.add(panel);
- JLabellabel=newJLabel("电压检测为:");
- panel.add(label);
- textfield=newJTextField(6);
- textfield.setHorizontalAlignment(JTextField.CENTER);
- panel.add(textfield);
- //textfield.enable(false);
- JLabellabel2=newJLabel("V");
- panel.add(label2);
- frame.setVisible(true);
- }
- publicstaticvoidmain(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")){
- SimpleReadreader=newSimpleRead();
- }
- }
- }
- }
- publicSimpleRead(){
- try{
- serialPort=(SerialPort)portId.open("SimpleReadApp",2000);
- }catch(PortInUseExceptione){}
- try{
- inputStream=serialPort.getInputStream();
- }catch(IOExceptione){}
- try{
- serialPort.addEventListener(this);
- }catch(TooManyListenersExceptione){}
- serialPort.notifyOnDataAvailable(true);
- try{
- serialPort.setSerialPortParams(9600,
- SerialPort.DATABITS_8,
- SerialPort.STOPBITS_1,
- SerialPort.PARITY_NONE);
- }catch(UnsupportedCommOperationExceptione){}
- readThread=newThread(this);
- readThread.start();
- }
- publicvoidrun(){
- try{
- Thread.sleep(20000);
- }catch(InterruptedExceptione){}
- }
- publicvoidserialEvent(SerialPortEventevent){
- switch(event.getEventType()){
- caseSerialPortEvent.BI:
- caseSerialPortEvent.OE:
- caseSerialPortEvent.FE:
- caseSerialPortEvent.PE:
- caseSerialPortEvent.CD:
- caseSerialPortEvent.CTS:
- caseSerialPortEvent.DSR:
- caseSerialPortEvent.RI:
- caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:
- break;
- caseSerialPortEvent.DATA_AVAILABLE:
- byte[]readBuffer=newbyte[6];
- try{
- while(inputStream.available()>0){
- intnumBytes=inputStream.read(readBuffer);
- }
- //System.out.print(newString(readBuffer));
- textfield.setText(newString(readBuffer));
- }catch(IOExceptione){}
- break;
- }
- }
- }
- #include<msp430x14x.h>
- #include"Init.h"
- /*******************************************
- 函数名称:Init_AD
- 功能:AD初始化函数
- 参数:无
- 返回值:无
- ********************************************/
- voidInit_AD(void)
- {
- P6SEL|=0x01;//使能ADC通道
- ADC12CTL0=ADC12ON+SHT0_8+MSC;//打开ADC,设置采样时间
- ADC12CTL1=SHP+CONSEQ_2;//使用采样定时器
- ADC12IE=0x01;//使能ADC中断
- ADC12CTL0|=ENC;//使能转换
- ADC12CTL0|=ADC12SC;//开始转换
- }
- /*******************************************
- 函数名称:Init_watchdog
- 功能:看门狗初始化函数
- 参数:无
- 返回值:无
- ********************************************/
- voidInit_watchdog(void)//WatchdogInit
- {
- WDTCTL=WDTPW+WDTHOLD;//Stopwatchdog
- }
- /*******************************************
- 函数名称:Init_uart
- 功能:串口初始化
- 参数:无
- 返回值:无
- ********************************************/
- voidInit_uart(intBund)//Uart_Init
- {
- P3SEL|=0xc0;//P3.6,7=USART1TXD/RXD
- P3DIR|=0x40;//串口发送数据端口为输出,接收数据端口为输入
- UCTL1=SWRST;//InitializeUSARTstatemachine
- UTCTL1|=SSEL0;//UCLK=ACLK
- UBR01=32000/Bund;//9600from1Mhz,波特率设置32k/9600-13.65
- UBR11=0x00;
- UMCTL1=0x4a;//Modulation
- UCTL1=CHAR;//8bitsdataformat.enableUART
- IFG2&=~UTXIFG1;//EnableUSART0RX/TXinterrupt
- IE2|=URXIE1;//Enablereceiveinterrupt.
- ME2|=URXE1+UTXE1;//EnabledUSART1TXD/RXD
- //_BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt
- }
- #defineucharunsignedchar
- #defineuintunsignedint
- voidInit_uart(intBund);//Uart_Init
- voidInit_watchdog(void);//WatchdogInit
- voidInit_AD(void);//ADInit
- #include<msp430x14x.h>
- #include<string.h>
- #include"Init.h"
- #defineNum_of_Results32
- staticuintresults[Num_of_Results];//保存ADC转换结果的数组//isnotusedforanything.
- voidTrans_val(uintHex_Val);//AD电压转换
- voidSend_data(char*data);//Uart_send_function
- voidInit(void);//Main_Init
- ucharshuzi[]={"0123456789."};//字码转换
- /*******************************************
- 函数名称:主函数
- 功能:主函数
- 参数:无
- 返回值:无
- ********************************************/
- intmain(void)
- {
- Init();//主初始化程序
- _EINT();
- LPM0;
- while(1);
- return0;
- }
- /*******************************************
- 函数名称:初始化函数
- 功能:初始化模块调用
- 参数:无
- 返回值:无
- ********************************************/
- voidInit(void)
- {
- Init_watchdog();//WatchdogInit
- Init_uart(9600);//Uart_Init
- Init_AD();//AD_Init
- }
- /*******************************************
- 函数名称:串口发送数据
- 功能:发送数据
- 参数:字符串
- 返回值:无
- ********************************************/
- voidSend_data(char*data)
- {
- unsignedchari;
- for(i=0;i<strlen(data)+1;i++)
- {
- TXBUF1=data[i];
- while((UTCTL1&TXEPT)!=TXEPT);
- }
- }
- /*******************************************
- 函数名称:串口接收中断函数
- 功能:串口接受
- 参数:无
- 返回值:无
- ********************************************/
- //ISRforuart1receiveabyte.
- #pragmavector=UART1RX_VECTOR
- __interruptvoidusart1_rx(void)
- {
- if(RXBUF1=='u')//'u'received?
- {
- _NOP();
- //TXBUF1=string1[i++];
- }
- }
- /*******************************************
- 函数名称:Trans_val
- 功能:将16进制ADC转换数据变换成三位10进制
- 真实的模拟电压数据,并在液晶上显示
- 参数:Hex_Val--16进制数据
- n--变换时的分母等于2的n次方
- 返回值:无
- ********************************************/
- voidTrans_val(uintHex_Val)
- {
- unsignedlongcaltmp;
- uintCurr_Volt;
- uchart1,i;
- ucharptr[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位对应符号"."
- //在液晶上显示变换后的结果
- ucharresult[4];
- for(i=0;i<4;i++)
- {
- result[i]=shuzi[ptr[i]];
- }
- Send_data(result);
- }
- /*******************************************
- 函数名称:ADC12ISR
- 功能:ADC中断服务函数,在这里用多次平均的
- 计算P6.0口的模拟电压数值
- 参数:无
- 返回值:无
- ********************************************/
- #pragmavector=ADC_VECTOR
- __interruptvoidADC12ISR(void)
- {
- staticuintindex=0;
- results[index++]=ADC12MEM0;//Moveresults
- if(index==Num_of_Results)
- {
- uchari;
- unsignedlongsum=0;
- index=0;
- for(i=0;i<Num_of_Results;i++)
- {
- sum+=results[i];
- }
- sum>>=5;//除以32
- Trans_val(sum);
- }
- }
花了一个白天搭了下,还是挺好玩的