MSP430搭的一个简易电压表,上位机用JAVA写的

Code:
  1. importjava.io.*;
  2. importjava.util.*;
  3. importjavax.comm.*;
  4. importjavax.swing.*;
  5. publicclassSimpleReadimplementsRunnable,SerialPortEventListener{
  6. staticCommPortIdentifierportId;
  7. staticEnumerationportList;
  8. InputStreaminputStream;
  9. SerialPortserialPort;
  10. ThreadreadThread;
  11. staticJTextFieldtextfield;
  12. publicstaticvoidUiPaint()
  13. {
  14. JFrameframe=newJFrame("电压转换软件-徐方鑫");
  15. frame.setSize(250,70);
  16. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  17. JPanelpanel=newJPanel();
  18. frame.add(panel);
  19. JLabellabel=newJLabel("电压检测为:");
  20. panel.add(label);
  21. textfield=newJTextField(6);
  22. textfield.setHorizontalAlignment(JTextField.CENTER);
  23. panel.add(textfield);
  24. //textfield.enable(false);
  25. JLabellabel2=newJLabel("V");
  26. panel.add(label2);
  27. frame.setVisible(true);
  28. }
  29. publicstaticvoidmain(String[]args){
  30. UiPaint();
  31. portList=CommPortIdentifier.getPortIdentifiers();
  32. while(portList.hasMoreElements()){
  33. portId=(CommPortIdentifier)portList.nextElement();
  34. if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){
  35. if(portId.getName().equals("COM1")){
  36. //if(portId.getName().equals("/dev/term/a")){
  37. SimpleReadreader=newSimpleRead();
  38. }
  39. }
  40. }
  41. }
  42. publicSimpleRead(){
  43. try{
  44. serialPort=(SerialPort)portId.open("SimpleReadApp",2000);
  45. }catch(PortInUseExceptione){}
  46. try{
  47. inputStream=serialPort.getInputStream();
  48. }catch(IOExceptione){}
  49. try{
  50. serialPort.addEventListener(this);
  51. }catch(TooManyListenersExceptione){}
  52. serialPort.notifyOnDataAvailable(true);
  53. try{
  54. serialPort.setSerialPortParams(9600,
  55. SerialPort.DATABITS_8,
  56. SerialPort.STOPBITS_1,
  57. SerialPort.PARITY_NONE);
  58. }catch(UnsupportedCommOperationExceptione){}
  59. readThread=newThread(this);
  60. readThread.start();
  61. }
  62. publicvoidrun(){
  63. try{
  64. Thread.sleep(20000);
  65. }catch(InterruptedExceptione){}
  66. }
  67. publicvoidserialEvent(SerialPortEventevent){
  68. switch(event.getEventType()){
  69. caseSerialPortEvent.BI:
  70. caseSerialPortEvent.OE:
  71. caseSerialPortEvent.FE:
  72. caseSerialPortEvent.PE:
  73. caseSerialPortEvent.CD:
  74. caseSerialPortEvent.CTS:
  75. caseSerialPortEvent.DSR:
  76. caseSerialPortEvent.RI:
  77. caseSerialPortEvent.OUTPUT_BUFFER_EMPTY:
  78. break;
  79. caseSerialPortEvent.DATA_AVAILABLE:
  80. byte[]readBuffer=newbyte[6];
  81. try{
  82. while(inputStream.available()>0){
  83. intnumBytes=inputStream.read(readBuffer);
  84. }
  85. //System.out.print(newString(readBuffer));
  86. textfield.setText(newString(readBuffer));
  87. }catch(IOExceptione){}
  88. break;
  89. }
  90. }
  91. }
Code:
  1. #include<msp430x14x.h>
  2. #include"Init.h"
  3. /*******************************************
  4. 函数名称:Init_AD
  5. 功能:AD初始化函数
  6. 参数:无
  7. 返回值:无
  8. ********************************************/
  9. voidInit_AD(void)
  10. {
  11. P6SEL|=0x01;//使能ADC通道
  12. ADC12CTL0=ADC12ON+SHT0_8+MSC;//打开ADC,设置采样时间
  13. ADC12CTL1=SHP+CONSEQ_2;//使用采样定时器
  14. ADC12IE=0x01;//使能ADC中断
  15. ADC12CTL0|=ENC;//使能转换
  16. ADC12CTL0|=ADC12SC;//开始转换
  17. }
  18. /*******************************************
  19. 函数名称:Init_watchdog
  20. 功能:看门狗初始化函数
  21. 参数:无
  22. 返回值:无
  23. ********************************************/
  24. voidInit_watchdog(void)//WatchdogInit
  25. {
  26. WDTCTL=WDTPW+WDTHOLD;//Stopwatchdog
  27. }
  28. /*******************************************
  29. 函数名称:Init_uart
  30. 功能:串口初始化
  31. 参数:无
  32. 返回值:无
  33. ********************************************/
  34. voidInit_uart(intBund)//Uart_Init
  35. {
  36. P3SEL|=0xc0;//P3.6,7=USART1TXD/RXD
  37. P3DIR|=0x40;//串口发送数据端口为输出,接收数据端口为输入
  38. UCTL1=SWRST;//InitializeUSARTstatemachine
  39. UTCTL1|=SSEL0;//UCLK=ACLK
  40. UBR01=32000/Bund;//9600from1Mhz,波特率设置32k/9600-13.65
  41. UBR11=0x00;
  42. UMCTL1=0x4a;//Modulation
  43. UCTL1=CHAR;//8bitsdataformat.enableUART
  44. IFG2&=~UTXIFG1;//EnableUSART0RX/TXinterrupt
  45. IE2|=URXIE1;//Enablereceiveinterrupt.
  46. ME2|=URXE1+UTXE1;//EnabledUSART1TXD/RXD
  47. //_BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt
  48. }
Code:
  1. #defineucharunsignedchar
  2. #defineuintunsignedint
  3. voidInit_uart(intBund);//Uart_Init
  4. voidInit_watchdog(void);//WatchdogInit
  5. voidInit_AD(void);//ADInit
Code:
  1. #include<msp430x14x.h>
  2. #include<string.h>
  3. #include"Init.h"
  4. #defineNum_of_Results32
  5. staticuintresults[Num_of_Results];//保存ADC转换结果的数组//isnotusedforanything.
  6. voidTrans_val(uintHex_Val);//AD电压转换
  7. voidSend_data(char*data);//Uart_send_function
  8. voidInit(void);//Main_Init
  9. ucharshuzi[]={"0123456789."};//字码转换
  10. /*******************************************
  11. 函数名称:主函数
  12. 功能:主函数
  13. 参数:无
  14. 返回值:无
  15. ********************************************/
  16. intmain(void)
  17. {
  18. Init();//主初始化程序
  19. _EINT();
  20. LPM0;
  21. while(1);
  22. return0;
  23. }
  24. /*******************************************
  25. 函数名称:初始化函数
  26. 功能:初始化模块调用
  27. 参数:无
  28. 返回值:无
  29. ********************************************/
  30. voidInit(void)
  31. {
  32. Init_watchdog();//WatchdogInit
  33. Init_uart(9600);//Uart_Init
  34. Init_AD();//AD_Init
  35. }
  36. /*******************************************
  37. 函数名称:串口发送数据
  38. 功能:发送数据
  39. 参数:字符串
  40. 返回值:无
  41. ********************************************/
  42. voidSend_data(char*data)
  43. {
  44. unsignedchari;
  45. for(i=0;i<strlen(data)+1;i++)
  46. {
  47. TXBUF1=data[i];
  48. while((UTCTL1&TXEPT)!=TXEPT);
  49. }
  50. }
  51. /*******************************************
  52. 函数名称:串口接收中断函数
  53. 功能:串口接受
  54. 参数:无
  55. 返回值:无
  56. ********************************************/
  57. //ISRforuart1receiveabyte.
  58. #pragmavector=UART1RX_VECTOR
  59. __interruptvoidusart1_rx(void)
  60. {
  61. if(RXBUF1=='u')//'u'received?
  62. {
  63. _NOP();
  64. //TXBUF1=string1[i++];
  65. }
  66. }
  67. /*******************************************
  68. 函数名称:Trans_val
  69. 功能:将16进制ADC转换数据变换成三位10进制
  70. 真实的模拟电压数据,并在液晶上显示
  71. 参数:Hex_Val--16进制数据
  72. n--变换时的分母等于2的n次方
  73. 返回值:无
  74. ********************************************/
  75. voidTrans_val(uintHex_Val)
  76. {
  77. unsignedlongcaltmp;
  78. uintCurr_Volt;
  79. uchart1,i;
  80. ucharptr[4];
  81. caltmp=Hex_Val;
  82. caltmp=(caltmp<<5)+Hex_Val;//caltmp=Hex_Val*33
  83. caltmp=(caltmp<<3)+(caltmp<<1);//caltmp=caltmp*10
  84. Curr_Volt=caltmp>>12;//Curr_Volt=caltmp/2^n
  85. ptr[0]=Curr_Volt/100;//Hex->Dec变换
  86. t1=Curr_Volt-(ptr[0]*100);
  87. ptr[2]=t1/10;
  88. ptr[3]=t1-(ptr[2]*10);
  89. ptr[1]=10;//shuzi表中第10位对应符号"."
  90. //在液晶上显示变换后的结果
  91. ucharresult[4];
  92. for(i=0;i<4;i++)
  93. {
  94. result[i]=shuzi[ptr[i]];
  95. }
  96. Send_data(result);
  97. }
  98. /*******************************************
  99. 函数名称:ADC12ISR
  100. 功能:ADC中断服务函数,在这里用多次平均的
  101. 计算P6.0口的模拟电压数值
  102. 参数:无
  103. 返回值:无
  104. ********************************************/
  105. #pragmavector=ADC_VECTOR
  106. __interruptvoidADC12ISR(void)
  107. {
  108. staticuintindex=0;
  109. results[index++]=ADC12MEM0;//Moveresults
  110. if(index==Num_of_Results)
  111. {
  112. uchari;
  113. unsignedlongsum=0;
  114. index=0;
  115. for(i=0;i<Num_of_Results;i++)
  116. {
  117. sum+=results[i];
  118. }
  119. sum>>=5;//除以32
  120. Trans_val(sum);
  121. }
  122. }

花了一个白天搭了下,还是挺好玩的

你可能感兴趣的:(java)