欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      嵌入式系統(tǒng)實(shí)驗(yàn)

      時(shí)間:2019-05-11 23:26:37下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《嵌入式系統(tǒng)實(shí)驗(yàn)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《嵌入式系統(tǒng)實(shí)驗(yàn)》。

      第一篇:嵌入式系統(tǒng)實(shí)驗(yàn)

      南京信息工程大學(xué) 實(shí)驗(yàn)(實(shí)習(xí))報(bào)告

      實(shí)驗(yàn)(實(shí)習(xí))名稱

      電機(jī)轉(zhuǎn)動(dòng)控制及中斷實(shí)驗(yàn) 實(shí)驗(yàn)(實(shí)習(xí))日期

      2016.5 得分

      指導(dǎo)教師 謝勝東

      學(xué)院 計(jì)算機(jī)與軟件 專業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 年級(jí)

      2013 班次 3 姓名

      葉正舟 學(xué)號(hào)

      20131308072 實(shí)驗(yàn)名稱

      電機(jī)轉(zhuǎn)動(dòng)控制及中斷實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?/p>

      (1)熟悉ARM本身自帶的六路即三對(duì)PWM,掌握相應(yīng)寄存器的配置

      (2)編程實(shí)現(xiàn) ARM系統(tǒng)的PWM 輸出和I/O 輸出,前者用于控制直流電機(jī),后者用于控制步進(jìn)電機(jī)。

      (3)了解直流電機(jī)和步進(jìn)電機(jī)的工作原理,學(xué)會(huì)用軟件的方法實(shí)現(xiàn)步進(jìn)電機(jī)的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。

      (4)掌握帶有PWM 和I/O 的CPU 編程實(shí)現(xiàn)其相應(yīng)功能的主要方法。實(shí)驗(yàn)環(huán)境

      (1)ADS1.2開發(fā)環(huán)境(2)PC(3)串口線 實(shí)驗(yàn)內(nèi)容及要求

      學(xué)習(xí)步進(jìn)電機(jī)和直流電機(jī)的工作原理,了解實(shí)現(xiàn)兩個(gè)電機(jī)轉(zhuǎn)動(dòng)對(duì)于系統(tǒng)的軟件和硬件要求。學(xué)習(xí)ARM知識(shí),掌握PWM 的生成方法,同時(shí)也要掌握I/O 的控制方法。

      (1)編程實(shí)現(xiàn)ARM芯片的一對(duì)PWM 輸出用于控制直流電機(jī)的轉(zhuǎn)動(dòng),通過A/D 旋鈕控制其正反轉(zhuǎn)及轉(zhuǎn)速

      (2)編程實(shí)現(xiàn)ARM的四路I/O 通道實(shí)現(xiàn)環(huán)形脈沖分配用于控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),通過A/D 旋鈕轉(zhuǎn)角控制步進(jìn)電機(jī)的轉(zhuǎn)角。

      (3)通過超級(jí)終端來控制直流電機(jī)與步進(jìn)電機(jī)的切換。實(shí)驗(yàn)設(shè)計(jì)與實(shí)驗(yàn)步驟

      (1)新建工程,將“電機(jī)轉(zhuǎn)動(dòng)控制實(shí)驗(yàn)”中的文件添加到工程(2)編寫直流電機(jī)初始化數(shù)(MotorCtrl.c)(3)控制直流電機(jī)與步進(jìn)電機(jī) 實(shí)驗(yàn)過程與分析

      (1)通過把從串口中得到控制信息的代碼修改成從zlg7289芯片中讀取小鍵盤信息,從而利用試驗(yàn)臺(tái)的小鍵盤來控制步進(jìn)電機(jī)和直流電機(jī)的切換

      (2)A/D轉(zhuǎn)換可以把電信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)來控制電機(jī)的轉(zhuǎn)速。for(;;)

      { loop:

      //if((rUTRSTAT0 & 0x1))//有輸入,則返回

      if(rPDATG&ZLG7289_KEY)//17鍵小鍵盤控制電機(jī)

      {

      *Revdata=RdURXH0();

      goto begin;

      }

      Delay(10);ADData=GetADresult(0);

      if(abs(lastADData-ADData)<20)

      goto loop;Delay(10);count=-(ADData-lastADData)*3;

      //(ADData-lastADData)*270/1024為ad旋鈕轉(zhuǎn)過的角度,360/512為步距角,//由于接了1/8減速器,兩者之商再乘以8為步進(jìn)電機(jī)相應(yīng)轉(zhuǎn)過的角度

      if(count>=0)

      {//轉(zhuǎn)角大于零

      for(j=0;j

      {

      for(i=0;i<=7;i++)

      {

      SETEXIOBITMASK(stepdata[i], 0xf0);

      Delay(200);

      }

      }

      }

      lastADData=ADData;

      } } 實(shí)驗(yàn)結(jié)果總結(jié)

      利用A/D轉(zhuǎn)換器實(shí)現(xiàn)了對(duì)直流電機(jī)和步進(jìn)電機(jī)的控制,利用實(shí)驗(yàn)設(shè)備上自帶的小鍵盤實(shí)現(xiàn)了A/D轉(zhuǎn)換器對(duì)兩個(gè)電機(jī)控制的切換。心得體會(huì)

      通過本次實(shí)驗(yàn),熟悉了ARM自帶的六路(三對(duì))PWM,并對(duì)直流電機(jī)和步進(jìn)電機(jī)的工作原理有了進(jìn)一步的了解。

      第二篇:嵌入式系統(tǒng)原理實(shí)驗(yàn)總結(jié)報(bào)告

      嵌入式系統(tǒng)原理實(shí)驗(yàn)總結(jié)報(bào)告

      車輛座椅控制系統(tǒng)實(shí)驗(yàn)

      2014/5/23

      嵌入式系統(tǒng)原理實(shí)驗(yàn)總結(jié)報(bào)告

      一、技術(shù)性總結(jié)報(bào)告

      (一)題目:車輛座椅控制系統(tǒng)實(shí)驗(yàn)

      (二)項(xiàng)目概述:

      1.為了實(shí)現(xiàn)車輛座椅控制的自動(dòng)化與智能化。

      2.方便用戶通過智能手機(jī)與車載傳感器之間的聯(lián)動(dòng)。3.使車輛作為當(dāng)今物聯(lián)網(wǎng)中重要的一個(gè)節(jié)點(diǎn)發(fā)揮作用。

      4.通過車輛座椅控制系統(tǒng)實(shí)驗(yàn)實(shí)現(xiàn)對(duì)嵌入式系統(tǒng)原理課程的熟練掌握與對(duì)嵌入式系統(tǒng)原理知識(shí)的深化記憶。

      5.加強(qiáng)本組學(xué)生對(duì)嵌入式系統(tǒng)原理的更深層次的理解與運(yùn)用。

      (三)技術(shù)方案及原理

      本次試驗(yàn)分為軟件、硬件兩個(gè)部分。1.軟件部分。

      A.智能手機(jī)部分,包括通過智能手機(jī)對(duì)座椅的控制部分、手機(jī)所攜帶的身份信息部分。

      本部分軟件使用Java編寫,其程序部分為: 主程序:

      package com.example.seat;

      import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.os.Build;

      import java.io.BufferedReader;import java.io.IOException;

      import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;

      import java.net.UnknownHostException;

      import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;

      import android.view.KeyEvent;import android.view.View;import android.widget.Button;

      public class MainActivity extends ActionBarActivity { private Button Up = null;private Button Left = null;private Button Dowm = null;private Button Right = null;private Socket socket = null;

      private static final String HOST = “192.168.1.142”;

      private static final int PORT = 10007;

      public void onCreate(Bundle savedInstanceState){

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      initControl();

      }

      private void initControl(){

      Up =(Button)findViewById(R.id.button1);

      Up.setOnClickListener(new ReceiverListener());

      }

      class ReceiverListener implements OnClickListener {

      protected String line;

      @Override

      public void onClick(View v){

      // TODO Auto-generated method stub

      new Thread(){

      @Override

      public void run(){

      try {

      Socket socket = new Socket(HOST, PORT);

      BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

      line = br.readLine();

      br.close();

      } catch(UnknownHostException e){

      // TODO Auto-generated catch block

      e.printStackTrace();

      } catch(IOException e){

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      handler.sendEmptyMessage(0);

      }

      }.start();

      }

      }

      private Handler handler = new Handler(){

      @Override

      public void handleMessage(Message msg){

      super.handleMessage(msg);

      }

      };

      @Override

      public boolean onCreateOptionsMenu(Menu menu){

      // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);

      return true;

      }

      @Override

      public boolean onOptionsItemSelected(MenuItem item){

      // Handle action bar item clicks here.The action bar will

      // automatically handle clicks on the Home/Up button, so long

      // as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();

      if(id == R.id.action_settings){

      return true;

      }

      return super.onOptionsItemSelected(item);

      }

      /**

      * A placeholder fragment containing a simple view.*/

      public static class PlaceholderFragment extends Fragment {

      public PlaceholderFragment(){

      }

      @Override

      public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){

      View rootView = inflater.inflate(R.layout.fragment_main, container, false);

      return rootView;

      }

      } } 界面代碼:

      package=“com.example.seat”

      android:versionCode=“1”

      android:versionName=“1.0” >

      android:name=“android.permission.ACCESS_NETWORK_STATE”/>

      android:minSdkVersion=“8”

      android:targetSdkVersion=“19” />

      android:allowBackup=“true”

      android:icon=“@drawable/ic_launcher”

      android:label=“@string/app_name”

      android:theme=“@style/AppTheme” >

      android:name=“com.example.seat.MainActivity”

      android:label=“@string/app_name” >

      B.車載座椅控制部分,包括控制系統(tǒng)對(duì)座椅的控制部分、對(duì)智能手機(jī)發(fā)出的控制信息的識(shí)別部分和對(duì)手機(jī)所攜帶身份信息的校驗(yàn)與儲(chǔ)存部分。本部分軟件使用Python編寫,其程序部分為: #!/usr/bin/python #encoding=utf-8 from Raspi_PWM_Servo_Driver import PWM import time, socket

      host = '' port = 10007

      pwm = PWM(0x6F, debug=True)

      servoMin = 125 # Min pulse length out of 4096 , 0.5 servoMax = 575 # Max pulse length out of 4096 , 2.3

      def setServoPulse(channel, pulse):

      pulseLength = 1000000

      # 1,000,000 us per second

      pulseLength /= 60

      # 60 Hz

      print “%d us per period” % pulseLength

      pulseLength /= 4096

      # 12 bits of resolution

      print “%d us per bit” % pulseLength

      pulse *= 1000

      pulse /= pulseLength

      if(pulse>servoMax): pulse = servoMax

      if(pulse

      pwm.setPWM(channel, 0, int(pulse))

      pwm.setPWMFreq(60)

      # Set frequency to 60 Hz pwm.setPWM(0, 0, servoMax)

      if __name__ == '__main__':

      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

      s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

      s.bind((host, port))

      s.listen(3)

      print 'Server is running on port %d, press Ctrl-C to terminate it.' % port

      pulse_ud = 1.9

      pulse_lr = 1.9

      setServoPulse(0,pulse_ud)

      setServoPulse(1,pulse_lr)

      while True:

      clientsock, clientaddr = s.accept()

      clientfile = clientsock.makefile('rw', 0)

      ctrlinfo = clientfile.readline().strip()

      print 'Control info is %s.n' % ctrlinfo

      if ctrlinfo == “up”:

      pulse_ud += 0.1

      elif ctrlinfo == “down”:

      pulse_ud-= 0.1

      elif ctrlinfo == “l(fā)eft”:

      pulse_lr += 0.1

      elif ctrlinfo == “right”:

      pulse_lr-= 0.1

      else:

      print “ERRORn”

      setServoPulse(0,pulse_ud)

      setServoPulse(1,pulse_lr)

      clientfile.close()

      clientsock.close()

      2.硬件部分。

      對(duì)車載座椅控制部分發(fā)出的信息的接受、識(shí)別、執(zhí)行部分。本次試驗(yàn)使用的硬件設(shè)備包括:智能手機(jī)一部、“樹莓派”一臺(tái)、小舵機(jī)兩臺(tái)、舵機(jī)驅(qū)動(dòng)板一個(gè)、無線網(wǎng)卡一個(gè)、杜邦線若干、5V電源一個(gè)、無線路由器一個(gè)

      智能手機(jī)

      樹莓派(外)

      樹莓派(內(nèi))

      小舵機(jī)

      舵機(jī)驅(qū)動(dòng)板

      無線網(wǎng)卡

      杜邦線

      5V電源

      無線路由器

      (四)實(shí)驗(yàn)流程及結(jié)果

      1.打開智能手機(jī)上的控制軟件。

      2.向車載座椅控制臺(tái)發(fā)送信息。(發(fā)送信息分別為上、下、左、右)3.車載座椅控制臺(tái)接受、識(shí)別并執(zhí)行信息。4.通過小舵機(jī)的動(dòng)作驗(yàn)證該實(shí)驗(yàn)是否成功。(詳細(xì)見視頻)

      二、工作進(jìn)度自評(píng)表

      本次試驗(yàn)完成。

      本次試驗(yàn)計(jì)劃分為三個(gè)階段。

      第一階段:智能手機(jī)部分、車載座椅控制部分和硬件部分的分別完成。本階段完成。

      第二階段:智能手機(jī)部分、車載座椅控制部分和硬件部分的整合階段。本階段完成。

      第三階段:車輛座椅控制系統(tǒng)實(shí)驗(yàn)的驗(yàn)收調(diào)試階段。本階段完成。

      三、組內(nèi)人員自評(píng)

      本次試驗(yàn)打到預(yù)期的實(shí)驗(yàn)?zāi)康摹km然在實(shí)驗(yàn)進(jìn)行過程中遇到了不少的麻煩,但是通過我們成員自身的努力學(xué)習(xí)掌握了實(shí)驗(yàn)所要求的知識(shí)。最后實(shí)驗(yàn)的成功與組員之間的互相幫助與緊密配合是分不開的。

      四、個(gè)人學(xué)習(xí)心得

      本人通過此次實(shí)驗(yàn),對(duì)于嵌入式系統(tǒng)原理有了更加深層次的了解。對(duì)于設(shè)計(jì)嵌入式系統(tǒng)原理的實(shí)驗(yàn)也有了較為高程度的提高。為了以后更進(jìn)一步的學(xué)習(xí)并掌握嵌入式系統(tǒng)打下了堅(jiān)實(shí)的一步。對(duì)于了解車輛座椅控制的自動(dòng)化與智能化;了解用戶通過智能手機(jī)與車載傳感器之間的聯(lián)動(dòng);了解車輛作為當(dāng)今物聯(lián)網(wǎng)中重要的一個(gè)節(jié)點(diǎn)都發(fā)揮了重要作用。通過車輛座椅控制系統(tǒng)實(shí)驗(yàn)實(shí)現(xiàn)對(duì)嵌入式系統(tǒng)原理課程的熟練掌握與對(duì)嵌入式系統(tǒng)原理知識(shí)的深化記憶。加強(qiáng)本組學(xué)生對(duì)嵌入式系統(tǒng)原理的更深層次的理解與運(yùn)用。

      第三篇:嵌入式實(shí)驗(yàn)總結(jié)

      如今,嵌入式系統(tǒng)已經(jīng)在眾多電氣電子產(chǎn)品上應(yīng)用,有人預(yù)測(cè)今后5年發(fā)展形勢(shì)看好。嵌入式是典型的交叉學(xué)科,電信、電子、電氣、計(jì)算機(jī)、通信等等都有涉及。

      嵌入式理論、實(shí)踐要求多、門檻高,只有理論、實(shí)踐同步才能在積累中更好的漸次掌握,這學(xué)期我們針對(duì)嵌入式入門做了一些實(shí)驗(yàn),通過自己動(dòng)手和實(shí)驗(yàn)箱、實(shí)驗(yàn)軟件打交道,對(duì)嵌入式編程形成初步了解,為今后進(jìn)一步發(fā)展打基礎(chǔ)。

      實(shí)驗(yàn)環(huán)境:

      武漢創(chuàng)維特公司JXARM9-2410開發(fā)板、PC;

      Linux、windows操作平臺(tái);

      DNW、VMwareWorkstation應(yīng)用軟件;

      《ARM9嵌入式技術(shù)及Linux高級(jí)實(shí)踐教程》、實(shí)驗(yàn)參考資料等;

      實(shí)驗(yàn)內(nèi)容及目標(biāo):

      閱讀樣例程序,進(jìn)行:

      1.熟悉JXARM9-2410開發(fā)板、相關(guān)應(yīng)用軟件的使用,能成功運(yùn)行示例實(shí)驗(yàn)程序(demo-led);

      2.使用VMware,修改demo-led源程序,使開發(fā)板上數(shù)碼管按照demo-led顯示方式顯示;

      3.使用VMware、DNW,修改相關(guān)源程序,實(shí)現(xiàn)開發(fā)板鍵盤輸入的字符在DNW中顯示;

      4.使用VMware、DNW,修改相關(guān)源程序,實(shí)現(xiàn)對(duì)直流電機(jī)轉(zhuǎn)動(dòng)狀態(tài)的控制;

      觀看教學(xué)視頻,進(jìn)行交叉編譯:

      1.加載linux內(nèi)核;

      2.配置、編譯linux內(nèi)核;

      3.Windows、linux跨平臺(tái)文件共享;

      4.編譯、運(yùn)行l(wèi)inux程序(helloworld)

      5.Linux下編譯數(shù)碼管顯示驅(qū)動(dòng)程序;

      6.Linux下編譯攝像頭、GPRS驅(qū)動(dòng)程序;

      學(xué)習(xí)嵌入式是一個(gè)漫長的過程,學(xué)好它還是需要一番的功夫。通過嵌入式實(shí)驗(yàn)由淺入深的動(dòng)手實(shí)踐,我漸漸對(duì)嵌入式有了具體概念,也逐漸對(duì)其產(chǎn)生了興致和好奇心。

      對(duì)于初學(xué)者,還有一點(diǎn)小建議,不要好高騖遠(yuǎn),要腳踏實(shí)地.

      第四篇:嵌入式實(shí)驗(yàn)二

      1.實(shí)驗(yàn)二:利用中斷實(shí)現(xiàn) OLED 動(dòng)態(tài)顯示實(shí)驗(yàn)

      1.1 實(shí)驗(yàn)名稱

      1.2 實(shí)驗(yàn)?zāi)康?/p>

      (1)深入學(xué)習(xí)、理解、掌握 OLED 字符顯示方法

      (2)深入學(xué)習(xí)、理解、掌握 OLED 圖形顯示方法(3)學(xué)習(xí)、理解、掌握中斷使用方法

      1.3 實(shí)驗(yàn)過程與分析

      1.3.1 回答實(shí)驗(yàn)報(bào)告中的實(shí)驗(yàn)問題

      (1)ISR是什么?簡述一下中斷的作用和使用方法

      答:ISR是中斷服務(wù)程序。作用是通過處理器執(zhí)行事先編好的某個(gè)特定的程序。使用方法就是在main中寫一個(gè)中斷程序,然后在startup.s中進(jìn)行注冊(cè)。

      (2)嵌入式系統(tǒng)中有哪些應(yīng)用有定時(shí)性循環(huán)處理的要求?舉幾個(gè)例子

      答:在各種網(wǎng)絡(luò)的應(yīng)用中,設(shè)計(jì)的一些部件,如計(jì)數(shù)器,時(shí)鐘等。

      (3)定時(shí)時(shí)間間隔如何修改?

      (4)選作內(nèi)容5-8的編程思路是什么?若做的話應(yīng)該怎樣實(shí)現(xiàn)? 答:編程思路:先畫直線和豎線,組成一個(gè)正方形,將各個(gè)參數(shù)填寫到函數(shù)答:通過改變SysTickPeriodSet(SysCtlClockGet()/100)后面的100這個(gè)參數(shù)。

      RIT128x96x4ImageDraw(buf,,);

      第6個(gè)選作:判斷畫的原點(diǎn)x,原點(diǎn)y,和畫原點(diǎn)x+的長,畫原點(diǎn)y+畫寬的值要在0-128和0-96。

      第7個(gè)選作:把RIT128x96x4StringDraw(“hello”,,);就是把畫的灰度定義為一個(gè)變量x。最后就會(huì)出現(xiàn)由不同的亮度而形成的波浪。

      第8個(gè)就是利用隨機(jī)函數(shù)產(chǎn)生畫的原點(diǎn),隨機(jī)的在屏幕上進(jìn)行顯示。

      (5)拖影現(xiàn)象如何解決?計(jì)數(shù)值顯示為什么沒有拖影? 答:在程序結(jié)束后執(zhí)行清屏語句:計(jì)數(shù)顯示是每次重新賦值,所以不會(huì)出現(xiàn)拖影。

      1.3.2 實(shí)驗(yàn)中遇到的問題及解決方法

      (1)字符和下方橫線,從左至右移動(dòng),無法同時(shí)到達(dá)

      通過最大寬度128除以閥值,調(diào)整了字符和橫線的速度,解決(2)附加字符循環(huán)移動(dòng),移動(dòng)到一半,不見了

      查看函數(shù)排錯(cuò),得以解決

      (3)基本問題做完時(shí),字符顯示完整,添加附加任務(wù)后,字符顯示不全

      未解決...1.4實(shí)驗(yàn)結(jié)果總結(jié) 實(shí)驗(yàn)結(jié)果(附照片)

      總結(jié)(自己的收獲)1.5心得體會(huì)

      #include #include #include “rit128x96x4.h” int Event = 0;unsigned char buf1[] = {

      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };unsigned char buf2[] = {

      0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00 };unsigned char buf3[] = {

      0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf4[] = {

      0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf5[] = {

      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };unsigned char buf6[] = {

      0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf7[] = {

      0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf8[] = {

      0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };

      unsigned char r1[] = {

      0xff,0xff };unsigned char r2[] = {

      0xf0,0x0f };unsigned char r3[] = {

      0xf0,0x0f };unsigned char r4[] = {

      0xff,0xff };

      unsigned char c1[] = {

      0x0f,0xf0 };unsigned char c2[] = {

      0xf0,0x0f };unsigned char c3[] = {

      0xf0,0x0f };unsigned char c4[] = {

      0x0f,0xf0 };void SysTick_Handler(void){ Event = 1;} void printX(){ }

      int main(){

      int count = 0,i,Light=0,x=0,z=0,y=0,zz=0,yy=0,c=0,cc=0,a=0,aa=0;unsigned char buf[5];

      //存(數(shù)字)字符串

      unsigned char name[20] = “";unsigned char number[20] = ”“;SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN SYSCTL_XTAL_8MHZ);RIT128x96x4Init(1000000);RIT128x96x4Clear();

      SysTickPeriodSet(SysCtlClockGet()/ 10);

      //調(diào)頻率

      SysTickEnable();SysTickIntEnable();while(1){

      if(Event){

      RIT128x96x4Clear();

      Event = 0;

      sprintf(buf,”%3i“,count);

      //通過sprintf將數(shù)字轉(zhuǎn)換為字符

      | if(Light >= 15)

      {

      Light=0;

      } else {

      Light++;} RIT128x96x4StringDraw(name, 50, 55, 15-Light);RIT128x96x4StringDraw(number, 50, 65, Light);sprintf(buf,”%d",count);;RIT128x96x4StringDraw(buf, 50, 75, 12);

      count++;if(count>=200){

      count=0;} RIT128x96x4ImageDraw(buf2,(int)(x*0.50), 5, 20, 1);RIT128x96x4ImageDraw(buf3,(int)(x*0.50), 7, 20, 1);RIT128x96x4ImageDraw(buf4,(int)(x*0.50), 9, 20, 1);RIT128x96x4ImageDraw(buf5,(int)(x*0.50), 11,20, 1);RIT128x96x4ImageDraw(buf6,(int)(x*0.50), 13, 20, 1);RIT128x96x4ImageDraw(buf7,(int)(x*0.50), 15, 20, 1);RIT128x96x4ImageDraw(buf8,(int)(x*0.50), 17, 20, 1);RIT128x96x4ImageDraw(buf1, 0, 20,(int)(x*0.60), 1);RIT128x96x4ImageDraw(c1,(int)(60+c*1.20),(int)(5+a*0.85), 4, 1);RIT128x96x4ImageDraw(c2,(int)(60+c*1.20),(int)(7+a*0.85), 4, 1);RIT128x96x4ImageDraw(c3,(int)(60+c*1.20),(int)(9+a*0.85), 4, 1);RIT128x96x4ImageDraw(c4,(int)(60+c*1.20),(int)(11+a*0.85), 4, 1);RIT128x96x4ImageDraw(r1,(int)(z*0.30),(int)(50+y*0.20), 4, 1);RIT128x96x4ImageDraw(r2,(int)(z*0.30),(int)(52+y*0.20), 4, 1);RIT128x96x4ImageDraw(r3,(int)(z*0.30),(int)(54+y*0.20), 4, 1);RIT128x96x4ImageDraw(r4,(int)(z*0.30),(int)(56+y*0.20), 4, 1);if(x<=200&&x>=0)

      //直線 {

      x++;} if(x>=200){

      x=0;} if(c<=50&&c>=-50)

      //圓形循環(huán) {

      if(cc==0)c++;

      if(cc==1)c--;} if(c>=50){

      cc=1;} if(c<=-50){

      cc=0;} if(a<=100&&a>=0){

      if(aa==0)a++;

      if(aa==1)a--;} if(a>=100){

      aa=1;} if(x<=0){

      aa=0;} if(y<=200&&y>=0){

      if(yy==0)y++;

      if(yy==1)y--;} if(y>=200){

      yy=1;} if(y<=-200){

      yy=0;} if(z<=400&&z>=0){

      if(zz==0)z++;

      if(zz==1)z--;} if(z>=400){

      zz=1;} if(z<=0){

      //矩形反彈

      }

      zz=0;

      } } } return 0;

      第五篇:嵌入式實(shí)驗(yàn)2

      南昌航空大學(xué)實(shí)驗(yàn)報(bào)告

      二0一一 年 10月 16日

      課程名稱: 嵌入式系統(tǒng) 實(shí)驗(yàn)名稱: 串行端口程序設(shè)計(jì) 班 級(jí): 080611 學(xué)生姓名: 曹啟斌 學(xué)號(hào): 08061107 指導(dǎo)教師評(píng)定: 簽名:

      一、實(shí)驗(yàn)?zāi)康?了解在linux環(huán)境下串行程序設(shè)計(jì)的基本方法。掌握終端的主要屬性及設(shè)置方法,熟悉終端IO函數(shù)的使用。3 學(xué)習(xí)使用多線程來完成串口的收發(fā)處理。

      二、實(shí)驗(yàn)內(nèi)容

      讀懂程序源代碼,學(xué)習(xí)終端IO函數(shù)tcgetattr(), tcsetattr(),tcflush()的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接收和發(fā)送程序設(shè)計(jì)中。

      三、預(yù)備知識(shí)

      1、有C語言基礎(chǔ)。

      2、掌握在LINUX下常用編輯器的使用。

      3、掌握Makefile 的編寫和使用。

      4、掌握Linux下的程序編譯與交叉編譯過程

      四、實(shí)驗(yàn)設(shè)備及工具

      硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀,PC機(jī)pentumn500以上, 硬盤40G以上,內(nèi)存大于128M。

      軟件:PC機(jī)操作系統(tǒng)REDHAT LINUX 9.0 +MINICOM + AMRLINUX開發(fā)環(huán)境

      五、實(shí)驗(yàn)原理

      Linux 操作系統(tǒng)從一開始就對(duì)串行口提供了很好的支持,為進(jìn)行串行通訊提供了大量的函數(shù),我們的實(shí)驗(yàn)主要是為掌握在LINUX中進(jìn)行串行通訊編程的基本方法。

      1.程序流程圖

      程序流程圖如圖2-3所示:

      圖2-3 程序流程圖

      2串口操作需要的頭文件

      #include /*標(biāo)準(zhǔn)輸入輸出定義*/ #include /*標(biāo)準(zhǔn)函數(shù)庫定義*/ #include /*linux標(biāo)準(zhǔn)函數(shù)定義*/ #include #include #include /*文件控制定義*/ #include /*PPSIX 終端控制定義*/ #include /*錯(cuò)誤號(hào)定義*/ #include

      /*線程庫定義*/ 3打開串口

      在 Linux 下串口文件是位于 /dev 下,串口一為/dev/ttyS0,串口二為 /dev/ttyS1,打開串口是通過使用標(biāo)準(zhǔn)的文件打開函數(shù)操作:

      int fd;/*以讀寫方式打開串口*/ fd = open(“/dev/ttyS0”, O_RDWR);if(-1 == fd){ perror(“ 提示錯(cuò)誤!”);}

      4設(shè)置串口

      最基本的設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置。串口的設(shè)置主要是設(shè)置 struct termios 結(jié)構(gòu)體的各成員值。

      struct termio { unsigned short c_iflag;/* 輸入模式標(biāo)志 */

      unsigned short c_oflag;/* 輸出模式標(biāo)志 */

      unsigned short c_cflag;/* 控制模式標(biāo)志 */

      unsigned short c_lflag;/* local mode flags */

      unsigned char c_line;/* line discipline */

      unsigned char c_cc[NCC];/* control characters */ };設(shè)置這個(gè)結(jié)構(gòu)體很復(fù)雜,可以參考man手冊(cè)或者由趙克佳、沈志宇編寫的《UNIX程序編寫教程》,我這里就只考慮常見的一些設(shè)置:

      波特率設(shè)置:

      下面是修改波特率的代碼: struct termios Opt;tcgetattr(fd, &Opt);cfsetispeed(&Opt,B19200);/*設(shè)置為19200Bps*/ cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);校驗(yàn)位和停止位的設(shè)置: 無效驗(yàn) 8位

      Option.c_cflag &= ~PARENB;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS8;奇效驗(yàn)(Odd)7位

      Option.c_cflag |= ~PARENB;Option.c_cflag &= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS7;偶效驗(yàn)(Even)7位

      Option.c_cflag &= ~PARENB;Option.c_cflag |= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS7;Space效驗(yàn) 7位

      Option.c_cflag &= ~PARENB;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= &~CSIZE;Option.c_cflag |= CS8;設(shè)置停止位:

      1位:

      options.c_cflag &= ~CSTOPB;2位: options.c_cflag |= CSTOPB;需要注意的是,如果不是開發(fā)終端之類的,只是串口傳輸數(shù)據(jù),而不需要串口來處理,那么使用原始模式(Raw Mode)方式來通訊,設(shè)置方式如下:

      options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);/*Input*/ options.c_oflag &= ~OPOST;/*Output*/ 5讀寫串口

      設(shè)置好串口之后,讀寫串口就很容易了,把串口當(dāng)作文件讀寫就可以了。發(fā)送數(shù)據(jù):

      char buffer[1024];int Length=1024;int nByte;nByte = write(fd, buffer ,Length)讀取串口數(shù)據(jù):

      使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。

      可以使用操作文件的函數(shù)來實(shí)現(xiàn)異步讀取,如fcntl,或者select等來操作。char buff[1024];int Len=1024;int readByte = read(fd, buff, Len);6關(guān)閉串口

      關(guān)閉串口就是關(guān)閉文件。close(fd);7空MODEM通訊連接電纜

      一般進(jìn)行串口調(diào)試使用空MODEM連接電纜,其接線方式如下圖2-4所示:

      圖2-4 實(shí)用RS-232C通訊連線

      六、實(shí)驗(yàn)步驟

      1.2.3.4.進(jìn)入expbasic