Zclub討論區 Z板

 找回密码
 註冊
搜索
查看: 2289|回复: 4

[分享] 自製手機儀表測試方享

[复制链接]
发表于 2013-12-19 11:41:51 | 显示全部楼层 |阅读模式
本帖最後由 fzr_7 於 2013-12-19 12:02 編輯

先說明此文章只分享如何用8051傳資料給手機和手機如何接收8051傳的資料
他像是8051如何抓取機車的各項數據請參考我發過的自製表裡的電路和程式
把那些數據傳給另1顆8051後用那顆8051接藍牙傳給手機
你要直接用原始的8051也可以,記得保留P3.0和P3.1

全部只剩電路還沒焊接,之前做的雙LCD液晶的電路無法共用
手機程式方面還可以加強一下藍牙的處理

藍牙模組就網拍最便宜的就好,8051記得買+5V動作的,不要買到+3.3V的
藍牙AT指令和設定請跟賣家要或是網路找一下有PDF檔,我就是自己找PDF,如何使用請GOOGLE會比我仔細


HD畫質,本來想說用FULL HD,想一想算了
開始圖片是誰一看就知,應該沒看到大奶就認不出吧

我的棒球偶像,我們家都是猿的球迷居多
IMG_0475.JPG

家裡手機裡面的怪照片,被打馬賽克看不出來是誰,被程式找出來貼上
因為手機不是我的,我的TWM A5粉色還在等 知道的不要炮我,這邊不是政治文
IMG_0476.JPG

8051接藍牙的電路很簡單,就RX和TX兩條線而已,GOOGLE或看書就會

8051的組合語言程式,很簡單的增加數據來傳給手機做測試用,自己看一下書就會傳機車的資料前先傳個數據來判斷下一個數據是機車什麼資料
鮑率記得跟藍牙模組用一樣的,不用太快,除非你需要


  1.         ORG        00H
  2.         JMP        START
  3. START:
  4.         MOV        P0,#0FFH                ;ND輸入
  5.         MOV        P1,#0FFH                ;NR、NN輸入
  6.         MOV        P2,#0FFH                ;NS輸入
  7.         MOV        P3,#00000011B             ; P3.0和P3.1要用來接藍牙的TX和RX
  8.         MOV        31H,#8                        ;轉速8~245,傳後要+10
  9.         MOV        32H,#7                        ;檔位0~7
  10.         MOV        33H,#0                        ;時速0~149
  11.         MOV        34H,#0                        ;里程150~159
  12.         MOV        35H,#0                        ;油溫0=0度,99=99度
  13.         MOV        36H,#0                        ;汽油量+100,100=0,120=10.0
  14.         MOV        37H,#0                        ;電壓+121,121=LOW,122=10.0v
  15.                                                          ;132=11.0v,167=14.5v,168=HI
  16.         MOV        R0,#0
  17.         MOV        TMOD,#00100000B
  18.         ANL        PCON,#01111111B
  19.         MOV        TH1,#244                ;鮑率2.4K最低
  20.         MOV        TL1,#244
  21.         SETB        TR1
  22.         MOV        SCON,#01010000B
  23. START0:
  24.         MOV        A,SBUF
  25.         JNB        RI,$
  26.         CLR        RI
  27.         CALL        DELAY
  28.         CJNE        A,#100,START0                ;100是手機傳給8051一個開始接收訊號
  29. START1:
  30.         MOV        SBUF,#255                ;油溫 傳送一個數據約3.3ms 有7組14個0.052
  31.         JNB        TI,[        DISCUZ_CODE_262        ]nbsp;                       ;傳送1組數據+DELAY約106.6ms
  32.         CLR        TI
  33.         CALL        DELAY
  34.         MOV        A,35H
  35.         MOV        SBUF,A
  36.         JNB        TI,$
  37.         CLR        TI
  38.         CALL        DELAY
  39.         INC        35H
  40.         MOV        A,35H
  41.         CJNE        A,#100,STA5
  42.         MOV        35H,#0
  43. STA5:
  44.         MOV        SBUF,#254                ;汽油量
  45.         JNB        TI,$
  46.         CLR        TI
  47.         CALL        DELAY
  48.         MOV        A,36H
  49.         MOV        SBUF,A
  50.         JNB        TI,$
  51.         CLR        TI
  52.         CALL        DELAY
  53.         INC        36H
  54.         MOV        A,36H
  55.         CJNE        A,#21,STA6
  56.         MOV        36H,#0
  57. STA6:
  58.         MOV        SBUF,#253                ;電壓
  59.         JNB        TI,$
  60.         CLR        TI
  61.         CALL        DELAY
  62.         MOV        A,37H
  63.         MOV        SBUF,A
  64.         JNB        TI,$
  65.         CLR        TI
  66.         CALL        DELAY
  67.         INC        37H
  68.         MOV        A,37H
  69.         CJNE        A,#48,STA7
  70.         MOV        37H,#0
  71. STA7:
  72.         MOV        SBUF,#252                ;轉速
  73.         JNB        TI,$
  74.         CLR        TI
  75.         CALL        DELAY
  76.         MOV        A,31H
  77.         MOV        SBUF,A
  78.         JNB        TI,$
  79.         CLR        TI
  80.         CALL        DELAY
  81.         MOV        A,31H
  82.         ADD        A,R1
  83.         MOV        31H,A
  84.         CJNE        A,#246,STA01
  85. STA01:
  86.         JC        STA1
  87.         MOV        31H,#8
  88. STA1:
  89.         MOV        SBUF,#251                ;檔位
  90.         JNB        TI,$
  91.         CLR        TI
  92.         CALL        DELAY
  93.         MOV        A,32H
  94.         MOV        SBUF,A
  95.         JNB        TI,$
  96.         CLR        TI
  97.         CALL        DELAY
  98.         INC        32H
  99.         MOV        A,32H
  100.         CJNE        A,#8,STA2
  101.         MOV        32H,#0
  102. STA2:
  103.         MOV        SBUF,#250                ;時速
  104.         JNB        TI,$
  105.         CLR        TI
  106.         CALL        DELAY
  107.         MOV        A,33H
  108.         MOV        SBUF,A
  109.         JNB        TI,$
  110.         CLR        TI
  111.         CALL        DELAY
  112.         MOV        A,33H
  113.         ADD        A,R0
  114.         MOV        33H,A
  115.         CJNE        A,#150,STA02
  116. STA02:
  117.         JC        STA3
  118.         MOV        33H,#0
  119. STA3:
  120.         MOV        SBUF,#249                ;里程
  121.         JNB        TI,$
  122.         CLR        TI
  123.         CALL        DELAY
  124.         MOV        A,34H
  125.         MOV        SBUF,A
  126.         JNB        TI,$
  127.         CLR        TI
  128.         CALL        DELAY
  129.         INC        34H
  130.         MOV        A,34H
  131.         CJNE        A,#10,STA4
  132.         MOV        34H,#0
  133. STA4:
  134.         INC        R0
  135.         CJNE        R0,#10,STA15
  136.         MOV        R0,#0
  137. STA15:
  138.         INC        R1
  139.         CJNE        R1,#100,STA16
  140.         MOV        R1,#0
  141. STA16:
  142.         JMP        START1
  143. DELAY:        MOV        R7,#1                ;延遲0.05秒
  144. DEL1:        MOV        R6,#249
  145. DEL2:        MOV        R5,#100
  146. DEL3:        DJNZ        R5,DEL3
  147.         DJNZ        R6,DEL2
  148.         DJNZ        R7,DEL1
  149.         RET
  150.         END

复制代码

沒有分享出手機的完整程式,因為每個人的8051抓機車數據不一樣,
傳給手機又不一樣給了也沒用
以下藍牙程式取自http://fgchentech.blogspot.tw/2012/11/android.html
我把他改成1次抓2個BYTE後去判斷是傳機車的什麼數據
其他像layout和AndroidManifest.xml裡面要放的藍牙資料請自己處理
  1. <font style="background-color: rgb(255, 255, 255);">import android.os.Bundle;
  2. import android.app.Activity;
  3. import android.view.Menu;
  4. import android.bluetooth.BluetoothAdapter;
  5. import android.bluetooth.BluetoothDevice;
  6. import android.bluetooth.BluetoothSocket;
  7. import android.content.Intent;
  8. import android.os.Handler;
  9. import android.view.View;
  10. import android.widget.TextView;
  11. import android.widget.EditText;  
  12. import android.widget.Button;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.OutputStream;
  16. import java.util.Set;
  17. import java.util.UUID;
  18. public class MainActivity extends Activity {
  19.     TextView myLabel;
  20.     EditText myTextbox;
  21.     BluetoothAdapter mBluetoothAdapter;
  22.     BluetoothSocket mmSocket;
  23.     BluetoothDevice mmDevice;
  24.     OutputStream mmOutputStream;
  25.     InputStream mmInputStream;
  26.     Thread workerThread;
  27.     byte[] readBuffer;
  28.     int readBufferPosition;
  29.     int counter;
  30.     volatile boolean stopWorker;
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33.   super.onCreate(savedInstanceState);
  34.   setContentView(R.layout.activity_main);
  35.   Button openButton = (Button)findViewById(R.id.open);
  36.   Button sendButton = (Button)findViewById(R.id.send);
  37.   Button closeButton = (Button)findViewById(R.id.close);
  38.   myLabel = (TextView)findViewById(R.id.label);
  39.   myTextbox = (EditText)findViewById(R.id.entry);
  40.   //Open Button
  41.   openButton.setOnClickListener(new View.OnClickListener()
  42.   {
  43.    public void onClick(View v)
  44.    {
  45.     try
  46.     {
  47.      findBT(); //搜尋藍芽裝置
  48.      openBT(); //開啟藍芽裝置(連線)
  49.     }
  50.     catch (IOException ex) { }
  51.              }
  52.          });
  53.          //Send Button
  54.          sendButton.setOnClickListener(new View.OnClickListener()
  55.          {
  56.              public void onClick(View v)
  57.              {
  58.                  try
  59.                  {
  60.                      sendData();
  61.                  }
  62.                  catch (IOException ex) { }
  63.              }
  64.          });
  65.          //Close button
  66.          closeButton.setOnClickListener(new View.OnClickListener()
  67.          {
  68.              public void onClick(View v)
  69.              {
  70.                  try
  71.                  {
  72.                      closeBT(); //關閉藍芽裝置
  73.                  }
  74.                  catch (IOException ex) { }
  75.              }
  76.          });  
  77. }
  78.     void findBT()
  79.    {
  80.         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  81.         if(mBluetoothAdapter == null)
  82.         {
  83.             myLabel.setText("No bluetooth adapter available");
  84.         }
  85.         if(!mBluetoothAdapter.isEnabled())
  86.         {
  87.             Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  88.             startActivityForResult(enableBluetooth, 0);
  89.         }
  90.         Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
  91.         if(pairedDevices.size() > 0)
  92.         {
  93.             for(BluetoothDevice device : pairedDevices)
  94.             {
  95.                 if(device.getName().equals("KILL"))  //KILL是我自己設的藍牙的名稱
  96.                 {
  97.                     mmDevice = device;
  98.                     break;
  99.                 }
  100.             }
  101.         }
  102.         myLabel.setText(mmDevice.getName() + " found");
  103.     }
  104.     void openBT() throws IOException
  105.     {
  106.         UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID
  107.         mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);        
  108.         mmSocket.connect();
  109.         mmOutputStream = mmSocket.getOutputStream();
  110.         mmInputStream = mmSocket.getInputStream();
  111.         beginListenForData(); //開始傾聽藍芽裝置的資料
  112.         myLabel.setText(mmDevice.getName() + " Opened");
  113.     }
  114.     void beginListenForData()
  115.     {
  116.         final Handler handler = new Handler();
  117.         final byte delimiter = 10; //This is the ASCII code for a newline character
  118.         stopWorker = false;
  119.         readBufferPosition = 0;
  120.         readBuffer = new byte[1024];
  121.         workerThread = new Thread(new Runnable() //建立一條新執行緒進入傾聽來自藍芽裝置資料輸入程序
  122.         {
  123.             public void run()
  124.             {               
  125.                while(!Thread.currentThread().isInterrupted() && !stopWorker)
  126.                {
  127.                    try
  128.                     {
  129.               int bytesAvailable = mmInputStream.available();                        
  130.                         if(bytesAvailable > 1)
  131.                         {
  132.                             byte[] packetBytes = new byte[2];  //我改成1次讀2個BYTE就好
  133.                             mmInputStream.read(packetBytes);
  134.                                     int da1=packetBytes[0]&0xff;
  135.                                     final String da11=Integer.toString(da1);
  136.                                     da1=packetBytes[1]&0xff;
  137.                                     final String da12=Integer.toString(da1);
  138.                                     handler.post(new Runnable()
  139.                                     {
  140.                                         public void run()
  141.                                         {
  142.                                          myLabel.append("\r\n" + da11+","+da12);
  143.                                         }
  144.                                    });
  145.                         }
  146.                     }
  147.                     catch (IOException ex)
  148.                     {
  149.                         stopWorker = true;
  150.                     }
  151.                }
  152.             }
  153.         });
  154.         workerThread.start();
  155.     }
  156.     void sendData() throws IOException
  157.     {
  158.         String msg = myTextbox.getText().toString();
  159.         msg += "\n";
  160.         mmOutputStream.write(msg.getBytes());
  161.         myLabel.setText("Data Sent");
  162.     }
  163.     void closeBT() throws IOException
  164.     {
  165.         stopWorker = true;
  166.         mmOutputStream.close();
  167.         mmInputStream.close();
  168.         mmSocket.close();
  169.         myLabel.setText("Bluetooth Closed");
  170.     }
  171. @Override
  172. public boolean onCreateOptionsMenu(Menu menu) {
  173.   // Inflate the menu; this adds items to the action bar if it is present.
  174.   getMenuInflater().inflate(R.menu.main, menu);
  175.   return true;
  176. }
  177. }</font>
复制代码

最後有問題沒給你回覆請直接pm我,喇塞文太多偶爾會漏掉
android程式有問題請不要問我,我從沒用過到做出來才不到半個月,時間也沒有超過100小時
大多參考別人的範例然後修改成自己想要的,有些指令會用但是意思沒有去深入了解

完全版要過年後了,有機會會錄個上車實測上來分享

评分

3

查看全部评分

回复

使用道具 举报

发表于 2013-12-19 12:26:53 | 显示全部楼层
Good,最近剛好碼表線斷了,也想自己搞一套數位儀表出來。個人目前看上Arduino跟Raspberry Pi,不過苦無時間啊。
回复

使用道具 举报

发表于 2013-12-19 19:22:46 | 显示全部楼层
使用干將的麵包板,嗯...有歷史的好物~
回复

使用道具 举报

发表于 2013-12-19 23:02:13 | 显示全部楼层
靠腰

完全看不懂
回复

使用道具 举报

发表于 2013-12-22 14:43:13 | 显示全部楼层
太專業啦~我的老天啊~~~~

回复

使用道具 举报

Yahoo
您需要登录后才可以回帖 登录 | 註冊

本版积分规则

手機版|Archiver|Z板 Sitetag 訪客統計

GMT+8, 2024-12-25 17:24 , Processed in 0.120601 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表