久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

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

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

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

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

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

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

2016.5 得分

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

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

2013 班次 3 姓名

葉正舟 學(xué)號

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

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

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

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

(3)了解直流電機(jī)和步進(jìn)電機(jī)的工作原理,學(xué)會用軟件的方法實(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)兩個電機(jī)轉(zhuǎn)動對于系統(tǒng)的軟件和硬件要求。學(xué)習(xí)ARM知識,掌握PWM 的生成方法,同時也要掌握I/O 的控制方法。

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

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

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

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

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

(2)A/D轉(zhuǎn)換可以把電信號轉(zhuǎn)換成數(shù)字信號來控制電機(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)了對直流電機(jī)和步進(jìn)電機(jī)的控制,利用實(shí)驗(yàn)設(shè)備上自帶的小鍵盤實(shí)現(xiàn)了A/D轉(zhuǎn)換器對兩個電機(jī)控制的切換。心得體會

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

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

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

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

2014/5/23

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

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

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

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

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

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

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

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

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

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

A.智能手機(jī)部分,包括通過智能手機(jī)對座椅的控制部分、手機(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)對座椅的控制部分、對智能手機(jī)發(fā)出的控制信息的識別部分和對手機(jī)所攜帶身份信息的校驗(yàn)與儲存部分。本部分軟件使用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.硬件部分。

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

智能手機(jī)

樹莓派(外)

樹莓派(內(nèi))

小舵機(jī)

舵機(jī)驅(qū)動板

無線網(wǎng)卡

杜邦線

5V電源

無線路由器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Linux、windows操作平臺;

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

《ARM9嵌入式技術(shù)及Linux高級實(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)對直流電機(jī)轉(zhuǎn)動狀態(tài)的控制;

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

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

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

3.Windows、linux跨平臺文件共享;

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

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

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

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

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

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

1.實(shí)驗(yàn)二:利用中斷實(shí)現(xiàn) OLED 動態(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)報告中的實(shí)驗(yàn)問題

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

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

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

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

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

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

RIT128x96x4ImageDraw(buf,,);

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

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

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

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

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

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

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

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

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

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

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

#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)報告

二0一一 年 10月 16日

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

一、實(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ù)備知識

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)從一開始就對串行口提供了很好的支持,為進(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 /*錯誤號定義*/ #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(“ 提示錯誤!”);}

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è)置這個結(jié)構(gòu)體很復(fù)雜,可以參考man手冊或者由趙克佳、沈志宇編寫的《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

主站蜘蛛池模板: 精品无码免费专区毛片| 久久综合88熟人妻| 日本看片一二三区高清| 国产国产久热这里只有精品| 水蜜桃av无码| 国产麻豆剧果冻传媒一区| 国产色视频自在线观看| 色视频综合无码一区二区三区| 狠狠噜天天噜日日噜视频麻豆| 国产人妻人伦精品1国产丝袜| 国产亚洲精品无码专区| 夜夜天天噜狠狠爱2019| 男女一边摸一边做爽爽的免费阅读| 国产成人高清亚洲明星一区| 亚洲精品乱码8久久久久久日本| 韩国主播av福利一区二区| 国产mv在线天堂mv免费观看| 中文字幕有码无码人妻av蜜桃| 国产精品欧美福利久久| 一品道高清一区二区| 无码超乳爆乳中文字幕久久| 国产亚洲精品久久久久蜜臀| 婷婷五月六月激情综合色中文字幕| 欧美日韩精品久久久免费观看| 狠狠躁天天躁无码中文字幕图| 国产熟妇的荡欲午夜视频| 久久av老司机精品网站导航| 日韩好片一区二区在线看| 国产又大又黑又粗免费视频| 色欲色香天天天综合vvv| 日韩人妻无码一本二本三本| 熟女丰满老熟女熟妇| 国产性生大片免费观看性| 亚洲色成人中文字幕网站| 欧美精品| 99热这里有精品| 色翁荡息又大又硬又粗又视频软件| 久久国产avjust麻豆| 亚洲精品区午夜亚洲精品区| 在线视频 一区 色| 精品超清无码视频在线观看|