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

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

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

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

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

      北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一

      時(shí)間:2019-05-15 09:33:04下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一》。

      第一篇:北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一

      北京郵電大學(xué)

      信息網(wǎng)絡(luò)應(yīng)用基礎(chǔ)實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)一

      靜態(tài)網(wǎng)頁(yè)的設(shè)計(jì)

      學(xué)院:電子工程學(xué)院

      班級(jí):

      姓名:

      學(xué)號(hào):

      一、實(shí)驗(yàn)主題

      1、設(shè)計(jì)主題:本次實(shí)驗(yàn)我設(shè)計(jì)的該網(wǎng)頁(yè)主題是圍繞當(dāng)前熱門的多人聯(lián)機(jī)在線網(wǎng)游DOTA2進(jìn)行的。并對(duì)該游戲的由來(lái)、背景及其內(nèi)容做了一些簡(jiǎn)要的描述。

      2、功能:在主頁(yè)中可以觀看該游戲的宣傳視頻以及該游戲的一些精美的圖片,并且通過(guò)選擇相應(yīng)選項(xiàng)可以了解更多的游戲內(nèi)容。

      3、運(yùn)行流程:

      ① 首先打開(kāi)主頁(yè)時(shí)可以選擇播放視頻,并且看到豐富的圖片;

      ② 然后點(diǎn)擊相應(yīng)的選項(xiàng)可以進(jìn)入到分別的附頁(yè)中查看內(nèi)容;

      ③ 并且在主頁(yè)點(diǎn)擊最下的圖片可以回到主頁(yè)頂部,在其他頁(yè)面點(diǎn)擊最下的圖片也可以回到主頁(yè)。

      4、實(shí)現(xiàn)功能的html技術(shù):

      ① 在主頁(yè)中觀看視頻利用的是html多媒體中的標(biāo)簽插入一個(gè)視頻的URL進(jìn)行播放;

      ② 在頁(yè)面中的圖片是利用了html多媒體中的標(biāo)簽進(jìn)行圖片的加入;

      ③ 設(shè)置頁(yè)面的背景圖片是在標(biāo)簽中加入background參數(shù)即可;

      ④ 在頁(yè)面內(nèi)、本機(jī)頁(yè)面間及本機(jī)文檔連接互聯(lián)網(wǎng)頁(yè)面時(shí)則是利用了超鏈接的三種方法建立;

      ⑤ 在頁(yè)面中顯示表格則是利用了相關(guān)的表格創(chuàng)建的語(yǔ)句來(lái)建立一個(gè)表格,并且可以對(duì)表格中插入圖片并且可以改變表格的背景顏色以及背景圖片。

      二、實(shí)驗(yàn)內(nèi)容運(yùn)行結(jié)果

      ① 打開(kāi)主頁(yè)可以看到插入的圖片以及背景圖片

      ② 點(diǎn)擊頁(yè)面中插入的視頻,點(diǎn)擊播放即可以進(jìn)行播放

      插入視頻的html代碼如下:

      ③ 點(diǎn)擊主頁(yè)中的超鏈接則可以跳轉(zhuǎn)到相應(yīng)的頁(yè)面。如:

      點(diǎn)擊英雄介紹鏈接

      則可以顯示英雄介紹頁(yè)面

      當(dāng)選擇一個(gè)類型的英雄時(shí)可以在本頁(yè)面跳轉(zhuǎn)到對(duì)應(yīng)類型的介紹

      當(dāng)選擇某個(gè)英雄時(shí)則可以鏈接到互聯(lián)網(wǎng)上的詳細(xì)介紹頁(yè)面

      ④ 當(dāng)在副頁(yè)面點(diǎn)擊最下面的圖片則可以跳轉(zhuǎn)到主頁(yè)面

      ⑤ 在頁(yè)面中建立的表格并且改變表格背景顏色并且插入圖片

      三、實(shí)驗(yàn)心得與感受

      本次實(shí)驗(yàn)真正的了解到了如何設(shè)計(jì)一個(gè)最基本的網(wǎng)頁(yè),也是將所學(xué)的html語(yǔ)言的知識(shí)進(jìn)行了充分的應(yīng)用,也對(duì)這些知識(shí)有了更加可視化的了解。由于是第一次進(jìn)行網(wǎng)頁(yè)的設(shè)計(jì),我選擇的是利用記事本來(lái)編輯html代碼來(lái)進(jìn)行設(shè)計(jì)的,由于代碼都是利用各種標(biāo)簽手動(dòng)輸入的,所以對(duì)語(yǔ)句有了深刻的記憶,包括在以后的學(xué)習(xí)中也會(huì)很好的利用它們。我認(rèn)為這樣相對(duì)于利用dreamweaver來(lái)設(shè)計(jì)有很多的好處,因?yàn)檫@樣第一次可以讓我們了解頁(yè)面的每一部分是怎么實(shí)現(xiàn)的,不過(guò)在了解過(guò)后可以選擇軟件來(lái)設(shè)計(jì),因?yàn)槟菢痈泳哂锌梢暬曳奖恪?/p>

      在設(shè)計(jì)的過(guò)程中,也遇到了不少的困難。首先感覺(jué)就是對(duì)于一個(gè)網(wǎng)頁(yè)的背景圖片選擇來(lái)說(shuō)比較困難,因?yàn)樵诰W(wǎng)頁(yè)中不會(huì)對(duì)一個(gè)圖片進(jìn)行伸縮,顯示的是圖片本身的大小,所以只好找到與頁(yè)面較符合的圖片。而且在插入視頻時(shí),我利用書(shū)中的代碼寫(xiě)入時(shí)不能在頁(yè)面中無(wú)法播放視頻。后來(lái)我在網(wǎng)上查閱相關(guān)資料,后來(lái)直接利用視頻網(wǎng)站中的分享視頻的代碼加入即可在頁(yè)面中顯示一個(gè)可播放的視頻。

      通過(guò)這個(gè)實(shí)驗(yàn)來(lái)進(jìn)行靜態(tài)網(wǎng)頁(yè)的設(shè)計(jì)還是很有意思的,既能學(xué)到知識(shí)又能了解自己喜歡的東西,而且在網(wǎng)頁(yè)完成后再進(jìn)行瀏覽是一件很有成就感的事情!

      第二篇:北郵數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告

      數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告

      (三)姓名:學(xué)號(hào):班級(jí):

      1.用Transact-SQL語(yǔ)句、數(shù)據(jù)導(dǎo)入、SQL Server Management Studio(企業(yè)管理器)輸入的方法對(duì)所給定的8張表的數(shù)據(jù)輸入到數(shù)據(jù)庫(kù)中。自行決定每張表的數(shù)據(jù)導(dǎo)入辦法,但每種方法各針對(duì)二或三張表。

      ? Transact-SQL語(yǔ)句: 導(dǎo)入department,student, student_course表。

      insertinto department select*from openrowset

      ('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:課件數(shù)據(jù)庫(kù)database2.xls',department$);

      insertinto student select*from openrowset

      ('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:課件數(shù)據(jù)庫(kù)database2.xls',student$);

      insertinto student_course select*from openrowset

      ('microsoft.jep.oledb.4.0','excel 5.0;hdr=yes;database=D:課件數(shù)據(jù)庫(kù)database2.xls',student_course$);

      ? 數(shù)據(jù)導(dǎo)入:

      操作:選中數(shù)據(jù)庫(kù)studentsdb,右鍵-任務(wù)-導(dǎo)入數(shù)據(jù)。導(dǎo)入book, class, course表。

      SQL Server Management Studio: 操作:右鍵需要編輯的表,選擇編輯前200行。

      Teacher:

      Teacher_course_class:

      導(dǎo)入結(jié)果: Book:

      Class:

      Course:

      Department:

      Student:

      Student_course:

      Teacher:

      Teacher_course_class:

      2.用Transact-SQL向Course表中插入一條記錄,course_name為空,看運(yùn)行的結(jié)果。

      SQL語(yǔ)句:

      INSERTINTO course VALUES('dep02_s002', null,'dep02_s002', '72', '5', '4');運(yùn)行結(jié)果:

      分析:course_name有not null的約束,因此這條語(yǔ)句不能執(zhí)行。

      3.用Transact-SQL修改Course表中credit為5的記錄,將其credit改為7, credit小于4的改為2,看運(yùn)行的結(jié)果。

      SQL語(yǔ)句:

      update course set credit=7 where credit=5;執(zhí)行結(jié)果:

      分析:約束C1指定了credit的范圍為1至6.SQL語(yǔ)句:

      update course set credit=2 where credit<4;執(zhí)行結(jié)果:

      4.刪除一條學(xué)生記錄,看運(yùn)行結(jié)果,對(duì)運(yùn)行結(jié)果進(jìn)行分析。SQL語(yǔ)句:

      deletefrom student where student_id='g9940201';執(zhí)行結(jié)果:

      分析:因?yàn)橛袇⒄胀暾约s束,不能刪除。

      5.用Transact-SQL完成將編號(hào)為dep04_b001的課程的選修信息插入到一個(gè)新的選課信息表中。

      SQL語(yǔ)句:

      Creattablestudent_course2(course_idchar(20), student_idchar(20)gradeint, creditint, semesterint,school_yearchar(20),primarykey(course_id,student_id));

      insertintostudent_course2 select*fromstudent_course wherecourse_id='dep04_b001';執(zhí)行結(jié)果:

      6.用Transact-SQL完成刪除單片機(jī)原理課程的選課信息,分析運(yùn)行結(jié)果。

      SQL語(yǔ)句:

      deletefrom student_course where course_id in(select course_id from course

      where course_name='單片機(jī)原理')執(zhí)行結(jié)果: 分析:所有課程號(hào)為dep04_s003的課程被刪除。

      本實(shí)驗(yàn)中遇到的問(wèn)題和解決方法:

      本實(shí)驗(yàn)的順利完成需要預(yù)先作很多準(zhǔn)備工作。以下就是我在遇到缺少組件accessdatabaseengine時(shí)的解決過(guò)程的記錄。

      AccessDatabaseEngine的安裝

      accessdatabaseengine用于和office連接,導(dǎo)入導(dǎo)出數(shù)據(jù),本實(shí)驗(yàn)中需要導(dǎo)入excel文件。安裝配合office的版本,我安裝的是accessdatabaseengine2017(English)版本。安裝32位版本,因office2016是32位。之前誤操作安裝了不能使用的老舊版本accessdatabaseengine2007,通過(guò)控制面板-應(yīng)用程序卸載將其卸載了。安裝accessdatabaseengine依然報(bào)錯(cuò),是因?yàn)閙icrosoftofficeclicktorun阻礙sqlserver的一些功能,需要將其卸載。這是微軟推出的用于減少office打開(kāi)速度的應(yīng)用程序,安裝office2016時(shí)會(huì)自動(dòng)安裝上,原理是開(kāi)機(jī)時(shí)將一部分內(nèi)容放到內(nèi)存中,因此打開(kāi)文件時(shí)會(huì)更快一些。檢測(cè)自己的office是通過(guò)clickto run 還是MSI安裝的,可以在word中點(diǎn)擊文件-賬戶,查看產(chǎn)品信息,如果有下圖中“office更新”這個(gè)選項(xiàng),則說(shuō)明安裝過(guò)click to run。這個(gè)程序在控制面板-應(yīng)用程序中找不到,因此用刪除注冊(cè)表的方式卸載??旖萱I“win+R”輸入“regedit”打開(kāi)注冊(cè)表編輯器,左邊HKEY_CLASSES_ROOT-Installer-Product-00006開(kāi)頭的選項(xiàng),有四個(gè)。單擊這幾個(gè)選項(xiàng),在右側(cè)查看詳細(xì)信息,可以看到ProductNam是Microsoft Access database engine 2007(我原來(lái)誤安裝的老版本)。刪除之前先備份注冊(cè)表。方法一:選中要?jiǎng)h除的文件,右鍵-導(dǎo)出,保存。只保存了要?jiǎng)h除的文件。方法二:注冊(cè)表編輯器,文件-導(dǎo)出,保存。保存了注冊(cè)表所有信息。這是因?yàn)槿绻`刪了重要文件會(huì)導(dǎo)致嚴(yán)重后果,可能需要重裝系統(tǒng),留此備份是為了可以恢復(fù)系統(tǒng)。

      備份完之后,選中要?jiǎng)h除的文件(00006開(kāi)頭的四個(gè)),右鍵-刪除即可?;氐紸ccess database engine 32位的程序安裝包,安裝。我無(wú)法安裝64位,可能是因?yàn)閛ffice是32位。安裝成功之后就可以在sqlserver中導(dǎo)入excel文件了。

      第三篇:北郵嵌入式實(shí)驗(yàn)報(bào)告

      北京郵電大學(xué)

      嵌入式系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)報(bào)告

      學(xué)院:

      班級(jí): 姓名: 學(xué)號(hào):

      序號(hào):

      目錄

      一、實(shí)驗(yàn)?zāi)康?.............................................................................................1

      二、實(shí)驗(yàn)設(shè)備..............................................................................................1

      三、基礎(chǔ)實(shí)驗(yàn)(實(shí)驗(yàn)一~實(shí)驗(yàn)七)............................................................1

      1.實(shí)驗(yàn)五..................................................................................................1 2.實(shí)驗(yàn)六..................................................................................................1 3.實(shí)驗(yàn)七..................................................................................................1

      四、驅(qū)動(dòng)程序..............................................................................................5

      1.設(shè)備驅(qū)動(dòng)程序的概念..........................................................................5 2.驅(qū)動(dòng)程序結(jié)構(gòu)......................................................................................6 3.設(shè)備注冊(cè)和初始化..............................................................................7 4.設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程..................................................................8

      五、基本接口實(shí)驗(yàn)......................................................................................8

      1.實(shí)驗(yàn)十二簡(jiǎn)單設(shè)備驅(qū)動(dòng)程序..............................................................9 2.實(shí)驗(yàn)十三 CPU GPIO驅(qū)動(dòng)程序設(shè)計(jì)...................................................9 3.實(shí)驗(yàn)十四中斷實(shí)驗(yàn)...........................................................................10 4.實(shí)驗(yàn)十五數(shù)碼管顯示實(shí)驗(yàn)................................................................12 5.實(shí)驗(yàn)十六 LED點(diǎn)陣驅(qū)動(dòng)程序設(shè)計(jì)...................................................19 6.實(shí)驗(yàn)十七 AD驅(qū)動(dòng)實(shí)驗(yàn)....................................................................23 7.實(shí)驗(yàn)十八 DA驅(qū)動(dòng)實(shí)驗(yàn)....................................................................26

      六、實(shí)驗(yàn)中遇到的問(wèn)題及解決方法........................................................30

      七、實(shí)驗(yàn)總結(jié)及心得................................................................................31

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

      通過(guò)實(shí)驗(yàn)熟悉Linux環(huán)境,并掌握一些基本接口驅(qū)動(dòng)的寫(xiě)法和用C語(yǔ)言編寫(xiě)簡(jiǎn)單的實(shí)驗(yàn)程序。學(xué)習(xí)LINUX開(kāi)發(fā)環(huán)境的搭建,通訊配置等。并熟練掌握LINUX驅(qū)動(dòng)程序的編寫(xiě)及開(kāi)發(fā)流程。對(duì)嵌入式系統(tǒng)有進(jìn)一步的了解。

      二、實(shí)驗(yàn)設(shè)備

      1.一套PXA270EP嵌入式實(shí)驗(yàn)箱

      2.安裝Redhat9的宿主PC機(jī),并且配置好ARM Linux的開(kāi)發(fā)環(huán)境

      三、基礎(chǔ)實(shí)驗(yàn)(實(shí)驗(yàn)一~實(shí)驗(yàn)七)

      實(shí)驗(yàn)一~七為基礎(chǔ)實(shí)驗(yàn),目的是為后續(xù)實(shí)驗(yàn)搭建好軟、硬件環(huán)境,配置好相關(guān)的協(xié)議、服務(wù),并通過(guò)編寫(xiě)最簡(jiǎn)單的HelloWorld程序進(jìn)行測(cè)試。由于后面的實(shí)驗(yàn)都要依靠前面實(shí)驗(yàn)的配置,故本段只著重?cái)⑹鰧?shí)驗(yàn)七的具體實(shí)現(xiàn)。

      1.實(shí)驗(yàn)五

      實(shí)驗(yàn)五為宿主PC機(jī)配置了TFTP服務(wù)。TFTP(Trivial File Transfer Protocol)是簡(jiǎn)單文件傳輸協(xié)議,由于特定開(kāi)發(fā)環(huán)境的制約,這一服務(wù)是必須的。在配置完成后,每次重啟宿主PC機(jī)時(shí),都須先輸入命令:service xinetd restart,以啟動(dòng)TFTP服務(wù)。

      2.實(shí)驗(yàn)六

      實(shí)驗(yàn)六為宿主PC機(jī)配置了NFS服務(wù)。NFS(Network File System)指網(wǎng)絡(luò)文件系統(tǒng),它實(shí)現(xiàn)了文件在不同的系統(tǒng)間使用。當(dāng)我們想用遠(yuǎn)端檔案時(shí),只需調(diào)用“mount”就可以遠(yuǎn)端系統(tǒng)掛接在自己的檔案系統(tǒng)之下。每次重啟宿主PC機(jī)時(shí),都須先輸入命令:service nfs restart,以啟動(dòng)nfs服務(wù)。

      3.實(shí)驗(yàn)七

      實(shí)驗(yàn)七通過(guò)用c語(yǔ)言編寫(xiě)的簡(jiǎn)單程序HelloWorld,測(cè)試前面幾個(gè)實(shí)驗(yàn)是否成功配置好環(huán)境,從超級(jí)終端可以看到HelloWorld程序的運(yùn)行結(jié)果。

      實(shí)驗(yàn)步驟如下: 1)硬件連接:

      連接宿主 PC 機(jī)和一臺(tái) PXA270-RP目標(biāo)板。2)打開(kāi)宿主PC 機(jī)電源,進(jìn)入 Linux操作系統(tǒng)。

      3)啟動(dòng)RedHat 9.0 的圖形界面,如下圖,若您是以 root 身份登陸在文本模式下,則輸入命令startx啟動(dòng)圖形界面。進(jìn)入RedHat 9.0 圖形界面后,打開(kāi)一個(gè)終端窗(Terminal)。

      4)輸入minicom然后回車,minicim設(shè)置為115200 8NI無(wú)流控。

      5)打開(kāi)PXA270_RP目標(biāo)板電源,按目標(biāo)板上的BOOT鍵,在minicom中應(yīng)該會(huì)看到如下圖:

      6)在minicom終端窗口中,如圖,輸入下列四條命令 root ifconfig eth 192.168.0.50 up mount-o nolock 192.168.0.100:/ /mnt cd /mnt 此時(shí),先將該窗口最小化,在后面的第 10 操作步驟中還將會(huì)回到該窗口中進(jìn)行操作。

      7)宿主機(jī)上打開(kāi)一個(gè)終端窗口(Terminal),點(diǎn)擊【紅帽/System Tools/Terminal】啟動(dòng)終端窗口,輸入下列 4 條命令: ① cd /home

      ②mkdir HW

      ③ cd HW

      ④ vi

      HelloWorld.c

      /*請(qǐng)您輸入程序 7.1 程序清單*/

      此時(shí)會(huì)顯示一個(gè)空白的屏幕,這條命令的含義是,使用 Vi 編輯器,對(duì)一個(gè)名叫HelloWorld.c的文件進(jìn)行編輯,我們看到的空白窗口是對(duì)文件進(jìn)行編輯的窗口,如下圖。就像在 Windows系統(tǒng)下面使用寫(xiě)字板等一樣道理。

      在 vi 里面先單擊鍵盤(pán) A 鍵,然后左下角會(huì)變成—INSER。輸入程序的時(shí)候和其他編輯器是一樣的,如下圖。

      當(dāng)輸入程序完畢后,單擊鍵盤(pán) Esc 鍵,然后按“:”(冒號(hào))此時(shí)左下角會(huì)出現(xiàn)冒號(hào)然后輸入“wq”最后按“Enter”確認(rèn)存盤(pán)退出 vi 編輯器,如下圖。

      8)在上面同一個(gè)終端窗口中,輸入下列 2 條命令交叉編譯HelloWorld.c源程序,并查看生成的.o 目標(biāo)文件,如圖 7-10,圖7-11: ①

      arm-linux-gcc–oHelloWorldHelloWorld.c ②ls 等到再次出現(xiàn)提示符,代表程序已經(jīng)正確編譯。如果此步出現(xiàn)錯(cuò)誤信息,請(qǐng)查看錯(cuò)誤信息,并且重新編輯原來(lái)的 C文件,修改錯(cuò)誤。直到正確編譯。

      9)重新打開(kāi)第 7 步最小化的開(kāi)有minicom的終端窗口,即到 PXA270-RP 目標(biāo)板的mnt目錄下,請(qǐng)您輸入下列 3 條命令,運(yùn)行HelloWorld編譯成功的HelloWorld目標(biāo)程序:

      ① cd home/HW

      /*回到minicom中目標(biāo)板的/mnt/home/HW目錄下*/ ②ls ③./ HelloWorld

      /*此時(shí)會(huì)看到如下圖*/

      四、驅(qū)動(dòng)程序

      1.設(shè)備驅(qū)動(dòng)程序的概念

      設(shè)備驅(qū)動(dòng)程序?qū)嶋H是處理和操作硬件控制器的軟件,從本質(zhì)上講,是內(nèi)核中具有最高特權(quán)級(jí)的、駐留內(nèi)存的、可共享的底層硬件處理例程。驅(qū)動(dòng)程序是內(nèi)核的一部分,是操作系統(tǒng)內(nèi)核與硬件設(shè)備的直接接口,驅(qū)動(dòng)程序屏蔽了硬件的細(xì)節(jié),完成以下功能:

      ?對(duì)設(shè)備初始化和釋放;

      ?對(duì)設(shè)備進(jìn)行管理,包括實(shí)時(shí)參數(shù)設(shè)置,以及提供對(duì)設(shè)備的操作接口; ?讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)或者回送應(yīng)用程序請(qǐng)求的數(shù)據(jù); ?檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。

      Linux操作系統(tǒng)將所有的設(shè)備全部看成文件,并通過(guò)文件的操作界面進(jìn)行操作。對(duì)用戶程序而言,設(shè)備驅(qū)動(dòng)程序隱藏了設(shè)備的具體細(xì)節(jié),對(duì)各種不同設(shè)備提供了一致的接口,一般來(lái)說(shuō),是把設(shè)備映射為一個(gè)特殊的設(shè)備文件,用戶程序可以像對(duì)其他文件一樣對(duì)此設(shè)備文件進(jìn)行操作。這意味著:

      ?由于每一個(gè)設(shè)備至少由文件系統(tǒng)的一個(gè)文件代表,因而都有一個(gè)“文件名”。?應(yīng)用程序通??梢酝ㄟ^(guò)系統(tǒng)調(diào)用open()打開(kāi)設(shè)備文件,建立起與目標(biāo)設(shè)備的連接。

      ?打開(kāi)了代表著目標(biāo)設(shè)備的文件,即建立起與設(shè)備的連接后,可以通過(guò)read()、write()、ioctl()等常規(guī)的文件操作對(duì)目標(biāo)設(shè)備進(jìn)行操作。

      設(shè)備文件的屬性由三部分信息組成:第一部分是文件的類型,第二部分是一個(gè)主設(shè)備號(hào),第三部分是一個(gè)次設(shè)備號(hào)。其中類型和主設(shè)備號(hào)結(jié)合在一起惟一地確定了設(shè)備文件驅(qū)動(dòng)程序及其界面,而次設(shè)備號(hào)則說(shuō)明目標(biāo)設(shè)備是同類設(shè)備中的第幾個(gè)。

      由于Linux 中將設(shè)備當(dāng)做文件處理,所以對(duì)設(shè)備進(jìn)行操作的調(diào)用格式與對(duì)文件的操作類似,主要包括open()、read()、write()、ioctl()、close()等。應(yīng)用程序發(fā)出系統(tǒng)調(diào)用命令后,會(huì)從用戶態(tài)轉(zhuǎn)到核心態(tài),通過(guò)內(nèi)核將open()這樣的系統(tǒng)調(diào)用轉(zhuǎn)換成對(duì)物理設(shè)備的操作。

      2.驅(qū)動(dòng)程序結(jié)構(gòu)

      一個(gè)設(shè)備驅(qū)動(dòng)程序模塊的基本框架

      在系統(tǒng)內(nèi)部,I/O設(shè)備的存取通過(guò)一組固定的入口點(diǎn)來(lái)進(jìn)行,入口點(diǎn)也可以理解為設(shè)備的句柄,就是對(duì)設(shè)備進(jìn)行操作的基本函數(shù)。字符型設(shè)備驅(qū)動(dòng)程序提供如下幾個(gè)入口點(diǎn):

      ?

      open入口點(diǎn)。打開(kāi)設(shè)備準(zhǔn)備I/O操作。對(duì)字符設(shè)備文件進(jìn)行打開(kāi)操作,都會(huì)調(diào)用設(shè)備的open入口點(diǎn)。open子程序必須對(duì)將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,如清除緩沖區(qū)等。如果設(shè)備是獨(dú)占的,即同一時(shí)刻只能有一個(gè)程序訪問(wèn)此設(shè)備,則open子程序必須設(shè)置一些標(biāo)志以表示設(shè)備處于忙狀態(tài)。

      ?

      close入口點(diǎn)。關(guān)閉一個(gè)設(shè)備。當(dāng)最后一次使用設(shè)備完成后,調(diào)用close子程序。獨(dú)占設(shè)備必須標(biāo)記設(shè)備方可再次使用。

      ?

      read入口點(diǎn)。從設(shè)備上讀數(shù)據(jù)。對(duì)于有緩沖區(qū)的I/O操作,一般是從緩沖區(qū)里讀數(shù)據(jù)。對(duì)字符設(shè)備文件進(jìn)行讀操作將調(diào)用read子程序。

      ?

      write入口點(diǎn)。往設(shè)備上寫(xiě)數(shù)據(jù)。對(duì)于有緩沖區(qū)的I/O操作,一般是把數(shù)據(jù)寫(xiě)入緩沖區(qū)里。對(duì)字符設(shè)備文件進(jìn)行寫(xiě)操作將調(diào)用write子程序。

      ?ioctl入口點(diǎn)。執(zhí)行讀、寫(xiě)之外的操作。

      select入口點(diǎn)。檢查設(shè)備,看數(shù)據(jù)是否可讀或設(shè)備是否可用于寫(xiě)數(shù)據(jù)。select系統(tǒng)調(diào)用在檢查與設(shè)備文件相關(guān)的文件描述符時(shí)使用select入口點(diǎn)。

      3.設(shè)備注冊(cè)和初始化

      設(shè)備的驅(qū)動(dòng)程序在加載的時(shí)候首先需要調(diào)用入口函數(shù)init_module(),該函數(shù)最重要的一個(gè)工作就是向內(nèi)核注冊(cè)該設(shè)備,對(duì)于字符設(shè)備調(diào)用register_chrdev()完成注冊(cè)。register_chrdev的定義為:intregister_chrdev(unsigned int major, const char *name, struct file_ operations *fops);其中,major是為設(shè)備驅(qū)動(dòng)程序向系統(tǒng)申請(qǐng)的主設(shè)備號(hào),如果為0,則系統(tǒng)為此驅(qū)動(dòng)程序動(dòng)態(tài)分配一個(gè)主設(shè)備號(hào)。name是設(shè)備名,fops是對(duì)各個(gè)調(diào)用的入口點(diǎn)說(shuō)明。此函數(shù)返回0時(shí)表示成功;返回-EINVAL,表示申請(qǐng)的主設(shè)備號(hào)非法,主要原因是主設(shè)備號(hào)大于系統(tǒng)所允許的最大設(shè)備號(hào);返回-EBUSY,表示所申請(qǐng)的主設(shè)備號(hào)正在被其他設(shè)備程序使用。如果動(dòng)態(tài)分配主設(shè)備號(hào)成功,此函數(shù)將返回所分配的主設(shè)備號(hào)。如果register_chrdev()操作成功,設(shè)備名就會(huì)出現(xiàn)在/proc/dvices文件中。

      Linux在/dev目錄中為每個(gè)設(shè)備建立一個(gè)文件,用ls–l命令列出函數(shù)返回值,若小于0,則表示注冊(cè)失??;返回0或者大于0的值表示注冊(cè)成功。注冊(cè)以后,Linux將設(shè)備名與主、次設(shè)備號(hào)聯(lián)系起來(lái)。當(dāng)有對(duì)此設(shè)備名的訪問(wèn)時(shí),Linux通過(guò)請(qǐng)求訪問(wèn)的設(shè)備名得到主、次設(shè)備號(hào),然后把此訪問(wèn)分發(fā)到對(duì)應(yīng)的設(shè)備驅(qū)動(dòng),設(shè)備驅(qū)動(dòng)再根據(jù)次設(shè)備號(hào)調(diào)用不同的函數(shù)。

      當(dāng)設(shè)備驅(qū)動(dòng)模塊從Linux內(nèi)核中卸載,對(duì)應(yīng)的主設(shè)備號(hào)必須被釋放。字符設(shè)備在cleanup_ module()函數(shù)中調(diào)用unregister_chrdev()來(lái)完成設(shè)備的注銷。unregister_chrdev()的定義為:intunregister_chrdev(unsigned int major, const char *name);包括設(shè)備注冊(cè)在內(nèi),設(shè)備驅(qū)動(dòng)的初始化函數(shù)主要完成的功能是有以下5項(xiàng)。(1)對(duì)驅(qū)動(dòng)程序管理的硬件進(jìn)行必要的初始化。

      對(duì)硬件寄存器進(jìn)行設(shè)置。比如,設(shè)置中斷掩碼,設(shè)置串口的工作方式、并口的數(shù)據(jù)方向等。

      (2)初始化設(shè)備驅(qū)動(dòng)相關(guān)的參數(shù)。

      一般說(shuō)來(lái),每個(gè)設(shè)備都要定義一個(gè)設(shè)備變量,用以保存設(shè)備相關(guān)的參數(shù)。在這一步驟里對(duì)設(shè)備變量中的項(xiàng)進(jìn)行初始化。

      (3)在內(nèi)核注冊(cè)設(shè)備。

      調(diào)用register_chrdev()函數(shù)來(lái)注冊(cè)設(shè)備。(4)注冊(cè)中斷。

      如果設(shè)備需要IRQ支持,則要使用request_irq()函數(shù)注冊(cè)中斷。(5)其他初始化工作。

      初始化部分一般還負(fù)責(zé)給設(shè)備驅(qū)動(dòng)程序申請(qǐng)包括內(nèi)存、時(shí)鐘、I/O端口等在內(nèi)的系統(tǒng)資源,這些資源也可以在open子程序或者其他地方申請(qǐng)。這些資源不用時(shí),應(yīng)該釋放,以利于資源的共享。

      若驅(qū)動(dòng)程序是內(nèi)核的一部分,初始化函數(shù)則要按如下方式聲明: int __initchr_driver_init(void);其中__init是必不可少的,在系統(tǒng)啟動(dòng)時(shí)會(huì)由內(nèi)核調(diào)用chr_driver_init,完成驅(qū)動(dòng)程序的初始化。

      當(dāng)驅(qū)動(dòng)程序是以模塊的形式編寫(xiě)時(shí),則要按照如下方式聲明: intinit_module(void)當(dāng)運(yùn)行后面介紹的insmod命令插入模塊時(shí),會(huì)調(diào)用init_module函數(shù)完成初始化工作。

      4.設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程

      由于嵌入式設(shè)備由于硬件種類非常豐富,在默認(rèn)的內(nèi)核發(fā)布版中不一定包括所有驅(qū)動(dòng)程序。所以進(jìn)行嵌入式Linux系統(tǒng)的開(kāi)發(fā),很大的工作量是為各種設(shè)備編寫(xiě)驅(qū)動(dòng)程序。除非系統(tǒng)不使用操作系統(tǒng),程序直接操縱硬件。嵌入式Linux系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)與普通Linux開(kāi)發(fā)沒(méi)有區(qū)別。可以在硬件生產(chǎn)廠家或者Internet上尋找驅(qū)動(dòng)程序,也可以根據(jù)相近的硬件驅(qū)動(dòng)程序來(lái)改寫(xiě),這樣可以加快開(kāi)發(fā)速度。實(shí)現(xiàn)一個(gè)嵌入式Linux設(shè)備驅(qū)動(dòng)的大致流程如下。

      (1)查看原理圖,理解設(shè)備的工作原理。一般嵌入式處理器的生產(chǎn)商提供參考電路,也可以根據(jù)需要自行設(shè)計(jì)。

      (2)定義設(shè)備號(hào)。設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)來(lái)標(biāo)識(shí)。主設(shè)備號(hào)惟一標(biāo)識(shí)了設(shè)備類型,即設(shè)備驅(qū)動(dòng)程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引。次設(shè)備號(hào)僅由設(shè)備驅(qū)動(dòng)程序解釋,區(qū)分被一個(gè)設(shè)備驅(qū)動(dòng)控制下的某個(gè)獨(dú)立的設(shè)備。

      (3)實(shí)現(xiàn)初始化函數(shù)。在驅(qū)動(dòng)程序中實(shí)現(xiàn)驅(qū)動(dòng)的注冊(cè)和卸載。(4)設(shè)計(jì)所要實(shí)現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。(5)實(shí)現(xiàn)所需的文件操作調(diào)用,如read、write等。

      (6)實(shí)現(xiàn)中斷服務(wù),并用request_irq向內(nèi)核注冊(cè),中斷并不是每個(gè)設(shè)備驅(qū)動(dòng)所必需的。

      (7)編譯該驅(qū)動(dòng)程序到內(nèi)核中,或者用insmod命令加載模塊。(8)測(cè)試該設(shè)備,編寫(xiě)應(yīng)用程序,對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試。

      五、基本接口實(shí)驗(yàn)

      在完成了基本實(shí)驗(yàn)后,我們開(kāi)始著手基本接口實(shí)驗(yàn)。在這些實(shí)驗(yàn)中,我們學(xué)習(xí)如何編寫(xiě)設(shè)備驅(qū)動(dòng)程序,及如何用測(cè)試程序檢驗(yàn)驅(qū)動(dòng)程序是否正確,并通過(guò)改寫(xiě)測(cè)試程序正常地對(duì)驅(qū)動(dòng)程序進(jìn)行相關(guān)操作。

      1.實(shí)驗(yàn)十二 簡(jiǎn)單設(shè)備驅(qū)動(dòng)程序

      本次實(shí)驗(yàn)的任務(wù)是編寫(xiě)一個(gè)字符型設(shè)備驅(qū)動(dòng)程序,并學(xué)習(xí)在應(yīng)用程序中調(diào)用驅(qū)動(dòng)??紤]到我們初次接觸驅(qū)動(dòng)程序的編寫(xiě),對(duì)此還十分陌生,因此指導(dǎo)書(shū)中提供了本次實(shí)驗(yàn)所要用到的程序源代碼。雖然這樣一個(gè)字符型設(shè)備驅(qū)動(dòng)程序并沒(méi)有任何實(shí)際作用,但是它讓我們輕松掌握了嵌入式驅(qū)動(dòng)的編寫(xiě)過(guò)程,因?yàn)閺?fù)雜繁瑣的驅(qū)動(dòng),其骨架都是相同的。因此,看懂本實(shí)驗(yàn)的源代碼,學(xué)習(xí)并模仿其編寫(xiě)方法,對(duì)于后續(xù)實(shí)驗(yàn)有著非常重要的意義。

      2.實(shí)驗(yàn)十三 CPU GPIO驅(qū)動(dòng)程序設(shè)計(jì)

      在本實(shí)驗(yàn)中,我們要編寫(xiě)第一個(gè)針對(duì)實(shí)際硬件的驅(qū)動(dòng)程序。我們知道,凡是操作系統(tǒng)控制外部設(shè)備,即使是最簡(jiǎn)單的硬件電路,也是需要驅(qū)動(dòng)的。本實(shí)驗(yàn)涉及的外部硬件只有電阻和發(fā)光二極管。我們使用自己編寫(xiě)的驅(qū)動(dòng)程序與應(yīng)用程序控制 GPIO96的電平,通過(guò) LED 的亮滅來(lái)判斷,是否 CPU 做出了正確的響應(yīng)。

      補(bǔ)充代碼(1)

      //-------------------WRITE-----------------------ssize_tSIMPLE_GPIO_LED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);

      #endif

      return count;}

      補(bǔ)充代碼(2)

      //-------------------OPEN------------------------ssize_tSIMPLE_GPIO_LED_open(structinode * inode ,struct file * file){ #ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [--kernel--]n”);

      #endif

      MOD_INC_USE_COUNT;

      return 0;}

      補(bǔ)充代碼(3)

      //------------------structfile_operationsGPIO_LED_ctl_ops ={ open:SIMPLE_GPIO_LED_open, read:SIMPLE_GPIO_LED_read, write:SIMPLE_GPIO_LED_write, ioctl:SIMPLE_GPIO_LED_ioctl, release:SIMPLE_GPIO_LED_release, };實(shí)驗(yàn)作業(yè)

      要求在目標(biāo)板上LED閃爍產(chǎn)生亮7秒,滅2秒的效果 在測(cè)試程序中有這樣一段代碼: while(1){ ioctl(fd,LED_OFF);sleep(1);

      sleep(1);while(1){ ioctl(fd,LED_OFF);sleep(2);

      sleep(7);} 3.實(shí)驗(yàn)十四

      中斷實(shí)驗(yàn)

      // 滅2秒 // 亮7秒 ioctl(fd,LED_ON);}

      // 休眠1秒

      ioctl(fd,LED_ON);只需將上面的代碼改為如下代碼即可:

      在理論課中,我們學(xué)習(xí)了許多中斷方面的知識(shí),包括中斷向量、中斷優(yōu)先級(jí)、中斷過(guò)程等。在PXA270系統(tǒng)里,中斷控制器分外部設(shè)備和 PXA270X 處理器設(shè)備產(chǎn)生的兩個(gè)層次的中斷,前者是初級(jí)的中斷源,后者是次級(jí)中斷源,大量的次級(jí)中斷源通常被映射為一個(gè)初級(jí)中斷源。

      補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”);

      printk(“t %s tn”, VERSION);

      printk(“*********************************************nn”);

      } static intSimpleINT_temp_count = 0;補(bǔ)充代碼2 //-------------------READ------------------------ssize_tSIMPLE_INT_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){

      #ifdef OURS_INT_DEBUG

      #endif return count;printk(“SIMPLE_INT_read [--kernel--]n”);} 補(bǔ)充代碼3 //-------------------WRITE-----------------------ssize_tSIMPLE_INT_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){

      #ifdef OURS_INT_DEBUG

      } 補(bǔ)充代碼4 //------------------structfile_operationsINT_ctl_ops ={ open: SIMPLE_INT_open, read: SIMPLE_INT_read, #endif return count;printk(“SIMPL_INT_write [--kernel--]n”);write:SIMPLE_INT_write, ioctl:SIMPLE_INT_ioctl, release:SIMPLE_INT_release, };

      通過(guò)此實(shí)驗(yàn),我了解了硬件中斷管腳與中斷號(hào)的對(duì)應(yīng)關(guān)系,以及中斷號(hào)與中斷處理程序的對(duì)應(yīng)關(guān)系,對(duì)于今后編寫(xiě)更為復(fù)雜的中斷程序打下基礎(chǔ)。

      4.實(shí)驗(yàn)十五

      數(shù)碼管顯示實(shí)驗(yàn)

      在此實(shí)驗(yàn)中,我們要編寫(xiě)針對(duì) 74LV164 的驅(qū)動(dòng)程序,并用其串并轉(zhuǎn)換功能來(lái)控制八段LED數(shù)碼管的顯示。

      補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”);

      printk(“t %s tn”, VERSION);

      printk(“*********************************************nn”);

      } 補(bǔ)充代碼2 //-------------------READ------------------------ssize_tSERIAL_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG

      } 補(bǔ)充代碼3 //-------------------WRITE-----------------------ssize_tSERIAL_LED_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops)return count;printk(“SERIAL_LED_read [--kernel--]n”);#endif { #ifdef OURS_HELLO_DEBUG

      } 補(bǔ)充代碼4 //-------------------IOCTL-----------------------ssize_tSERIAL_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){ #ifdef OURS_HELLO_DEBUG

      #endif

      } 補(bǔ)充代碼5 //-------------------OPEN------------------------ssize_tSERIAL_LED_open(structinode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

      #endif

      return 0;} MOD_INC_USE_COUNT;printk(“SERIAL_LED_open [--kernel--]n”);return 0;printk(“SERIAL_LED_ioctl [--kernel--]n”);return count;#endif write_byte(* buf);printk(“SERIAL_LED_write [--kernel--]n”);補(bǔ)充代碼6 //-------------------RELEASE/CLOSE---------------ssize_tSERIAL_LED_release(structinode *inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

      printk(“SERIAL_LED_release [--kernel--]n”);

      #endif MOD_DEC_USE_COUNT;return 0;} 補(bǔ)充代碼7 //------------------structfile_operationsSERIAL_LED_ops ={ open: SERIAL_LED_open,read: SERIAL_LED_read,write:SERIAL_LED_write,ioctl:SERIAL_LED_ioctl,release:SERIAL_LED_release, };補(bǔ)充代碼8 staticint __initHW_SERIAL_LED_init(void){ int ret =-ENODEV;

      ret =

      devfs_register_chrdev(SERIAL_LED_MAJOR, &SERIAL_LED_ops);

      showversion();if(ret < 0)“serial_led_ctl”,} {

      } else { } return ret;printk(“ pxa270 serial_led_driver register success!![--kernel--]n”);printk(“ pxa270 init_module failed with %dn [--kernel--]”, ret);return ret;補(bǔ)充代碼9 staticint __init pxa270_SERIAL_LED_init(void){ int ret =-ENODEV;

      printk(“pxa270_SERIAL_LED_init [--kernel--]n”);

      #endif

      ret = HW_SERIAL_LED_init();if(ret)return ret;return 0;} 補(bǔ)充代碼10 static void __exit cleanup_SERIAL_LED(void){ #ifdef OURS_HELLO_DEBUG #ifdef OURS_HELLO_DEBUG

      #endif }

      補(bǔ)充代碼11 MODULE_DESCRIPTION(“serial_led driver module”);

      MODULE_AUTHOR(“l(fā)iduo”);

      MODULE_LICENSE(“GPL”);

      module_init(pxa270_SERIAL_LED_init);module_exit(cleanup_SERIAL_LED);使用測(cè)試程序看到的測(cè)試結(jié)果是數(shù)碼管按0-9顯示輸出。實(shí)驗(yàn)作業(yè)要求在上述基礎(chǔ)上,分別實(shí)現(xiàn)一下兩個(gè)功能:

      ①要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn) PXA270-EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字9-0。

      ②要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn) PXA270-EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字02468。

      由于在測(cè)試程序中定義了數(shù)組buf[10]分別存儲(chǔ)了0-9是個(gè)數(shù),因此上述功能的實(shí)現(xiàn)方法是,分別對(duì)測(cè)試程序做如下修改:

      原測(cè)試程序: while(1){ for(count=0;count<10;count++){ data[0] = buf[count];ret=write(fd,data,1);sleep(1);} } 實(shí)現(xiàn)功能①: while(1){ for(count=9;count>=0;count--)} } 結(jié)果顯示

      // 倒序顯示數(shù)字

      { data[0] = buf[count];ret=write(fd,data,1);sleep(1);devfs_unregister_chrdev(SERIAL_LED_MAJOR, “serial_led”);printk(“cleanup_SERIAL_LED [--kernel--]n”);實(shí)現(xiàn)功能②: while(1){ for(count=0;count<9;count=count+2)} } 結(jié)果顯示

      // 更改顯數(shù)順序

      { data[0] = buf[count];ret=write(fd,data,1);sleep(1);

      通過(guò)更改顯數(shù)的順序,很容易實(shí)現(xiàn)實(shí)驗(yàn)作業(yè)里要求的功能。

      5.實(shí)驗(yàn)十六 LED點(diǎn)陣驅(qū)動(dòng)程序設(shè)計(jì)

      通過(guò)本實(shí)驗(yàn)的操作,我們將 8X8 的點(diǎn)陣 LED 驅(qū)動(dòng)起來(lái)并通過(guò)編寫(xiě)測(cè)試程序,使其能夠按照您的意圖進(jìn)行顯示。要求您還編寫(xiě)更多的測(cè)試程序

      補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”);printk(“t %s tn”, VERSION);printk(“*********************************************nn”);

      } 補(bǔ)充代碼2 //-------------------READ------------------------ssize_tSIMPLE_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_LED_DEBUG

      #endif return count;printk(“SIMPLE_LED_read [--kernel--]n”);} 補(bǔ)充代碼3 //-------------------IOCTL-----------------------ssize_tSIMPLE_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){

      #endif

      } 補(bǔ)充代碼4 //------------------structfile_operationsLED_ctl_ops ={ open: SIMPLE_LED_open, read:

      SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release:SIMPLE_LED_release, };補(bǔ)充代碼5 staticint __init pxa270_LED_CTL_init(void){ int ret =-ENODEV;

      printk(“pxa270_LED_CTL_init [--kernel--]n”);

      #endif

      ret = HW_LED_CTL_init();if(ret)

      return ret;#ifdef OURS_LED_DEBUG return 0;printk(“SIMPLE_LED_ioctl [--kernel--]n”);#ifdef OURS_LED_DEBUG return 0;} 補(bǔ)充代碼6 static void __exit cleanup_LED_ctl(void){

      #ifdef OURS_LED_DEBUG

      #endif

      } ①要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn)按橫的方向隔行順序掃描 LED 點(diǎn)陣數(shù)碼管。

      ②要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn)按豎的方向順序掃描 LED 點(diǎn)陣數(shù)碼管。作業(yè)一,隔行掃描:

      printk(“cleanup_LED_ctl [--kernel--]n”);outw(0x0000,ioremap_addr);

      devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “l(fā)ed_ary_ctl”);for(i=1;i<=8;i2++){

      buf[0]=c;buf[1]=~r;// row for(j=1;j<=8;j++){

      } r = 1;c = c<<1;

      write(fd,buf,2);

      printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);usleep(200000);// sleep 0.2 second r=r<<1;

      buf[1]=~r;// column

      結(jié)果顯示

      作業(yè)二,豎向掃描:

      for(i=1;i<=8;i++){

      buf[0]=c;buf[1]=~r;// row for(j=1;j<=8;j++){

      } r = 1;c = c<<1;

      write(fd,buf,2);

      printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);usleep(200000);// sleep 0.2 second r=r<<1;

      buf[1]=~r;// column

      結(jié)果顯示

      6.實(shí)驗(yàn)十七 AD驅(qū)動(dòng)實(shí)驗(yàn)

      通過(guò)本實(shí)驗(yàn)的操作,我們將 AD 轉(zhuǎn)換器驅(qū)動(dòng)起來(lái)并通過(guò)編寫(xiě)測(cè)試程序,使其能夠?qū)⒛M信號(hào)量按照我們的要求轉(zhuǎn)換成數(shù)字信號(hào)量。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過(guò)程,請(qǐng)您再編寫(xiě)一個(gè)測(cè)試程序,將 UCB_ADC_INP_AD0 換成其他通道,來(lái)觀察其他 AD 通道情況。

      補(bǔ)充代碼1 voidshowversion(void){ printk(“%sn”,VERSION);} struct ucb1x00 *ad_ucb;

      補(bǔ)充代碼2 //-------------------READ------------------------staticssize_tadctl_read(struct file * file ,char *buf, size_t count, loff_t *offset){

      } 補(bǔ)充代碼3 //-------------------WRITE-----------------------ssize_tadctl_write(struct file * file ,const char *buf, size_t count, loff_t *offset){

      #ifdef OURS_HELLO_DEBUG printk(“writen”);

      #endif

      } 補(bǔ)充代碼4 //-------------------OPEN------------------------ssize_tadctl_open(structinode * inode ,struct file * file){

      #ifdef OURS_HELLO_DEBUG printk(“openn”);

      #endif

      }

      補(bǔ)充代碼5 //-------------------RELEASE/CLOSE---------------ssize_tadctl_release(structinode *inode ,struct file * file){

      #ifdef OURS_HELLO_DEBUG printk(“releasen”);

      #endif return 0;return 0;return count;#ifdef OURS_HELLO_DEBUG printk(“readn”);#endif return count;} 補(bǔ)充代碼6 staticstructfile_operationsadctl_ops = {

      };補(bǔ)充代碼7 //-------------------INIT------------------------staticint __initHW_AD_CTL_init(void){

      return ret;}

      補(bǔ)充代碼8 staticint __init pxa270_AD_CTL_init(void){ int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG int ret =-ENODEV;ret = devfs_register_chrdev(ADCTL_MAJOR, “adctl”, &adctl_ops);showversion();ad_ucb=ucb1x00_get();if(ret < 0){

      } else { } adctl_dev_handle = devfs_register(NULL, “ad_ctl”, DEVFS_FL_DEFAULT, printk(“adctl driver register success!n”);printk(“fail %dn”,ret);return 0;read: ioctl: adctl_read, adctl_ioctl, write: adctl_write, open: adctl_open, release:adctl_release,ADCTL_MAJOR, 0, S_IFCHR, &adctl_ops, NULL);printk(“initn”);#endif ret=HW_AD_CTL_init();if(ret)}

      補(bǔ)充代碼9 static void __exit cleanup_AD_ctl(void){

      }

      7.實(shí)驗(yàn)十八 DA驅(qū)動(dòng)實(shí)驗(yàn)

      通過(guò)本實(shí)驗(yàn)的操作,我們使用示波器看到了通過(guò)DA轉(zhuǎn)換而輸出的波形。在此基礎(chǔ)上,要求試寫(xiě)一個(gè)實(shí)現(xiàn)輸出三角波的測(cè)試程序。

      補(bǔ)充代碼1 #include #include #include #include #include #include #include #include 補(bǔ)充代碼2 voidshowversion(void){ printk(“*****************************n”);#ifdef OURS_HELLO_DEBUG printk(“cleanupn”);#endif devfs_unregister_chrdev(ADCTL_MAJOR,“ad_ctl”);devfs_unregister(adctl_dev_handle);return ret;return 0;

      } printk(“t %st n”,VERSION);printk(“*****************************n”);static long ioremap_addr;補(bǔ)充代碼3 //-------------------READ------------------------ssize_tSIMPLE_DA_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_DA_DEBUG

      } 補(bǔ)充代碼4 //-------------------WRITE-----------------------ssize_tSIMPLE_DA_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){

      printk(“SIMPLE_DA_write[--kernel--]n”);

      #endif

      return count;} 補(bǔ)充代碼5 //-------------------IOCTL-----------------------ssize_tSIMPLE_DA_ioctl(structinode * inode ,struct file * file, unsigned intcmd, outb(buf[0],ioremap_addr);#ifdef OURS_DA_DEBUG return count;#endif printk(“SIMPLE_DA_read[--kernel--]n”);long data){ #ifdef OURS_DA_DEBUG

      printk(“SIMPLE_DA_ioctl[--kernel--]n”);

      #endif return 0;} 補(bǔ)充代碼6 //-------------------OPEN------------------------ssize_tSIMPLE_DA_open(structinode * inode ,struct file * file){

      #ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [--kernel--]n”);

      MOD_INC_USE_COUNT;return 0;

      #endif } 補(bǔ)充代碼7 /------------------structfile_operationsDA_ctl_ops ={

      read: SIMPLE_DA_read,};

      補(bǔ)充代碼8 release:

      SIMPLE_DA_release, ioctl:

      SIMPLE_DA_ioctl, write:

      SIMPLE_DA_write, //-------------------INIT------------------------staticint __initHW_DA_CTL_init(void){ int ret =-ENODEV;

      }

      補(bǔ)充代碼9 staticint __init pxa270_DA_CTL_init(void){ int ret =-ENODEV;

      printk(“pxa270_DA_CTL_init [--kernel--]n”);

      #endif #ifdef OURS_DA_DEBUG } printk(“ pxa270 led_driver register success!![--kernel--]n”);{ else } return ret;printk(“ pxa270: init_module failed with %dn [--kernel--]”, ret);{ if(ret < 0)showversion();ret = devfs_register_chrdev(SIMPLE_DA_MAJOR, “da_ctl”, &DA_ctl_ops);

      ret = HW_DA_CTL_init();if(ret)

      return ret;return 0;} 補(bǔ)充代碼10 static void __exit cleanup_DA_ctl(void){

      #endif } 補(bǔ)充代碼11 MODULE_DESCRIPTION(“DA_ctl driver module”);MODULE_AUTHOR(“l(fā)iduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_DA_CTL_init);module_exit(cleanup_DA_ctl);printk(“cleanup_DA_ctl [--kernel--]n”);#ifdef OURS_DA_DEBUG

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

      每一次上課重新啟動(dòng)后,當(dāng)需要將宿主PC機(jī)的根目錄掛在到PXA270-EP目標(biāo)板的mnt目錄下(即在超級(jí)終端中輸入命令“mount –o soft,timeo=100,rsize=1024 192.168.0.100:/ /mnt”)時(shí),常顯示無(wú)法掛載。

      解決方法:在超級(jí)終端下的掛載命令應(yīng)該用”mount –o nolock 192.168.0.100:/ /mnt”,如果依然不能掛載需要重啟NFS服務(wù),即在PC機(jī)終端中輸入命令”service nfs restart”兩遍后就可以掛載,當(dāng)然有時(shí)候也可能是因?yàn)榫W(wǎng)線沒(méi)插好。

      在每次重啟機(jī)器之后都需要將PC機(jī)終端的IP地址和開(kāi)發(fā)板中的系統(tǒng)的IP地址設(shè)定正確,不然也無(wú)法掛載。

      七、實(shí)驗(yàn)總結(jié)及心得

      本學(xué)期的所有實(shí)驗(yàn)均在宿主PC機(jī)與PXA270-EP目標(biāo)板上進(jìn)行。在實(shí)驗(yàn)中,我們先建立硬件實(shí)驗(yàn)平臺(tái),又建立主機(jī)軟件開(kāi)發(fā)環(huán)境,接著為實(shí)驗(yàn)進(jìn)行各項(xiàng)配置,最后完成了各個(gè)實(shí)驗(yàn)中的多種功能。值得注意的是,前期的硬件、軟件準(zhǔn)備必須完整無(wú)誤地實(shí)現(xiàn),后續(xù)的實(shí)驗(yàn)才能順利進(jìn)行。所以,打基礎(chǔ)的工作一定要仔細(xì)謹(jǐn)慎。后續(xù)實(shí)驗(yàn)中雖然給出了驅(qū)動(dòng)程序的框架,仍需要我們自己補(bǔ)充完整,并開(kāi)動(dòng)腦筋舉一反三,在原代碼的基礎(chǔ)上進(jìn)行一定修改以實(shí)現(xiàn)新的功能。

      通過(guò)這學(xué)期的實(shí)驗(yàn),我逐步完成了建立實(shí)驗(yàn)軟件開(kāi)發(fā)平臺(tái),搭建實(shí)驗(yàn)編譯軟件環(huán)境,在PC上編輯、編譯一個(gè)應(yīng)用程序,并且在嵌入式系統(tǒng)上運(yùn)行和調(diào)試它的過(guò)程。在實(shí)驗(yàn)中,不難發(fā)現(xiàn),編譯驅(qū)動(dòng)程序大體框架都是一樣的,比如里面的讀函數(shù)、寫(xiě)函數(shù)、ioctl函數(shù)、打開(kāi)、關(guān)閉以及函數(shù)模塊的初始化并且在超級(jí)終端上顯示出等。但所不同的是,要根據(jù)不同的實(shí)驗(yàn)要求修改名稱,并且對(duì)其中必要的部分進(jìn)行修改。

      除此之外,我認(rèn)為很多基礎(chǔ)知識(shí)對(duì)實(shí)驗(yàn)的進(jìn)行也起著非常大的作用,例如數(shù)碼管的顯示原理。在掌握了基礎(chǔ)知識(shí)之后,上機(jī)的過(guò)程會(huì)顯得相對(duì)簡(jiǎn)單,尤其是代碼框架已經(jīng)給出,我們所以需要做的就是根據(jù)需要稍作改動(dòng)來(lái)得到我們想要的結(jié)果。

      在實(shí)驗(yàn)過(guò)程中常常會(huì)遇到各種各樣的問(wèn)題,剛開(kāi)始時(shí)我不知如何是好,只能求助于老師和同學(xué),后來(lái)隨著實(shí)驗(yàn)的進(jìn)行,我對(duì)實(shí)驗(yàn)的內(nèi)容和虛擬機(jī)都有了一定的了解,遇到問(wèn)題時(shí)也可以靜下心來(lái)思考其原因,自己嘗試各種方法去解決問(wèn)題。整個(gè)實(shí)驗(yàn)讓我了解了一套完整的嵌入式系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的全過(guò)程,學(xué)到的內(nèi)容非常豐富,相信在學(xué)習(xí)了這些內(nèi)容后,在今后的學(xué)習(xí)工作中接觸到類似內(nèi)容,我不會(huì)感到無(wú)從下手,而是能夠有條不紊。

      感謝老師的辛勤指導(dǎo)!

      第四篇:北郵數(shù)字電路與邏輯設(shè)計(jì)實(shí)驗(yàn)報(bào)告

      北京郵電大學(xué)數(shù)字電路與邏輯

      設(shè)計(jì)實(shí)驗(yàn)報(bào)告

      學(xué)院: 班級(jí):

      姓名:

      學(xué)號(hào):

      實(shí)驗(yàn)一 Quartus II原理圖輸入法設(shè)計(jì)與實(shí)現(xiàn)

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

      (1)熟悉Quartus II原理圖輸入法進(jìn)行電路設(shè)計(jì)和仿真;(2)掌握Quartus II 圖形模塊單元的生成與調(diào)用;(3)熟悉實(shí)驗(yàn)板的使用;

      二、實(shí)驗(yàn)所用器材:

      (1)計(jì)算機(jī);

      (2)直流穩(wěn)壓電源;

      (3)數(shù)字系統(tǒng)與邏輯設(shè)計(jì)實(shí)驗(yàn)開(kāi)發(fā)板。

      三、實(shí)驗(yàn)任務(wù)要求

      (1)用邏輯門設(shè)計(jì)實(shí)現(xiàn)一個(gè)半加器,仿真驗(yàn)證其功能,并生成新的半加器圖形模塊單元。

      (2)用(1)中生成的半加器模塊和邏輯門設(shè)計(jì)實(shí)現(xiàn)一個(gè)全加器,仿真驗(yàn)證其功能,并下載到實(shí)驗(yàn)板測(cè)試,要求用撥碼開(kāi)關(guān)設(shè)定輸入信號(hào),發(fā)光二極管顯示輸出信號(hào)。

      (3)用3線-8線譯碼器(74LS138)和邏輯門設(shè)計(jì)實(shí)現(xiàn)函數(shù) ,仿真驗(yàn)證其功能,并下載到實(shí)驗(yàn)板測(cè)試。要求用撥碼開(kāi)關(guān)設(shè)定輸入信號(hào),發(fā)光二極管顯示輸出信號(hào)。

      四、實(shí)驗(yàn)原理圖及仿真波形圖

      (1)半加器

      半加器原理圖

      仿真波形

      仿真波形圖分析:根據(jù)仿真波形對(duì)比半加器真值表,可以確定電路實(shí)現(xiàn)了半加器的功能。但我們也可以發(fā)現(xiàn)輸出SO出現(xiàn)了靜態(tài)功能冒險(xiǎn),要消除該冒險(xiǎn)可以加入相應(yīng)的選通脈沖。

      (2)全加器

      全加器原理圖

      仿真波形

      仿真波形圖分析 :根據(jù)仿真波形對(duì)比半加器真值表,可以確定電路實(shí)現(xiàn)了全加器的功能

      (2)

      74138 3線-8線譯碼器 原理圖

      仿真波形圖

      仿真波形圖分析;當(dāng)且僅當(dāng)ABC輸入為000、010、100、111時(shí),F(xiàn)=1,可知電路實(shí)現(xiàn)了函數(shù)。

      實(shí)驗(yàn)二 用VHDL設(shè)計(jì)與實(shí)現(xiàn)組合邏輯電路

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

      (1)熟悉用VHDL語(yǔ)言設(shè)計(jì)時(shí)序邏輯電路的方法;(2)熟悉用Quartus II文本輸入法進(jìn)行電路設(shè)計(jì);(3)熟悉不同的編碼及其之間的轉(zhuǎn)換。

      二、實(shí)驗(yàn)所用器材:

      (1)計(jì)算機(jī);

      (2)直流穩(wěn)壓電源;

      (3)數(shù)字系統(tǒng)與邏輯設(shè)計(jì)實(shí)驗(yàn)開(kāi)發(fā)板。

      三、實(shí)驗(yàn)任務(wù)要求

      (1)用 VHDL語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)一個(gè)共陰極7段數(shù)碼管譯碼器;(2)用VHDL語(yǔ)言設(shè)計(jì)一個(gè)8421碼轉(zhuǎn)余三碼的代碼轉(zhuǎn)換器;(3)用VHDL語(yǔ)言設(shè)計(jì)設(shè)計(jì)一個(gè)四位2進(jìn)制奇校驗(yàn)器。

      四、實(shí)驗(yàn)代碼及仿真波形圖

      數(shù)碼管譯碼器 LIBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;

      USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shumaguanyimaqi IS

      PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

      B:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

      C:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END shumaguanyimaqi;

      ARCHITECTURE encoder_arch OF shumaguanyimaqi IS BEGIN

      PROCESS(A)BEGIN

      C<=“011111”;CASE A IS

      WHEN“0000”=> B<=“1111110”;--0 WHEN“0001”=> B<=“0110000”;--1 WHEN“0010”=> B<=“1101101”;--2 WHEN“0011”=> B<=“1111001”;--3 WHEN“0100”=> B<=“0110011”;--4 WHEN“0101”=> B<=“1011011”;--5 WHEN“0110”=> B<=“1011111”;--6 WHEN“0111”=> B<=“1110000”;--7 WHEN“1000”=> B<=“1111111”;--8 WHEN“1001”=> B<=“1111011”;--9 WHEN OTHERS=> B<=“ZZZZZZZ”;END CASE;END PROCESS;END encoder_arch;仿真波形圖

      仿真波形分析:A是輸入,A0-A3是由低位到高位變化,B是數(shù)碼管的各個(gè)部分,隨著A輸入的變化,B數(shù)碼管對(duì)應(yīng)譯碼出相應(yīng)的數(shù)字顯示出來(lái)。

      8421碼轉(zhuǎn)余三碼 LIBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;

      USE IEEE.STD_LOGIC_UNSIGNED.ALL;

      ENTITY jxhyusanma IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

      B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END jxhyusanma;

      ARCHITECTURE trans_ex3 OF jxhyusanma IS BEGIN

      PROCESS(A)BEGIN CASE A IS

      WHEN“0000”=> B<=“0011”;WHEN“0001”=> B<=“0100”;WHEN“0010”=> B<=“0101”;WHEN“0011”=> B<=“0110”;WHEN“0100”=> B<=“0111”;WHEN“0101”=> B<=“1000”;WHEN“0110”=> B<=“1001”;WHEN“0111”=> B<=“1010”;WHEN“1000”=> B<=“1011”;WHEN“1001”=> B<=“1100”;WHEN OTHERS=> B<=“ZZZZ”;END CASE;END PROCESS;END trans_ex3;仿真波形圖

      仿真波形分析:8421碼轉(zhuǎn)換余三碼,由0111轉(zhuǎn)換成為了1010可以看出功能已經(jīng)實(shí)現(xiàn),仿真驗(yàn)證了代碼功能正確。奇校驗(yàn)

      LIBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;ENTITY jxhjijiaoyan IS PORT(A:STD_LOGIC;

      B:STD_LOGIC;

      C:STD_LOGIC;

      D:STD_LOGIC;

      F:OUT STD_LOGIC);END jxhjijiaoyan;

      ARCHITECTURE one OF jxhjijiaoyan IS

      SIGNAL n1,n2 : STD_LOGIC;BEGIN

      n1<=A XOR B;

      n2<=n1 XOR C;

      F<=n2 XOR D;END one;仿真波形圖

      仿真波形分析:當(dāng)ABCD為1111時(shí),輸出F為0,ABCD為1110時(shí),輸出F為1,可見(jiàn)奇校驗(yàn)功能得以實(shí)現(xiàn)。

      實(shí)驗(yàn)三 用VHDL設(shè)計(jì)與實(shí)現(xiàn)時(shí)序邏輯電路

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

      (1)熟悉用VHDL語(yǔ)言設(shè)計(jì)時(shí)序邏輯電路的方法;(2)熟悉用Quartus II文本輸入法進(jìn)行電路設(shè)計(jì);(3)熟悉不同的編碼及其之間的轉(zhuǎn)換。

      二、實(shí)驗(yàn)所用器材:

      (1)計(jì)算機(jī);

      (2)直流穩(wěn)壓電源;

      (3)數(shù)字系統(tǒng)與邏輯設(shè)計(jì)實(shí)驗(yàn)開(kāi)發(fā)板。

      三、實(shí)驗(yàn)任務(wù)要求

      (1)用 VHDL語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)一個(gè)8421十進(jìn)制計(jì)數(shù)器;(2)用VHDL語(yǔ)言設(shè)計(jì)一個(gè)分頻器;(3)將(1)、(2)和數(shù)碼管譯碼器3個(gè)電路進(jìn)行連接,并下載到實(shí)驗(yàn)板顯示計(jì)數(shù)結(jié)果。

      四、實(shí)驗(yàn)代碼及仿真波形圖

      8421十進(jìn)制計(jì)數(shù)器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jxhshijinzhijishuqi IS PORT(clk,reset:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END jxhshijinzhijishuqi;ARCHITECTURE a OF jxhshijinzhijishuqi IS SIGNAL q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(clk,reset)BEGIN IF reset='0' THEN q_temp <=“0000”;ELSIF clk'EVENT AND clk='1' THEN IF q_temp=“1001” THEN q_temp <=“0000”;ELSE q_temp <=q_temp+1;END IF;END IF;END PROCESS;q<= q_temp;END a;仿真波形圖

      仿真波形圖分析:8421十進(jìn)制計(jì)數(shù)器隨著時(shí)鐘的信號(hào)進(jìn)行計(jì)數(shù),restart是復(fù)位,當(dāng)復(fù)位為零的時(shí)候計(jì)數(shù)器重新計(jì)數(shù)。根據(jù)仿真結(jié)果來(lái)看,8421十進(jìn)制計(jì)數(shù)器功能得以實(shí)現(xiàn)。

      分頻器

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jxhfenpinqi IS PORT(clk:IN STD_LOGIC;clear:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END jxhfenpinqi;ARCHITECTURE a OF jxhfenpinqi IS SIGNAL temp:INTEGER RANGE 0 TO 11;BEGIN p1:PROCESS(clear,clk)BEGIN IF clear='0'THEN temp<=0;ELSIF clk'EVENT AND clk='1' THEN IF temp=11 THEN temp<=0;ELSE temp<=temp+1;END IF;END IF;END PROCESS p1;p2:PROCESS(temp)BEGIN IF temp<6 THEN clk_out<='0';ELSE clk_out<='1';END IF;END PROCESS p2;END a;仿真波形

      仿真波形分析:分頻器將頻率分開(kāi),置零端正常工作,根據(jù)仿真波形可以看出來(lái),分頻器的功能得以正常實(shí)現(xiàn)。

      組合電路

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jxhfenpinqi IS PORT(clk:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END jxhfenpinqi;ARCHITECTURE behave OF jxhfenpinqi IS SIGNAL temp:INTEGER RANGE 0 TO 24999999;SIGNAL clktmp:STD_LOGIC;BEGIN

      PROCESS(clk)

      BEGIN

      IF clk'event AND clk='1' THEN

      IF temp=24999999 THEN

      temp<=0;clktmp<=NOT clktmp;

      ELSE

      temp<=temp+1;

      END IF;

      END IF;

      END PROCESS;

      clk_out<=clktmp;END behave;

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;

      ENTITY jxhshijinzhi IS

      PORT(CLK,CLEAR:IN STD_LOGIC;

      Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

      END jxhshijinzhi;

      ARCHITECTURE A OF jxhshijinzhi IS SIGNAL Q_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK,clear)BEGIN IF CLEAR='1'THEN

      Q_TEMP<=“0000”;elsIF(CLK'EVENT AND CLK='1')THEN

      IF Q_TEMP=“1001”THEN

      Q_TEMP<=“0000”;

      ELSE

      Q_TEMP<=Q_TEMP+1;

      END IF;END IF;END PROCESS;Q<=Q_TEMP;END A;

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jxhshumaguan IS PORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

      b:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

      c:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));

      END jxhshumaguan;ARCHITECTURE seg7_arch OF jxhshumaguan IS BEGIN PROCESS(a)BEGIN c<=“011111”;CASE a IS WHEN“0000”=>b<=“01111110”;--0 WHEN“0001”=>b<=“00110000”;--1 WHEN“0010”=>b<=“01101101”;--2 WHEN“0011”=>b<=“01111001”;--3 WHEN“0100”=>b<=“00110011”;--4 WHEN“0101”=>b<=“01011011”;--5 WHEN“0110”=>b<=“01011111”;--6 WHEN“0111”=>b<=“01110000”;--7 WHEN“1000”=>b<=“01111111”;--8 WHEN“1001”=>b<=“01111011”;--9 WHEN OTHERS=>b<=“00000000”;END CASE;END PROCESS;END seg7_arch;

      LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jxhzuhedianlu IS PORT(ain:IN STD_LOGIC;bin:IN STD_LOGIC;cout:OUT STD_LOGIC_VECTOR(7 downto 0);cat:OUT STD_LOGIC_VECTOR(5 downto 0));end jxhzuhedianlu;ARCHITECTURE behave OF jxhzuhedianlu IS COMPONENT jxhfenpinqi PORT(clk:IN STD_LOGIC;clk_out:OUT STD_LOGIC);END COMPONENT;COMPONENT jxhshijinzhi PORT(clk,clear:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 downto 0));END COMPONENT;COMPONENT jxhshumaguan PORT(a:IN STD_LOGIC_VECTOR(3 downto 0);b:OUT STD_LOGIC_VECTOR(7 downto 0);c:OUT STD_LOGIC_VECTOR(5 downto 0));end COMPONENT;SIGNAL d:STD_LOGIC;SIGNAL f:STD_LOGIC_VECTOR(3 downto 0);BEGIN u1:jxhfenpinqi PORT MAP(clk=>ain,clk_out=>d);u2:jxhshijinzhi PORT MAP(clk=>d,clear=>bin,q=>f);u3:jxhshumaguan PORT MAP(a=>f,b=>cout,c=>cat);END behave;端口的綁定:

      端口分析:Ain是時(shí)鐘信號(hào)的輸入綁定了18串口,bin是置零信號(hào)綁定了20 串口,cat5-0是每個(gè)數(shù)碼管各自的綁定,根據(jù)板子上的串口數(shù)字綁定,cout7-0是數(shù)碼管的每一個(gè)亮的部分,根據(jù)板子上的提示串口進(jìn)行綁定,根據(jù)編程可以實(shí)現(xiàn)讓數(shù)碼管顯示不同的數(shù)字。電路圖:

      代碼中是使用PORT MAP 進(jìn)行連接的

      u1:jxhfenpinqi PORT MAP(clk=>ain,clk_out=>d);u2:jxhshijinzhi PORT MAP(clk=>d,clear=>bin,q=>f);u3:jxhshumaguan PORT MAP(a=>f,b=>cout,c=>cat);在此圖中可以看出ain接分頻器的clk,分頻器的clk_out接十進(jìn)制譯碼器的CLK,bin接十進(jìn)制譯碼器的CLEAR,十進(jìn)制譯碼器的Q接數(shù)碼管的a,數(shù)碼管的b,c分別接count和cat。

      實(shí)驗(yàn)四 數(shù)碼管掃描顯示控制器設(shè)計(jì)與實(shí)現(xiàn)

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

      1.掌握VHDL語(yǔ)言的語(yǔ)法規(guī)范,掌握時(shí)序電路描述方法。

      2.掌握多個(gè)數(shù)碼管動(dòng)態(tài)掃描現(xiàn)實(shí)的原理及設(shè)計(jì)方法。

      二、實(shí)驗(yàn)所用器材:

      1.計(jì)算機(jī):裝有Quartus軟件,為VHDL語(yǔ)言提供操作場(chǎng)所。

      2.直流穩(wěn)壓電源:通過(guò)USB接口實(shí)現(xiàn),為實(shí)驗(yàn)開(kāi)發(fā)板提供穩(wěn)定電源。3.數(shù)字系統(tǒng)與邏輯設(shè)計(jì)實(shí)驗(yàn)開(kāi)發(fā)板:使試驗(yàn)結(jié)果下載到開(kāi)發(fā)板上,實(shí)現(xiàn)整個(gè)實(shí)驗(yàn)的最終結(jié)果。

      三、實(shí)驗(yàn)任務(wù)要求

      1.用VHDL語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)六個(gè)數(shù)碼管串行掃描電路,要求同時(shí)顯示0、1、2、3、4、5這6個(gè)不同的數(shù)字圖形到6個(gè)數(shù)碼管上。

      2.用VHDL語(yǔ)言設(shè)計(jì)并實(shí)現(xiàn)六個(gè)數(shù)碼管滾動(dòng)顯示電路。

      (1)循環(huán)左滾動(dòng),始終點(diǎn)亮6個(gè)數(shù)碼管,左出右進(jìn)。狀態(tài)為:012345→123450→234501→345012→450123→501234→012345(2)向左滾動(dòng),用全滅的數(shù)碼管填充右邊,直至全部變滅,然后再一次從右邊一個(gè)一個(gè)的點(diǎn)亮。狀態(tài)為012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中“X”表示數(shù)碼管不顯示。

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

      多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示,是將所有數(shù)碼管的相同段并聯(lián)在一起,通過(guò)選通信號(hào)分時(shí)控制各個(gè)數(shù)碼管的公共端,循環(huán)依次點(diǎn)亮多個(gè)數(shù)碼管,利用人眼的視覺(jué)暫留現(xiàn)象,只要掃描的頻率大于50HZ,將看不到閃爍現(xiàn)象。如下圖10-1,是多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示的電路連接圖。

      當(dāng)閃爍顯示的發(fā)光二極管閃爍頻率較高時(shí)我們將觀察到持續(xù)點(diǎn)亮的現(xiàn)象。同理,當(dāng)多個(gè)數(shù)碼管依次顯示,當(dāng)切換速度夠快時(shí),我們將觀察到所有數(shù)碼管都是同事在顯示。一個(gè)數(shù)碼管要穩(wěn)定顯示要求顯示頻率>50hz,那么6個(gè)數(shù)碼管則需要50*6=300hz以上才能看到持續(xù)穩(wěn)定點(diǎn)亮的現(xiàn)象。

      cat1~cat6是數(shù)碼管選通控制信號(hào),分別對(duì)應(yīng)于6個(gè)共陰極數(shù)碼管的公共端,當(dāng)catn=’0’時(shí),其對(duì)應(yīng)的數(shù)碼管被點(diǎn)亮。因此,通過(guò)控制cat1~cat6,就可以控制6個(gè)數(shù)碼管循環(huán)依次點(diǎn)亮。

      五、代碼及仿真波形圖

      1.實(shí)現(xiàn)六個(gè)數(shù)碼管串行掃描電路的思路及代碼: 串行數(shù)碼管 library ieee;

      use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jxhchuanxing is port(clear,clk_in:in std_logic;

      num:out std_logic_vector(6 downto 0);

      cat:out std_logic_vector(5 downto 0));end jxhchuanxing;

      architecture one of jxhchuanxing is

      signal status:integer range 0 to 6;begin

      process(clk_in)begin

      if clear='0' then status<=0;

      elsif(clk_in'event and clk_in='1')then

      if status=6 then status<=1;

      else status<=status+1;

      end if;

      end if;

      end process;

      process(status)

      begin case status is

      when 1 => num<=“1111110”;cat<=“011111”;

      when 2 => num<=“0110000”;cat<=“101111”;

      when 3 => num<=“1101101”;cat<=“110111”;

      when 4 => num<=“1111001”;cat<=“111011”;

      when 5 => num<=“0110011”;cat<=“111101”;

      when 6 => num<=“1011011”;cat<=“111110”;

      when others =>num<=“0000000”;cat<=“000000”;

      end case;

      end process;

      end one;仿真波形:

      仿真波形分析:由仿真波形可以看出數(shù)碼管的串行顯示得以實(shí)現(xiàn),置零正常。隨著時(shí)鐘輸入的變化,數(shù)碼管進(jìn)行串行顯示。電路圖:

      端口連接:

      Clk_in接18口,是時(shí)鐘輸入,cat5-0是每個(gè)數(shù)碼管各自的綁定,根據(jù)板子上的串口數(shù)字綁定,num7-0是數(shù)碼管的每一個(gè)亮的部分,根據(jù)板子上的提示串口進(jìn)行綁定,根據(jù)編程可以實(shí)現(xiàn)讓數(shù)碼管顯示不同的數(shù)字。

      2.六個(gè)數(shù)碼管滾動(dòng)電路的思路及代碼: 數(shù)碼管滾動(dòng)顯示 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity jxhgundong is port(clk:in STD_LOGIC;en: out STD_LOGIC_VECTOR(5 downto 0);z: out STD_LOGIC_VECTOR(6 downto 0));end jxhgundong;architecture quanmiegundong of jxhgundong is signal a:INTEGER RANGE 0 to 6;signal b:INTEGER RANGE 0 to 20;signal c:INTEGER RANGE 0 to 3000;signal d:INTEGER RANGE 0 to 3000;begin

      p1:process(a)begin case a is when 0=>en<=“011111”;b<=c mod 12;when 1=>en<=“101111”;b<=(1+c)mod 12;when 2=>en<=“110111”;b<=(2+c)mod 12;when 3=>en<=“111011”;b<=(3+c)mod 11;when 4=>en<=“111101”;b<=(4+c)mod 12;when 5=>en<=“111110”;b<=(5+c)mod 12;when others=>null;end case;end process p1;

      p2:process(clk)begin if clk'event and clk='1'then if a=5 then

      a<=0;d<=1+d;else

      a<=a+1;end if;if d=2999 then

      d<=0;c<=c+1;end if;end if;end process p2;

      p3:process(b)begin case b is when 0=> z<=“1111110”;--0 when 1=> z<=“0110000”;--1 when 2=> z<=“1101101”;--2 when 3=> z<=“1111001”;--3 when 4=> z<=“0110011”;--4 when 5=> z<=“1011011”;--5 when others=>z<=“0000000”;

      end case;end process p3;

      end;仿真波形:

      仿真波形分析:有圖可以看出,數(shù)碼管滾動(dòng)顯示功能得以正常實(shí)現(xiàn)。隨著時(shí)鐘的輸入,數(shù)碼管的輸出進(jìn)行著滾動(dòng)式變化。電路圖:

      端口連接圖:

      Clk接18口,是時(shí)鐘輸入,en5-0是每個(gè)數(shù)碼管各自的綁定,根據(jù)板子上的串口數(shù)字綁定,z6-0是數(shù)碼管的每一個(gè)亮的部分,根據(jù)板子上的提示串口進(jìn)行綁定,根據(jù)編程可以實(shí)現(xiàn)讓數(shù)碼管顯示不同的數(shù)字。

      五、故障及問(wèn)題分析

      實(shí)驗(yàn)一

      在本次實(shí)驗(yàn)中,由于實(shí)驗(yàn)較為簡(jiǎn)單,只要認(rèn)真聽(tīng)老師講課,細(xì)心實(shí)驗(yàn),基本沒(méi)有大的故障出現(xiàn)。出現(xiàn)的問(wèn)題主要為 當(dāng)輸入頻率較高時(shí),輸出結(jié)果易受器件延遲時(shí)間影響。此外,對(duì)于多輸入的電路,靜態(tài)功能冒險(xiǎn)還是會(huì)存在的,在某些情況下應(yīng)該加入選通脈沖來(lái)消除靜態(tài)功能冒險(xiǎn)。實(shí)驗(yàn)二

      1.注意VHDL文件名與實(shí)體名一致,會(huì)導(dǎo)致編譯的錯(cuò)誤。我在實(shí)驗(yàn)的過(guò)程中發(fā)生過(guò)這種錯(cuò)誤。2.在仿真波形的時(shí)候,沒(méi)有合適的取好輸入信號(hào)的周期,導(dǎo)致最終的波形超過(guò)了一個(gè)半有效周期,經(jīng)老師指出進(jìn)行了修改。

      3.下載到板子上程序之前需要綁定串口,綁定完串口之后需要二次編譯,否則功能不能實(shí)現(xiàn)。實(shí)驗(yàn)三

      1.每次實(shí)驗(yàn)中都應(yīng)該注意到VHDL的文件名應(yīng)與實(shí)體名一致,如果不一致編譯會(huì)報(bào)錯(cuò)。我在實(shí)驗(yàn)過(guò)程中雖然原理圖設(shè)計(jì)名與工程名相同,但在其后某程序名上犯了錯(cuò)誤,導(dǎo)致出錯(cuò)。2.在仿真波形的觀察中,一定要調(diào)節(jié)好zoom一選項(xiàng),縮放出便于觀察的波形。3.在命名過(guò)程一定要注意規(guī)范,不要出現(xiàn)非法字符。4.在做10進(jìn)制計(jì)數(shù)器時(shí),由于板的固有頻率為晶振的頻率50兆赫茲,所以當(dāng)以微秒級(jí)的時(shí)鐘去自動(dòng)跳變太快根本無(wú)法看清,應(yīng)該加一段程序令時(shí)鐘在微秒級(jí)跳變25兆次時(shí)外部時(shí)鐘輸出,從而令外部時(shí)鐘變?yōu)槊爰?jí)的,才能看見(jiàn)自動(dòng)跳變現(xiàn)象。實(shí)驗(yàn)四

      1.注意VHDL文件名和各個(gè)名字一致否則會(huì)出現(xiàn)編譯錯(cuò)誤。

      2.板子的固有頻率是50m,所以需要進(jìn)行分頻,數(shù)碼管的實(shí)驗(yàn)的時(shí)候頻率的高低會(huì)導(dǎo)致數(shù)碼管顯示結(jié)果的不同,要根據(jù)實(shí)際情況適當(dāng)?shù)恼{(diào)高調(diào)低。我在做實(shí)驗(yàn)的時(shí)候頻率選擇不合適,數(shù)碼管顯示不好。

      3.時(shí)鐘信號(hào)是高頻有效還是低頻有效,需要注意,我實(shí)驗(yàn)的時(shí)候沒(méi)有太搞清楚。

      4.數(shù)碼管的滾動(dòng)顯示的時(shí)候總是出錯(cuò),經(jīng)過(guò)檢查,是下載之前綁定串口有誤,還有分頻并不合適。最終實(shí)驗(yàn)時(shí)候時(shí)間有限,驗(yàn)收的是數(shù)碼管的串行。

      六、總結(jié)和結(jié)論

      總結(jié):

      實(shí)驗(yàn)一:實(shí)驗(yàn)一是進(jìn)行了簡(jiǎn)單的圖形連接來(lái)進(jìn)行電路的實(shí)現(xiàn),總體來(lái)說(shuō)較為簡(jiǎn)單,但是要注意元器件的調(diào)用,還有連接的規(guī)范,使得連接出來(lái)的電路清晰明了,簡(jiǎn)單美觀。仿真的時(shí)候注意總時(shí)間的選取和輸入變量的周期。

      實(shí)驗(yàn)二:實(shí)驗(yàn)二是第一次進(jìn)行VHDL編程,需要注意的是文件名和各個(gè)實(shí)體名一致否則會(huì)導(dǎo)致編譯的錯(cuò)誤。然后在仿真的時(shí)候注意總時(shí)間的選取和輸入變量的周期,還有就是要會(huì)看出來(lái)自己的仿真波形是否是正確的。在下載到板子上程序之前注意串口的綁定和綁定之后逇二次編譯,這次實(shí)驗(yàn)讓我們了解了VHDL語(yǔ)言以及其數(shù)字電路的實(shí)現(xiàn)。

      實(shí)驗(yàn)三:實(shí)驗(yàn)三是十進(jìn)制計(jì)數(shù)器和分頻器,這兩個(gè)實(shí)驗(yàn)較為簡(jiǎn)單,由于有之前的基礎(chǔ)在,所以比較容易實(shí)現(xiàn),就是注意文件名要一致,仿真的時(shí)候注意總時(shí)間的選擇以及各個(gè)變量的周期。而最后的組合電路比較難,注意上層的設(shè)置。將三個(gè)分別得電路組合在一起注意連接函數(shù)PORT MAP,還有各個(gè)端口的連接,最后下載到板子上注意串口的綁定,還有綁定之后的二次編譯。最后實(shí)現(xiàn)功能的時(shí)候要知道時(shí)鐘信號(hào)的有效頻率還有就是復(fù)位。

      實(shí)驗(yàn)四:經(jīng)過(guò)之前的基礎(chǔ),實(shí)驗(yàn)四比較難,代碼需要更加用心的編寫(xiě)。還有頻率的設(shè)定需要經(jīng)過(guò)實(shí)驗(yàn)時(shí)候的情況進(jìn)行調(diào)整。這次實(shí)驗(yàn)我做的并不是那么的順利,經(jīng)過(guò)反省,我了解數(shù)碼管有關(guān)的知識(shí),還有串行和滾動(dòng)的代碼,經(jīng)過(guò)努力,可以實(shí)現(xiàn)實(shí)驗(yàn)的內(nèi)容。在實(shí)驗(yàn)的時(shí)候注意文件名的一致,仿真時(shí)候的總時(shí)間和各個(gè)變量的周期,最后下載的時(shí)候注意串口的綁定還有綁定之后的二次編譯。這次最終的實(shí)驗(yàn)收獲良多,還要虛心進(jìn)行學(xué)習(xí)。老師的指責(zé)也是正確的,要對(duì)實(shí)驗(yàn)嚴(yán)謹(jǐn)認(rèn)真。

      結(jié)論: 數(shù)電實(shí)驗(yàn)是有關(guān)于模塊的鏈接,VHDL的編程能力的鍛煉,經(jīng)過(guò)這次試驗(yàn),我了解了Quartus II的使用,圖形工具的使用以及VHDL的編程能力得到了很好的歷練。

      在這個(gè)實(shí)驗(yàn)課程中,經(jīng)過(guò)老師的悉心教導(dǎo),我們學(xué)習(xí)到了軟件的使用,經(jīng)過(guò)四次的實(shí)驗(yàn),我們可以較為熟練的運(yùn)用Quartus II的圖形和VHDL語(yǔ)言編程來(lái)設(shè)計(jì)電路,并可以通過(guò)仿真來(lái)驗(yàn)證我們的電路是否正確。我們通過(guò)綁定串口之后把程序下載到板子上可以實(shí)現(xiàn)我們的電路的功能,在下載之前注意要進(jìn)行二次編譯。而且在實(shí)驗(yàn)三里的第三個(gè)實(shí)驗(yàn),我們?cè)隍?yàn)收的時(shí)候,要熟練地可以撥動(dòng)開(kāi)關(guān)實(shí)現(xiàn)零到九的變換。

      老師雖然對(duì)我們很嚴(yán)厲,但是我們這樣才能學(xué)習(xí)到更多的東西,有了更多的進(jìn)步空間。

      第五篇:北郵數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告[最終版]

      數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告

      (四)姓名:學(xué)號(hào):班級(jí):

      1.簡(jiǎn)單查詢:

      SQL語(yǔ)句:

      select credit from course where course_name='SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)';(1)查詢“數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)”課程的學(xué)分;

      或者模糊查詢:

      select credit from course where course_name like'%數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)';執(zhí)行結(jié)果:

      (2)查詢選修了課程編號(hào)為“dep04_s004”的學(xué)生的學(xué)號(hào)和成績(jī),并將成績(jī)按降序輸出;

      SQL語(yǔ)句:

      select student_id,grade from student_course where course_id='dep04_s003' orderby grade desc;執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select course_id,grade from student_course where student_id='g9940205';(3)查詢學(xué)號(hào)為“g9940205”的學(xué)生選修的課程編號(hào)和成績(jī);

      執(zhí)行結(jié)果:

      (4)查詢選修了課程編號(hào)為“dep04_s001”且成績(jī)高于85分的學(xué)生的學(xué)號(hào)和成績(jī)。

      SQL語(yǔ)句:

      select student_id,grade from student_course where course_id='dep04_s001'and grade>'85';執(zhí)行結(jié)果:

      2.在多表連接的查詢實(shí)驗(yàn)中,用Transact SQL語(yǔ)句完成以下查詢操作:(1)查詢選修了課程編號(hào)為“dep04_s002”且成績(jī)高于85分的學(xué)生的學(xué)號(hào)、姓名和成績(jī);

      SQL語(yǔ)句:

      select student.student_id,student_name,grade from student,student_course where student.student_id=student_course.student_id and student_course.course_id='dep04_s002' and student_course.grade>'85';執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select student.student_id,student_name,course_name,grade from student,course,student_course where student.student_id=student_course.student_id and student_course.course_id=course.course_id;(2)查詢所有學(xué)生的學(xué)號(hào)、姓名、選修的課程名稱和成績(jī);

      執(zhí)行結(jié)果:

      (3)查詢林紅同學(xué)選修的課程名稱、學(xué)分和成績(jī)。(考試成績(jī)>=60 否則無(wú)學(xué)分。)

      SQL語(yǔ)句:

      select course_name,student_course.credit,grade from student,student_course,course where student_name='林紅'

      and student.student_id=student_course.student_id and student_course.course_id=course.course_id;

      有學(xué)分,3.在復(fù)雜查詢實(shí)驗(yàn)中,用Transact SQL語(yǔ)句完成以下查詢操作:

      SQL語(yǔ)句:

      select student.student_id,student_name from student,student_course where student.student_id=student_course.student_id groupby student.student_id,student_name havingcount(student_course.course_id)>=3;(1)查詢至少選修了三門課程的學(xué)生的學(xué)號(hào)和姓名;

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      selectavg(grade)from student_course where course_id='dep04_b001';(2)查詢選修課程號(hào)為“dep04_b001”的學(xué)生的平均成績(jī); 執(zhí)行結(jié)果:

      (3)查詢所有學(xué)生的學(xué)號(hào)和他選修課程的最高成績(jī),要求他的選修課程中沒(méi)有成績(jī)?yōu)榭盏摹?/p>

      SQL語(yǔ)句:

      select student_id,max(grade)from student_course whereexists(select grade from student_course)groupby student_id;執(zhí)行結(jié)果:

      (4)查詢嚴(yán)為老師2001/2002學(xué)年教的軟件開(kāi)發(fā)技術(shù)課程的最高成績(jī)及此學(xué)生的學(xué)號(hào)、姓名、班級(jí)。

      SQL語(yǔ)句:

      select student.student_id,student_name,student.class_id,grade from teacher_course_class,teacher,course,student,student_course where teacher_course_class.teacher_id = teacher.teacher_id and teacher.teacher_name ='嚴(yán)為'and teacher_course_class.course_id = course.course_id and course.course_name ='軟件開(kāi)發(fā)技術(shù)'and

      teacher_course_class.course_id = student_course.course_id and student_course.student_id = student.student_id and teacher_course_class.school_year ='2001/2002'and student_course.grade>=all(select grade from student_course,course where student_course.course_id = course.course_id and

      course.course_name ='軟件開(kāi)發(fā)技術(shù)');執(zhí)行結(jié)果:

      (5)查詢數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)課程用過(guò)的教材名稱,作者和出版社。

      SQL語(yǔ)句:

      select book_name,author,publish_company from book,course where course.book_id=book.book_id and course_name='SQL SERVER數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)';執(zhí)行結(jié)果:

      (6)查詢計(jì)算機(jī)科學(xué)系講授過(guò)數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)的老師姓名和職稱。

      SQL語(yǔ)句:

      select teacher_name,profession from teacher,course,teacher_course_class,department where teacher.teacher_id = teacher_course_class.teacher_id and course.course_id = teacher_course_class.course_id and department.department_id = teacher.department_id and department.department_name ='計(jì)算機(jī)科學(xué)'and

      course.course_name ='SQL Server數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)';執(zhí)行結(jié)果:

      4.在嵌套查詢實(shí)驗(yàn)中,用Transact SQL語(yǔ)句完成以下查詢操作,要求寫(xiě)嵌套查詢語(yǔ)句:

      SQL語(yǔ)句:

      select student_id,student_name from student where student_id in(select student_id from student_course where course_id in(select course_id from course where course_name ='軟件開(kāi)發(fā)技術(shù)'));(1)查詢選修了軟件開(kāi)發(fā)技術(shù)的學(xué)生的學(xué)號(hào)和姓名;

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select student_id,student_name from student wherenotexists(select student_id from student_course(2)查詢沒(méi)有選修軟件開(kāi)發(fā)技術(shù)的學(xué)生的學(xué)號(hào)和姓名; where course_id in(select course_id from course where course_name ='軟件開(kāi)發(fā)技術(shù)'));執(zhí)行結(jié)果:

      (3)查詢至少選修了學(xué)號(hào)為“g9940201”的學(xué)生所選修的所有課程的學(xué)生的學(xué)號(hào)和姓名。

      SQL語(yǔ)句:

      select student_id,student_name from student wherenotexists(select*

      from student_course student_course1 where student_course1.student_id ='g9940201' andnotexists(select*

      from student_course student_course2 where student.student_id=student_course2.student_id and student_course2.course_id = student_course1.course_id));執(zhí)行結(jié)果:

      5.建立如下視圖:

      學(xué)生選修課程信息視圖,包括以下內(nèi)容:

      對(duì)(1)(2)內(nèi)容用企業(yè)管理器和SQL語(yǔ)句方式分別完成。1)學(xué)生學(xué)號(hào)、姓名、所在系、授課老師姓名、課程名稱、課程教材名稱、出版社、學(xué)分、選課成績(jī)

      SQL語(yǔ)句:

      Createview

      view1(student_id,student_name,department_name,teacher_name,course_name, book_name,publish_name,credit,grade)asselectdistinct

      student.student_id,student.student_name,department_name,teacher_name,course_name,book_name,publish_company,student_course.credit,student_course.grade from

      student,course,department,student_course,teacher,teacher_course_class,book,class where

      student.student_id=student_course.student_id and student.class_id=class.class_id and class.department_id=department.department_id and student_course.course_id=course.course_id and course.book_id=book.book_id and teacher.teacher_id=teacher_course_class.teacher_id and teacher_course_class.course_id=course.course_id

      企業(yè)管理器:

      Step1:右鍵視圖,選擇新建視圖。

      Step2:添加涉及到的表。

      Step3:選擇需要顯示的列。

      Step4:右鍵視圖view1,選擇查看前1000行。

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      alterview

      view1(student_id,student_name,department_name,teacher_name,course_name,book_name,publish_name,credit,grade,class_id)ASSELECT DISTINCT

      student.student_id,student_name,department_name,teacher_name,course_name,book_name,publish_company,student_course.credit,student_course.grade,student.class_id FROM

      student,student_course,course,teacher,teacher_course_class,book,department,class WHERE student.student_id=student_course.student_id and student.class_id=class.class_id and class.department_id=department.department_id and student_course.course_id=course.course_id and course.book_id=book.book_id and teacher.teacher_id=teacher_course_class.teacher_id and teacher_course_class.course_id=course.course_id 2)修改以上視圖,增加學(xué)生所在班級(jí)信息。

      企業(yè)管理器:

      勾選class表中的“所有列”。

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select student_id,grade from view1 where course_name ='計(jì)算機(jī)基礎(chǔ)';3)對(duì)以上視圖進(jìn)行相關(guān)的查詢操作:(1)查詢選修了計(jì)算機(jī)基礎(chǔ)的學(xué)生的學(xué)號(hào)和成績(jī);

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select student_id,student_name,course_name,grade from view1(2)查詢所有學(xué)生的學(xué)號(hào)、姓名、選修的課程名稱和成績(jī);

      執(zhí)行結(jié)果:

      SQL語(yǔ)句:

      select student_id,student_name,course_name from view1 where teacher_name ='章紅';(3)查詢選修了章紅老師課程的學(xué)生的學(xué)號(hào)和姓名、課程名稱。

      執(zhí)行結(jié)果:

      下載北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一word格式文檔
      下載北郵-信息與網(wǎng)絡(luò)實(shí)驗(yàn)報(bào)告一.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        北郵日歷java實(shí)驗(yàn)報(bào)告

        Java日歷實(shí)驗(yàn)報(bào)告 信息工程27班項(xiàng)明鈞 一、實(shí)驗(yàn)要求 寫(xiě)一個(gè)建議日歷圖形用戶界面二、設(shè)計(jì)思路 此次作業(yè)主要用到了窗口布局設(shè)計(jì)及各個(gè)組件的功能顯示,事件處理機(jī)制。首先需......

        北郵數(shù)據(jù)庫(kù)第一次實(shí)驗(yàn)報(bào)告

        《數(shù)據(jù)庫(kù)原理》實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱班級(jí)組號(hào)組員姓名 數(shù)據(jù)庫(kù)實(shí)驗(yàn)平臺(tái)的安裝、數(shù)據(jù)庫(kù)創(chuàng)建與維護(hù)實(shí)驗(yàn) 計(jì)算機(jī)科學(xué)與技術(shù)8班2011211308 梁展偉、李安一、實(shí)驗(yàn)?zāi)康?1.通過(guò)對(duì)Micr......

        北郵嵌入式實(shí)驗(yàn)報(bào)告[五篇]

        嵌入式系統(tǒng)開(kāi)發(fā)實(shí)驗(yàn)報(bào)告 班級(jí): 姓名: 班內(nèi)序號(hào): 學(xué)號(hào): 日期: 目錄 一、 實(shí)驗(yàn)?zāi)康?.........................................................................................

        北郵現(xiàn)場(chǎng)總線實(shí)驗(yàn)報(bào)告

        現(xiàn)場(chǎng)總線實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱: CAN總線技術(shù)與iCAN模塊實(shí)驗(yàn)學(xué)院: 自動(dòng)化學(xué)院專業(yè): 自動(dòng)化專業(yè)班級(jí): 2010211411 姓名: 韓思宇學(xué)號(hào): 10212006 指導(dǎo)老師: 楊軍一、實(shí)驗(yàn)名稱: 實(shí)驗(yàn)一:CAN總......

        網(wǎng)絡(luò)與信息安全實(shí)驗(yàn)報(bào)告

        計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 網(wǎng)絡(luò)與信息安全課程設(shè)計(jì) 學(xué)號(hào): 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名:任課教師:*** 2017年3月 FTP服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn) *** 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,哈爾濱工程大......

        北郵網(wǎng)絡(luò)教育學(xué)院 第三代移動(dòng)通信階段一答案

        北郵網(wǎng)絡(luò)教育學(xué)院 第三代移動(dòng)通信階段一答案 一、判斷題(共10道小題,共100.0分) ? 無(wú)線局域網(wǎng)是計(jì)算機(jī)網(wǎng)絡(luò)與無(wú)線通信技術(shù)相結(jié)合的產(chǎn)物,是“最后一百米”的固定無(wú)線接入解決方案......

        北郵計(jì)算機(jī)網(wǎng)絡(luò)實(shí)踐第三次實(shí)驗(yàn)報(bào)告

        計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)實(shí)踐 實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱 RIP和OSPF路由協(xié)議的配置及協(xié)議流程 姓 名___(-…-)_____________實(shí) 驗(yàn) 日 期:2014年4月11日 學(xué) 號(hào)_ 242_______實(shí)驗(yàn)報(bào)告日期:2014年4......

        北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 單鏈表

        北京郵電大學(xué) 數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報(bào)告 實(shí)驗(yàn)名稱: 實(shí)驗(yàn)一線性表 學(xué)生姓名:班級(jí):班內(nèi)序號(hào):學(xué)號(hào): 日期: 2014年1月3日 1 實(shí)驗(yàn)?zāi)康?? 熟悉C++語(yǔ)言的基本編程方法,掌握集成編譯環(huán)境的調(diào)試方法......