eda技術(shù)課程設(shè)計報告(五篇)

字號:

    報告是指向上級機關(guān)匯報本單位、本部門、本地區(qū)工作情況、做法、經(jīng)驗以及問題的報告,寫報告的時候需要注意什么呢?有哪些格式需要注意呢?下面我就給大家講一講優(yōu)秀的報告文章怎么寫,我們一起來了解一下吧。
    eda技術(shù)課程設(shè)計報告篇一
    自動打鈴系統(tǒng)設(shè)計說明書
    學(xué) 生 姓 名:周文江
    學(xué)
    號:14112502521
    專 業(yè) 班 級:1102
    報告提交日期:2013.11.26
    湖 南 理 工 學(xué) 院 物 電 學(xué) 院
    目錄
    一、題目及要求簡介……………3 1.設(shè)計題目…………………3 2.總體要求簡介……………3
    二、設(shè)計方案說明……………3
    三、系統(tǒng)采用器件以及模塊說明………3 1.系統(tǒng)框圖…………4 2.選擇的fpga芯片及配置………4 3.系統(tǒng)端口和模塊說明…………5
    四、各部分仿真結(jié)果………5
    五、調(diào)試及總結(jié)………6
    六、參考文獻(xiàn)……7
    七、附錄………7
    一、題目及要求簡介
    1、設(shè)計題目
    設(shè)計一個多功能自動打鈴系統(tǒng)
    2、總體要求簡介
    ① 基本計時和顯示功能(24小時制顯示),包括:
    1.24小時制顯示 2.動態(tài)掃描顯示; 3.顯示格式:88-88-88 ② 能設(shè)置當(dāng)前時間(含時、分)③ 能實現(xiàn)基本打鈴功能,規(guī)定:
    06:00起床鈴,打鈴5s
    二、設(shè)計方案說明
    本次設(shè)計主要采用verilog hdl硬件描述性語言、分模塊法設(shè)計的自動打鈴系統(tǒng)。由于這次用的開發(fā)板提供的是50m晶振。首先要對時鐘進(jìn)行分頻,當(dāng)計時到2fa_f07f時完成1s分頻,通過計時到60s產(chǎn)生分鐘進(jìn)位信號,再通過60分鐘產(chǎn)生時鐘進(jìn)位信號。最后通過6個寄存器對時分秒進(jìn)行鎖存最終輸出到8個數(shù)碼管上完成顯示。當(dāng)顯示時鐘和默認(rèn)鬧鐘時鐘相等時,驅(qū)動打鈴模塊。通過key_mode,key_turn,key_change查看鬧鐘,時鐘顯示,調(diào)整時鐘。
    三、系統(tǒng)采用器件以及模塊說明
    1.系統(tǒng)框圖如下:
    :下如圖框統(tǒng)系
    2.選擇的fpga芯片及配置:本次系統(tǒng)設(shè)計采用的fpga芯片是alter公司生產(chǎn)的cyclone ii ep2c8q208c8。該芯片是208個管腳,138個io,并且具有兩個內(nèi)部pll,而且內(nèi)嵌乘法器,8k的邏輯門,資源相當(dāng)豐富。完成這次自動打鈴系統(tǒng)的設(shè)計總共消耗250個le單元,22個io口,131個寄存器。經(jīng)過綜合后,本系統(tǒng)最高能實現(xiàn)145m的運行速度。通過quartus ii 軟件觀察到內(nèi)部的rtl圖如下
    3.系統(tǒng)端口和模塊說明
    (1)分頻部分
    分頻器的作用是對50mhz的系統(tǒng)時鐘信號進(jìn)行分頻,得到頻率為1hz的信號,即為1s的計時信號。
    (2)按鍵部分
    按鍵key_mode--0為顯示計時,1為鬧鐘顯示,2為調(diào)整時間。按鍵key_turn—0為調(diào)整小時,1為調(diào)整分鐘。按鍵key_change—每按一次加1(3)計時部分
    通過sec_l,sec_h,min_l,min_h,hour_l,hour_h 6個寄存器對時分秒進(jìn)行鎖存然后送入數(shù)碼管顯示
    (4)鬧鐘模塊
    當(dāng)設(shè)定的鬧鐘時間和數(shù)碼管上顯示的時間相等時驅(qū)動鬧鐘,完成打鈴,持續(xù)時間5s。
    (5)數(shù)碼管顯示模塊
    顯示模塊是由8個位選8個段選構(gòu)成的顯示模塊,利用人眼的余暉效果完成動態(tài)掃描,顯示時間。
    四、各部分仿真結(jié)果
    測試文件如下:
    module clock_tb;reg sysclk,rst_b;reg key_mode,key_turn,key_change;wire buzzer;
    wire [7:0] led_sel,led_data;clock i_clock(.sysclk(sysclk),.rst_b(rst_b),.key_mode(key_mode),.key_change(key_change),.key_turn(key_turn),.buzzer(buzzer),.led_sel(led_sel),.led_data(led_data));initial begin sysclk = 1'b1;rst_b = 1'b0;//復(fù)位信號
    #30 rst_b = 1'b1;end always #10 sysclk = ~sysclk;//輸入的系統(tǒng)時鐘,20ns的周期 endmodule
    五、調(diào)試及總結(jié)
    本次課程設(shè)計總共花費了四天左右的時間,設(shè)計了自動打鈴系統(tǒng)。通過這次的設(shè)計更加熟悉了對eda技術(shù)的了解和認(rèn)識,在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設(shè)計方法,使得設(shè)計更加的簡單和明了。在調(diào)試過程中,有些代碼的設(shè)計不規(guī)范性,導(dǎo)致時序相當(dāng)緩慢,甚至編譯綜合都會報錯。在不斷的修改下,發(fā)現(xiàn)時序電路和組合邏輯最好分開寫,這樣便于查錯,和修改代碼。畢竟verilog hdl語言不同于c語言,不能以軟件的思想來設(shè)計,而是要利用電路的思想來編程,這樣可以更好的節(jié)省資源,使得時序也比較的簡單明了。在以后的學(xué)習(xí)及程序設(shè)計當(dāng)中,我們一定要倍加小心,在程序出現(xiàn)不正常運行的情況下要耐心調(diào)試,盡量做到精益求精。
    最后通過這次eda方面的課程設(shè)計,提高了我們對eda領(lǐng)域及通信電路設(shè)計領(lǐng)域的認(rèn)識,有利于培養(yǎng)我們在通信電路eda方面的設(shè)計能力。有利于鍛煉我們獨立分析問題和解決問題的能力。
    六、文獻(xiàn)參考
    [1].王金明、左自強 編,《eda技術(shù)與verilog設(shè)計》科學(xué)出版社
    2008.8 [2].杜慧敏、李宥謀、趙全良 編,《基于verilog的fpga設(shè)計基礎(chǔ)》 西安電子科技大學(xué)出版社 2006.2 [3].韓彬 編,《從零開始走進(jìn)fpga世界》杭州無線電愛好者協(xié)會出版社 2011.8.20
    七、附錄(實物圖及源碼)
    module clock(//input
    sysclk,rst_b,key_mode,key_change,key_turn,//output
    buzzer,led_sel,led_data);
    input sysclk,rst_b;//sysclk--global system clock,rst_b--global reset signal input key_mode;//mode choose.0--timing function.1--alarm clock function.2--adjust function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer;//device buzzer output [7:0] led_sel;//led tube bit choose
    output [7:0] led_data;//led_tube 8 bit data choose
    parameter init_hour = 8'h12;parameter init_min = 8'h59;parameter init_sec = 8'h50;//initial time :12:59:50 parameter init_alarm_hour = 8'h06;parameter init_alarm_min = 8'h30;//initial alarm time : 06:30:0 parameter count_1s = 28'h2fa_f07f;//count time 1s;
    reg [7:0] sec;reg [7:0] min;reg [7:0] hour;reg [3:0] min_l;//minute low 4 bit reg [3:0] min_h;//minute high 4 bit reg [3:0] hour_l;//hour low 4 bit reg [3:0] hour_h;//hour high 4 bit reg [23:0] key_time;//press key away shake reg key_mode_n;//press key_mode next state reg key_change_n;//press key_change next state reg key_turn_n;//press key_turn next state wire key_mode_press;//sure button press key_mode wire key_turn_press;//sure button press key_turn wire key_change_press;//sure button press key_change
    always @(posedge sysclk)key_mode_n <= key_mode;assign key_mode_press =(!key_mode)&&(key_mode_n);always @(posedge sysclk)key_turn_n <= key_turn;assign key_turn_press =(!key_turn)&&(key_turn_n);always @(posedge sysclk)key_change_n <= key_change;assign key_change_press =(!key_change)&&(key_change_n);
    always @(posedge sysclk or negedge rst_b)begin if(!rst_b)key_time <= 24'h0;else if(key_time!= 24'h0)
    key_time <= key_time + 24'h1;else if((key_time == 24'h0)&&(key_mode_press || key_change_press || key_turn_press))key_time <= key_time + 24'h1;
    end
    reg [1:0] mode_num;//key mode..0--timing function.1--alarm clock function.2--adjust function always @(posedge sysclk or negedge rst_b)begin if(!rst_b)mode_num <= 2'b00;else if(mode_num == 2'h3)mode_num <= 2'h0;else if(key_mode_press &&(key_time == 24'h0))
    mode_num <= mode_num + 2'h1;end
    always @(*)begin if(mode_num == 2'h1)begin
    min = init_alarm_min;hour = init_alarm_hour;end else begin
    min = {min_h,min_l};hour = {hour_h,hour_l};end end
    reg fm;//choose turn hour or minute always @(posedge sysclk or negedge rst_b)begin if(!rst_b)fm <= 1'b0;else if(key_turn_press &&(mode_num == 2'h2)&&(key_time == 24'h0))
    fm <= ~fm;end
    reg [27:0] time_cnt;///count time reg [27:0] time_cnt_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)time_cnt <= 28'h0;else time_cnt <= time_cnt_n;end
    always @(*)begin if(time_cnt == count_1s)time_cnt_n <= 28'h0;else if(mode_num!= 2'h0)time_cnt_n <= time_cnt;else time_cnt_n <= time_cnt + 28'h1;end
    reg [3:0] sec_l;//second low 4 bit reg [3:0] sec_h;//second high 4 bit wire sec_cb;//second carry bit signal assign sec_cb =(sec_l == 4'h9)&&(sec_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
    sec_l <= init_sec[3:0];sec_h <= init_sec[7:4];end else if((sec_l == 4'h9)&&(sec_h!= 4'h5)&&(time_cnt == count_1s))begin
    sec_l <= 4'h0;sec_h <= sec_h + 4'h1;end else if(sec_cb &&(time_cnt == count_1s))begin
    sec_l <= 4'h0;sec_h <= 4'h0;end else if(time_cnt == count_1s)
    sec_l <= sec_l + 4'h1;end
    wire min_cb;//minute carry bit signal assign min_cb =(min_l == 4'h9)&&(min_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
    min_l <= init_min[3:0];min_h <= init_min[7:4];end else if((sec_cb)&&(min_l!=4'h9)&&(time_cnt == count_1s))
    min_l <= min_l + 4'h1;else if((sec_cb)&&(min_l == 4'h9)&&(min_h!= 4'h5)&&(time_cnt == count_1s))begin
    min_l <= 4'h0;min_h <= min_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(time_cnt == count_1s))begin
    min_l <= 4'h0;min_h <= 4'h0;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l!= 4'h9))
    min_l = min_l + 4'h1;else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
    24'h0)&&(min_l == 4'h9)&&(min_h!=4'h5))begin
    min_l = 4'h0;min_h = min_h + 4'h1;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l == 4'h9)&&(min_h ==4'h5))begin
    min_l = 4'h0;min_h = 4'h0;end end
    always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
    hour_l <= init_hour[3:0];hour_h <= init_hour[7:4];end else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h9)&&(hour_h!= 4'h2)&&(time_cnt == count_1s))
    hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h3)&&(hour_h == 4'h2)&&(time_cnt == count_1s))
    hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l == 4'h9)&&(hour_h!= 4'h2)&&(time_cnt == count_1s))begin
    hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(hour_l == 4'h3)&&(hour_h == 4'h2)&&(time_cnt == count_1s))begin
    hour_l <= 4'h0;hour_h <= 4'h0;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h9)&&(hour_h!=4'h2))
    hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h3)&&(hour_h ==4'h2))
    hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l == 4'h9)&&(hour_h!=4'h2))begin
    hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
    24'h0)&&(hour_l == 4'h3)&&(hour_h ==4'h2))begin
    hour_l <= 4'h0;hour_h <= 4'h0;end end
    wire buzzer_en;assign buzzer_en =(init_alarm_min == {min_h,min_l})&&(init_alarm_hour == {hour_h,hour_l});
    led_tube i_led_tube(.sysclk(sysclk),.rst_b(rst_b),.scan_time(24'h1f090),.data0({1'h1,sec_l}),.data1({1'h1,sec_h}),.data2({1'h1,4'ha}),.data3({1'h1,min[3:0]}),.data4({1'h1,min[7:4]}),.data5({1'h1,4'ha}),.data6({1'h1,hour[3:0]}),.data7({1'h1,hour[7:4]}),.led_data(led_data),.led_sel(led_sel));buzzer i_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule
    eda技術(shù)課程設(shè)計報告篇二
    設(shè)計四 拔河游戲機
    1、設(shè)計一個能進(jìn)行拔河游戲的電路。
    2、電路使用15個(或9個)發(fā)光二極管,開機后只有中間一個發(fā)亮,此即拔河的中心點。
    3、游戲雙方各持一個按鈕,迅速地、不斷地按動,產(chǎn)生脈沖,誰按得快,亮點就向誰的方向移動,每按一次,亮點移動一次。
    4、亮點移到任一方終端二極管時,這一方就獲勝,此時雙方按鈕均無作用,輸出保持,只有復(fù)位后才使亮點恢復(fù)到中心。
    5、用數(shù)碼管顯示獲勝者的盤數(shù)。
    教學(xué)提示:
    1、按鈕信號即輸入的脈沖信號,每按一次按鈕都應(yīng)能進(jìn)行有效的計數(shù)。
    2、用可逆計數(shù)器的加、減計數(shù)輸入端分別接受兩路脈沖信號,可逆計數(shù)器原始輸出狀態(tài)為0000,經(jīng)譯碼器輸出,使中間一只二極管發(fā)亮。
    3、當(dāng)計數(shù)器進(jìn)行加法計數(shù)時,亮點向右移;進(jìn)行減法計數(shù)時,亮點向左移。
    4、由一個控制電路指示誰勝誰負(fù),當(dāng)亮點移到任一方終端時,由控制電路產(chǎn)生一個信號,使計數(shù)器停止計數(shù)。
    5、將雙方終端二極管“點亮”信號分別接兩個計數(shù)器的“使能”端,當(dāng)一方取勝時,相應(yīng)的計數(shù)器進(jìn)行一次計數(shù),這樣得到雙方取勝次數(shù)的顯示。
    6、設(shè)置一個“復(fù)位”按鈕,使亮點回到中心,取勝計數(shù)器也要設(shè)置一個“復(fù)位”按鈕,使之能清零。
    設(shè)計五 乒乓球比賽游戲機
    1、設(shè)計一個由甲、乙雙方參賽,有裁判的3人乒乓球游戲機。
    2、用8個(或更多個)led排成一條直線,以中點為界,兩邊各代表參賽雙方的位置,其中一只點亮的led指示球的當(dāng)前位置,點亮的led依此從左到右,或從右到左,其移動的速度應(yīng)能調(diào)節(jié)。
    3、當(dāng)“球”(點亮的那只led)運動到某方的最后一位時,參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),即表示啟動球拍擊球。若擊中,則球向相反方向移動;若未擊中,則對方得1分。
    4、一方得分時,電路自動響鈴3秒,這期間發(fā)球無效,等鈴聲停止后方能繼續(xù)比賽。
    5、設(shè)置自動記分電路,甲、乙雙方各用2位數(shù)碼管進(jìn)行記分顯示,每計滿21分為1局。
    6、甲、乙雙方各設(shè)一個發(fā)光二極管,表示擁有發(fā)球權(quán),每隔5次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才有效。教學(xué)提示:
    1、用雙向移位寄存器的輸出端控制led顯示來模擬乒乓球運動的軌跡,先點亮位于某一方的第1個led,由擊球者通過按鈕輸入開關(guān)信號,實現(xiàn)移位方向的控制。
    2、也可用計數(shù)譯碼方式實現(xiàn)乒乓球運動軌跡的模擬,如利用加/減計數(shù)器的2個時鐘信號實現(xiàn)甲、乙雙方的擊球,由表示球拍的按鈕產(chǎn)生計數(shù)時鐘,計數(shù)器的輸出狀態(tài)經(jīng)譯碼驅(qū)動led發(fā)亮。
    3、任何時刻都保持一個led發(fā)亮,若發(fā)亮的led運動到對方的終點,但對方未能及時輸入信號使其向相反方向移動,即失去1分。
    4、控制電路決定整個系統(tǒng)的協(xié)調(diào)動作,必須嚴(yán)格掌握各信號之間的關(guān)系。
    設(shè)計六 交通信號等控制器
    1、設(shè)計一個交通信號燈控制器,由一條主干道和一條支干道匯合成十字路口,在每個入口處設(shè)置紅、綠、黃三色信號燈,紅燈亮禁止通行,綠燈亮允許通行,黃燈亮則給行駛中的車輛有時間停在禁行線外。
    2、紅、綠、黃發(fā)光二極管作信號燈,用傳感器或邏輯開關(guān)作檢測車輛是否到來的信號。
    3、主干道處于常允許通行的狀態(tài),支干道有車來時才允許通行。主干道亮綠燈時,支干道亮紅燈;支干道亮綠燈時,主干道亮紅燈。
    4、主、支干道均有車時,兩者交替允許通行,主干道每次放行45秒,支干道每次放行25秒,設(shè)立45秒、25秒計時、顯示電路。
    5、在每次由綠燈亮到紅燈亮的轉(zhuǎn)換過程中,要亮5秒黃燈作為過渡,使行駛中的車輛有時間停到禁行線外,設(shè)立5秒計時、顯示電路。教學(xué)提示:
    1、主、支干道用傳感器檢測車輛到來情況,實驗電路用邏輯開關(guān)代替。
    2、選擇1hz時鐘脈沖作為系統(tǒng)時鐘。
    3、45秒、25秒、5秒定時信號可用順計時,也可用倒計時,計時起始信號由主控電路給出,每當(dāng)計滿所需時間,即向主控電路輸出“時間到”信號,并使計數(shù)器清零,由主控電路啟、閉三色信號燈或啟動另一計時電路。
    4、主控電路是核心,這是一個時序電路,其輸入信號為:車輛檢測信號(a,b,;45秒、25秒、5秒定時信號(c,d,e),其輸出狀態(tài)控制相應(yīng)的三色燈。主控電路可以由兩個jk觸發(fā)器和邏輯門構(gòu)成,其輸出經(jīng)譯碼后,控制主干道三色燈r、g、y和支干道三色燈r、g、y。
    設(shè)計七 電子密碼鎖
    1、設(shè)計一個密碼鎖的控制電路,當(dāng)輸入正確代碼時,輸出開鎖信號以推動執(zhí)行機構(gòu)工作,用紅燈亮、綠燈熄滅表示關(guān)鎖,用綠燈亮、紅燈熄滅表示開鎖;
    2、在鎖的控制電路中儲存一個可以修改的4位代碼,當(dāng)開鎖按鈕開關(guān)(可設(shè)置成6位至8位,其中實際有效為4位,其余為虛設(shè))的輸入代碼等于儲存代碼時,開鎖;
    3、從第一個按鈕觸動后的5秒內(nèi)若未將鎖打開,則電路自動復(fù)位并進(jìn)入自鎖狀態(tài),使之無法再打開,并由揚聲器發(fā)出持續(xù)20秒的報警信號。教學(xué)提示:
    1、該題的主要任務(wù)是產(chǎn)生一個開鎖信號,而開鎖信號的形成條件是,輸入代碼和已設(shè)密碼相同。實現(xiàn)這種功能的電路構(gòu)思有多種,例如,用兩片8位鎖存器,一片存入密碼,另一片輸入開鎖的代碼,通過比較的方式,若兩者相等,則形成開鎖信號。
    2、在產(chǎn)生開鎖信號后,要求輸出聲、光信號,聲音的產(chǎn)生由開鎖信號觸動揚聲器工作,光信號由開鎖信號點亮led指示燈;
    3、用按鈕開關(guān)的第一個動作信號觸發(fā)一個5秒定時器,若5秒內(nèi)無開鎖信號產(chǎn)生,讓揚聲器發(fā)出特殊音響,以示警告,并輸出一個信號推動led不斷閃爍。
    設(shè)計八 彩燈控制器
    1、設(shè)計一個彩燈控制器,使彩燈(led管)能連續(xù)發(fā)出四種以上不同的顯示形式;
    2、隨著彩燈顯示圖案的變化,發(fā)出不同的音響聲。教學(xué)提示:
    1、彩燈顯示的不同形式可由不同進(jìn)制計數(shù)器驅(qū)動led顯示完成;
    2、音響由選擇不同頻率cp脈沖驅(qū)動揚聲器形成。
    設(shè)計九 脈沖按鍵電話顯示器
    1、設(shè)計一個具有8位顯示的電話按鍵顯示器;
    2、能準(zhǔn)確地反映按鍵數(shù)字;
    3、顯示器顯示從低位向高位前移,逐位顯示按鍵數(shù)字,最低位為當(dāng)前輸入位;
    4、*設(shè)置一個“重?fù)堋辨I,按下此鍵,能顯示最后一次輸入的電話號碼;
    5、*掛機2秒后或按熄滅按鍵,熄滅顯示器顯示。教學(xué)提示:
    1、利用中規(guī)模計數(shù)器的予置數(shù)功能可以實現(xiàn)不同的按鍵對應(yīng)不同的數(shù)字;
    2、設(shè)置一個計數(shù)器記錄按鍵次數(shù),從而實現(xiàn)數(shù)字顯示的移位。
    設(shè)計十 簡易電子琴
    1、設(shè)計一個簡易電子琴;
    2、利用實驗箱的脈沖源產(chǎn)生1,2,3。。共7個或14個音階信號;
    3、用指示燈顯示節(jié)拍;
    4、*能產(chǎn)生顫音效果。教學(xué)提示:
    1、各音階信號由脈沖源經(jīng)分頻得到。
    設(shè)計十一 出租車自動計費器
    1、設(shè)計一個出租車自動計費器,具有行車?yán)锍逃嬞M、等候時間計費、及起價三部分,用四位數(shù)碼管顯示總金額,最大值為99。99元;
    2、行車?yán)锍虇蝺r1元/公里,等候時間單價0。5元/10分鐘,起價3元(3公里起價)均能通過人工輸入。
    3、行車?yán)锍痰挠嬞M電路將汽車行駛的里程數(shù)轉(zhuǎn)換成與之成正比的脈沖數(shù),然后由計數(shù)譯碼電路轉(zhuǎn)換成收費金額,實驗中以一個脈沖模擬汽車前進(jìn)十米,則每100個脈沖表示1公里,然后用bcd碼比例乘法器將里程脈沖乘以每公里單價的比例系數(shù),比例系數(shù)可由開關(guān)預(yù)置。例如單價是1。0元/公里,則脈沖當(dāng)量為0。01元/脈沖。
    4、用led顯示行駛公里數(shù),兩個數(shù)碼管顯示收費金額。
    教學(xué)提示:
    1、等候時間計費需將等候時間轉(zhuǎn)換成脈沖個數(shù),用每個脈沖表示的金額與脈沖數(shù)相乘即得計費數(shù),例如100個脈沖表示10分鐘,而10分鐘收費0。5元,則脈沖當(dāng)量為0。05元/脈沖,如果將脈沖當(dāng)量設(shè)置成與行車?yán)锍逃嬞M相同(0。01元/脈沖),則10分鐘內(nèi)的脈沖數(shù)應(yīng)為500個。
    2、用led顯示等候時間,兩個數(shù)碼管表示等候時間收費金額。
    3、用加法器將幾項收費相加,p=p1+p2+p3,4、p1為起價,p2為行車?yán)锍逃嬞M,p3為等候時間計費,用兩個數(shù)碼管表示結(jié)果。
    設(shè)計十二 洗衣機控制器
    1、設(shè)計一個電子定時器,控制洗衣機作如下運轉(zhuǎn):定時啟動?正轉(zhuǎn)20秒?暫停10秒?反轉(zhuǎn)20秒?暫停10秒?定時未到回到“正轉(zhuǎn)20秒?暫停10秒?……”,定時到則停止;
    2、若定時到,則停機發(fā)出音響信號;
    3、用兩個數(shù)碼管顯示洗滌的預(yù)置時間(分鐘數(shù)),按倒計時方式對洗滌過程作計時顯示,直到時間到停機;洗滌過程由“開始”信號開始;
    4、三只led燈表示“正轉(zhuǎn)”、“反轉(zhuǎn)”、“暫?!比齻€狀態(tài)。
    教學(xué)提示:
    1、設(shè)計20秒、10秒定時電路。
    2、電路輸出為“正轉(zhuǎn)”、“反轉(zhuǎn)”、“暫停”三個狀態(tài)。
    3、按照設(shè)計要求,用定時器的“時間到”信號啟動相應(yīng)的下一個定時器工作,直到整個過程結(jié)束。
    建議選用教材和參考書目
    選用教材: 《電子技術(shù)實驗指導(dǎo)書》,李國麗,朱維勇主編。中國科技大學(xué)出版社 主要參考書:《電子技術(shù)基礎(chǔ)
    模擬部分》(第四版),康華光主編,高教出版社
    《數(shù)字電子技術(shù)基礎(chǔ)》(第四版),閻石主編,高教出版社
    eda技術(shù)課程設(shè)計報告篇三
    成都大學(xué)課程設(shè)計教學(xué)大綱
    課程設(shè)計名稱: 《eda技術(shù)課程設(shè)計》 課程代碼: 學(xué) 分: 1 總學(xué)時/周數(shù): 1周
    適用專業(yè): 電子工程、通信工程、自動化等專業(yè)
    一、課程設(shè)計目的與任務(wù)
    本課程設(shè)計是在學(xué)完eda技術(shù)課程后的必修課程,它的教學(xué)目的和任務(wù)是綜合利用所學(xué)eda技術(shù)知識完成一個具有完整功能的電子系統(tǒng)設(shè)計,從系統(tǒng)頂層模塊的劃分、各功能模塊的硬件語言描述(編程)、各模塊及整體電路仿真、到最后下載到可編程器件實現(xiàn)真實的電路,讓學(xué)生親自體驗一次采用現(xiàn)代電子設(shè)計自動化技術(shù)完成一個電子系統(tǒng)設(shè)計的全過程。讓學(xué)生得到一次自主使用vhdl語言描述電路功能的訓(xùn)練機會,從而提高對vhdl語言的使用能力,加深對仿真在設(shè)計中的重要作用的認(rèn)識,提高對使用max+plus2eda軟件工具的熟練程度,最終獲得初步的電子系統(tǒng)設(shè)計經(jīng)驗,為畢業(yè)設(shè)計和將來從事電子設(shè)計的相關(guān)工作打下基礎(chǔ)
    二、課程設(shè)計基本要求
    本課程設(shè)計,采用以學(xué)生自主設(shè)計為主教師指導(dǎo)為輔的原則,讓學(xué)生有一個充分發(fā)揮自我想像的空間,設(shè)計分階段進(jìn)行,在獨立力完成了方案設(shè)計后,組織一次交流討論會,互相啟發(fā)開闊設(shè)計思路,盡可能使學(xué)生在這個具有創(chuàng)新思維、難度最高的設(shè)計環(huán)節(jié)獲得更多的收益,通過該課程設(shè)計更深入更全面地提高使用max+plus2軟件工具完成設(shè)計全過程的熟練程度,尤其是要提高仿真和試驗開發(fā)系統(tǒng)的使用能力,設(shè)計最終要做出真實電路并上電檢測其功能和性能指標(biāo)是否達(dá)到了預(yù)定的目標(biāo),最后寫出課程設(shè)計報告。
    三、課程設(shè)計選題原則
    所選題目應(yīng)是社會生活、生產(chǎn)中常見的、學(xué)生易于理解和把握且感興趣的、對所學(xué)知識盡可能綜合全面派上用場的、難易程度適中的、一周時間能夠完成的的題目。
    四、課程設(shè)計內(nèi)容及時間安排
    1.設(shè)計內(nèi)容:根據(jù)具體設(shè)計題目和提出的功能性能指標(biāo)要求,查閱相應(yīng)參考資料,將所設(shè)計的電路系統(tǒng)劃分成若干功能模塊完成頂層結(jié)構(gòu)設(shè)計(方案設(shè)計),對各功能模塊用硬件描述語言描述以完成程序設(shè)計,對個功能模塊及電路系統(tǒng)整體做仿真設(shè)計以驗證其正誤,將設(shè)計文件下載至可編程邏輯器件在實驗開發(fā)裝置上檢測功能性能指標(biāo)以完成真實電路的設(shè)計。寫出課程設(shè)計報告,其中要有頂層結(jié)構(gòu)圖,各功能模塊的程序,各功能模塊和整個電路系統(tǒng)的仿真波形圖,并對這些設(shè)計圖紙和設(shè)計程序所表達(dá)的邏輯思想、工作原理給以說明,寫出設(shè)計步驟和設(shè)計心得。2.課程設(shè)計時間:開始設(shè)計的前一周公布設(shè)計題目下達(dá)設(shè)計任務(wù),用半周時間完成方案設(shè)計、程序設(shè)計,另外半周完成仿真、下載、測試。
    五、課程設(shè)計主要參考資料
    潘松 黃繼業(yè) 編著《eda技術(shù)使用教程》(第二版)科學(xué)出版社 2005。
    王振紅主編《vhdl數(shù)字電路設(shè)計與應(yīng)用實踐教程》機械工業(yè)出版社,2006年。
    六、課程設(shè)計考核方式及成績評定
    考核成績由兩部分組成:現(xiàn)場檢測設(shè)計出的真實電路占50%,課程設(shè)計報告占50%。
    大綱撰寫人: 楊顯富 系(教研室):(簽字)學(xué)院學(xué)術(shù)委員會意見:(簽字)
    學(xué)院審核:(簽字、蓋章)年 月 日
    注:請在黃色顯示的區(qū)域里用“仿宋 五號”字體填寫。
    eda技術(shù)課程設(shè)計報告篇四
    《電子系統(tǒng)設(shè)計自動化》課程設(shè)計報告
    學(xué) 院: 機電工程學(xué)院
    題 目: 數(shù)字時鐘電路設(shè)計 課 程: 《電子系統(tǒng)設(shè)計自動化》課程設(shè)計 專業(yè)班級: 電信10級2 班 學(xué)生姓名: 劉星 秦玉杰 王艷艷 學(xué) 號: 1004101035 1004101036 1004101038
    完成日期:2013年 12 月 27 日
    摘要:
    eda(electronic design automation)電子設(shè)計自動化,就是以大規(guī)??删幊唐骷樵O(shè)計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達(dá)方式,通過相關(guān)的軟件,自動完成用軟件方式設(shè)計的電子系統(tǒng)到硬件系統(tǒng),最終形成集成電子系統(tǒng)或?qū)S眉尚酒?。本次實?xí)利用quartusii為設(shè)計軟件、vhdl為硬件描述語言,結(jié)合所學(xué)的數(shù)字電路的知識設(shè)計一個24時多功能數(shù)字鐘,具有正常時、分、秒計時,動態(tài)顯示,清零、快速校時校分、整點報時、花樣顯示等功能。利用硬件描述語言vhdl對設(shè)計系統(tǒng)的各個子模塊進(jìn)行邏輯描述,采用模塊化的設(shè)計思想完成頂層模塊的設(shè)計,通過軟件編譯、邏輯化簡、邏輯分割、邏輯綜合優(yōu)化、邏輯布線、邏輯仿真,最終將設(shè)計的軟件系統(tǒng)下載設(shè)計實驗系統(tǒng),對設(shè)計的系統(tǒng)進(jìn)行硬件測試。
    一、課程設(shè)計基本要求和任務(wù)
    《eda課程設(shè)計》是繼《模擬電子技術(shù)基礎(chǔ)》、《數(shù)字電子技術(shù)基礎(chǔ)》課程后,電信專業(yè)學(xué)生在電子技術(shù)實驗技能方面綜合性質(zhì)的實驗訓(xùn)練課程,是電子技術(shù)基礎(chǔ)的一個部分。1.1 目的和任務(wù)
    (1)通過課程設(shè)計使學(xué)生能熟練掌握一種eda軟件(quartusii)的使用方法,能熟練進(jìn)行設(shè)計輸入、編譯、管腳分配、下載等過程,為以后進(jìn)行工程實際問題的研究打下設(shè)計基礎(chǔ)。
    (2)通過課程設(shè)計使學(xué)生能利用eda軟件(quartusii)進(jìn)行至少一 個電子技術(shù)綜合問題的設(shè)計,設(shè)計輸入可采用圖形輸入法或vhdl硬件描述語言輸入法。(3)通過課程設(shè)計使學(xué)生初步具有分析、尋找和排除電子電路中常見 故障的能力。
    (4)通過課程設(shè)計使學(xué)生能獨立寫出嚴(yán)謹(jǐn)?shù)?、有理論根?jù)的、實事求是的、文理通順的字跡端正的課程設(shè)計報告。1.2 功能要求:
    (1)具有時、分、秒計數(shù)顯示功能,以24小時循環(huán)計時。(2)時鐘計數(shù)顯示時有l(wèi)ed燈的花樣顯示。(3)具有調(diào)節(jié)小時、分鐘、秒及清零的功能。(4)具有整點報時功能。
    1.3 總體方框圖:
    本系統(tǒng)可以由秒計數(shù)器、分鐘計數(shù)器、小時計數(shù)器、整點報時、分的調(diào)整以及小時的調(diào)整和一個頂層文件構(gòu)成。采用自頂向下的設(shè)計方法,子模塊利用vhdl語言設(shè)計,頂層文件用原理圖的設(shè)計方法。顯示:小時采用24進(jìn)制,而分鐘均是采用6進(jìn)制和10進(jìn)制的組合。1.4 設(shè)計原理:
    數(shù)字鐘電路設(shè)計要求所設(shè)計電路就有以下功能:時、分、秒計時顯示,清零,時、分調(diào)節(jié),整點報時及花樣顯示。分、秒計時原理相似,可以采用60進(jìn)制bcd碼計數(shù)器進(jìn)計時;小時采用24進(jìn)制bcd碼進(jìn)行計時;在設(shè)計時采用試驗電路箱上的模式7電路,不需要進(jìn)行譯碼電路的設(shè)計;所設(shè)計電路具有驅(qū)動揚聲器和花樣顯示的led燈信號產(chǎn)生。試驗箱模式7的電路如圖一所示:圖一模式七實驗電路圖
    1.5 性能指標(biāo)及功能設(shè)計:
    (1)時鐘計數(shù):完成時、分、秒的正確計時并且顯示所計的數(shù)字;對秒、分——60進(jìn)制計數(shù),即從0到59循環(huán)計數(shù),時鐘——24進(jìn)制計數(shù),即從0到23循環(huán)計數(shù),并且在數(shù)碼管上顯示數(shù)值。
    2.2 模塊劃分自頂向下分解
    2.3 模塊描述
    時鐘計時模塊完成時、分、秒計數(shù),及清零、調(diào)節(jié)時和分鐘的功能。時、分、秒計數(shù)的原理相同,均為bcd碼輸出的計數(shù)器,其中分和秒均為六十進(jìn)制bcd碼計數(shù)器,小時為二十四進(jìn)制bcd碼計數(shù)器。設(shè)計一個具有異步清零和設(shè)置輸出功能的六十進(jìn)制bcd碼計數(shù)器,再設(shè)計一個具有異步清零和設(shè)置輸出功能的二十四進(jìn)制計數(shù)器,然后將它們通過一定的組合構(gòu)成時鐘計時模塊。各個輸入/輸出端口的作用為:
    (1)clk為計時時鐘信號,reset為異步清零信號;
    (2)sethour為小時設(shè)置信號,setmin為分鐘設(shè)置信號;(3)daout[5?0]為小時的bcd碼輸出, daout[6...0]為秒和分鐘的bcd碼輸出,enmin和enhour為使能輸出信號。
    (4)在時鐘整點的時候產(chǎn)生揚聲器驅(qū)動信號和花樣顯示信號。由時鐘計時模塊中分鐘的進(jìn)行信號進(jìn)行控制。當(dāng)contr_en為高電平時,將輸入信號clk送到輸出端speak用于驅(qū)動揚聲器,同時在clk的控制下,輸出端lamp[2..0]進(jìn)行循環(huán)移位,從而控制led燈進(jìn)行花樣顯示。輸出控制模塊有揚聲器控制器和花樣顯示控制器兩個子模塊組成 2.4 頂層電路圖
    頂層文件是由四個模塊組成,分別是時、分、秒計數(shù)器和報警的vhdl語言封裝而成。經(jīng)過鎖定引腳再重新編譯獲得如下頂層原理電路圖:
    三、方案實現(xiàn)
    3.1 各模塊仿真及描述
    (1)秒計數(shù)器模塊仿真圖:將標(biāo)準(zhǔn)秒信號送入”秒計數(shù)器”,秒計數(shù)器采用60進(jìn)制計數(shù)器,每累計60秒發(fā)出一個分脈沖信號,該信號將作為分計數(shù)器的時鐘脈沖,daout代表秒輸出。
    (2)分計數(shù)器電路仿真圖:也采用60進(jìn)制計數(shù)器,每累計60分鐘,發(fā)出一個時脈沖信號,該信號將被送到時計數(shù)器,daout端口代表分鐘輸出
    (3)小時計數(shù)器電路仿真圖:時計數(shù)器采用12進(jìn)制計時器,可實現(xiàn)對24小時累 計。每累計12小時,發(fā)出一個脈沖信號。
    引腳配置完成后再進(jìn)行一次全程編譯,無誤則可以下載到試驗箱上進(jìn)行硬件測試。硬件驗證的方法如下:選擇實驗?zāi)J?;時鐘脈沖clk與clock0(1024hz)信號相連;鍵8和鍵5均為低電平,時鐘正常計時,數(shù)碼管1和2顯示秒,數(shù)碼管4和5顯示分鐘,數(shù)碼管7和8顯示小時;鍵8為高電平時,時鐘清零;鍵5為高電平時,按下鍵7和鍵4進(jìn)行調(diào)時調(diào)分操作;當(dāng)時鐘為整點的時候,三個發(fā)光二極管進(jìn)行循環(huán)移位操作,同時揚聲器發(fā)聲。
    五、心得體會
    經(jīng)過源程序的編輯、邏輯綜合、邏輯適配、編程下載成功后,在eda實驗開發(fā)系統(tǒng)進(jìn)行硬件驗證時卻發(fā)現(xiàn)實驗結(jié)果不正確,揚聲器無法發(fā)聲。經(jīng)檢查,自己設(shè)計的管腳文件有錯。將管腳鎖定文件修改后,重新進(jìn)行邏輯適配、編程下載成功后,實驗結(jié)果仍然不正確,百思不得其解。無奈之下,決定重頭開始排查每一步的細(xì)節(jié),確定各個模塊的功能完全實現(xiàn)并且頂層模塊功能正確。修改之后,重新進(jìn)行邏輯適配、編程下載驗證,實驗結(jié)果完全正確。
    這次eda課程設(shè)計歷時兩個星期,在整整兩個星期的日子里,不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多書本上學(xué)不到的知識,同時鍛煉了自己的能力,使自己對以后的路有了更加清楚的認(rèn)識,對未來有了更多的信心。這次課程設(shè)計,進(jìn)一步加深了我對eda的了解,使我對quartusii的基本操作有所了解,使我對應(yīng)用軟件的方法設(shè)計硬件系統(tǒng)有了更加濃厚的興趣。通過這次課程設(shè)計,我懂得了理論與實際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合,從實踐中得出結(jié)論,才能真正提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中,我遇到許多問題,畢竟是第一次應(yīng)用vhdl進(jìn)行硬件電路系統(tǒng)的設(shè)計,許多eda的知識還沒有充分的掌握,遇到困難也是在所難免的,同時發(fā)現(xiàn)了自己的不足之處:學(xué)習(xí)知識表面化,沒有深入了解它們的原理??偟膩碚f,這次設(shè)計的數(shù)字時鐘電路還是比較成功的,盡管在設(shè)計中遇到了很多問題,最后在老師的辛勤指導(dǎo)、同學(xué)的幫助和自己不斷思考下,終于迎刃而解,有點小小的成就感,覺得平時所學(xué)的知識有了實用的價值,達(dá)到了理論與實際相結(jié)合的目的。最后,對給過我?guī)椭乃型瑢W(xué)和指導(dǎo)老師再次表示忠心的感謝!
    參考文獻(xiàn)
    [1] 崔健明.《電子電工eda仿真技術(shù)》 高等教育出版社 2000年 [2] 盧杰,賴毅.《vhdl與數(shù)字電路設(shè)計》 科學(xué)出版社 2001年 [3] 潘松,黃繼業(yè).《eda技術(shù)實用教程》 科學(xué)出版社 2002年 [4] 朱運利.《eda技術(shù)應(yīng)用》 電子工業(yè)出版社 2004年 [5] 張明.《vhdl實用教程》 電子科技大學(xué)出版社 1999年
    [6] 彭介華.《電子技術(shù)課程設(shè)計與指導(dǎo)》 高等教育出版 1997年
    library ieee;
    use ;use ;entity minute is port(clk,clk1,reset,sethour:in std_logic;enhour:out std_logic;daout:out std_logic_vector(6 downto 0));end entity minute;architecture fun of minute is signal count :std_logic_vector(6 downto 0);signal enhour_1, enhour_2: std_logic;--enmin_1為59分時的進(jìn)位信號 begin--enmin_2由clk調(diào)制后的手動調(diào)時脈沖信號串 daout<=count;enhour_2<=(sethour and clk1);--sethour為手動調(diào)時控制信號,高電平有效 enhour<=(enhour_1 or enhour_2);process(clk,reset,sethour)begin if(reset='0')then--若reset為0,則異步清零 count<=“0000000”;elsif(clk'event and clk='1')then--否則,若clk上升沿到 if(count(3 downto 0)=“1001”)then--若個位計時恰好到“1001”即9 if(count <16#60#)then--又若count小于16#60#,即60 if(count=“1011001”)then--又若已到59d enhour_1<='1';--則置進(jìn)位為1 count<=“0000000”;--count復(fù)0 else count<=count+7;--若count未到59d,則加7,即作“加6校正” end if;--使前面的16#60#的個位轉(zhuǎn)變?yōu)?421bcd的容量 else count<=“0000000”;--count復(fù)0(有此句,則對無效狀態(tài)電路可自啟動)end if;--end if(count<16#60#)elsif(count <16#60#)then count<=count+1;--若count<16#60#則count加1 enhour_1<='0' after 100 ns;--沒有發(fā)生進(jìn)位 else count<=“0000000”;--否則,若count不小于16#60# count復(fù)0 end if;--end if(count(3 downto 0)=“1001”)end if;--end if(reset='0')end process;end fun;
    3、時計數(shù)器模塊的vhdl語言:
    library ieee;use ;use ;
    if(clk'event and clk='1')then if(dain=“0000000”)then speak<=count1(1);if(count1>=“10”)then count1<=“00”;--count1為三進(jìn)制加法計數(shù)器 else count1<=count1+1;end if;end if;end if;end process speaker;lamper:process(clk)begin if(rising_edge(clk))then if(count<=“10”)then if(count=“00”)then lamp<=“001”;--elsif(count=“01”)then lamp<=“010”;elsif(count=“10”)then lamp<=“100”;end if;count<=count+1;else count<=“00”;end if;end if;end process lamper;end fun;
    循環(huán)點亮三只燈
    eda技術(shù)課程設(shè)計報告篇五
    《eda課程設(shè)計》
    課程設(shè)計題目:
    基于單片機的溫濕度采集系統(tǒng)
    姓
    名:
    xxx
    學(xué)
    班
    時
    地
    號:
    xxxx
    級:
    xxxx
    間:
    2014.4.21~ 2013.5.5
    點:
    xxxxx
    指 導(dǎo)
    老
    師:
    xxxxx
    目錄
    一、電路原理圖..................................................................................2
    二、電路pcb圖(或?qū)嵨飯D).........................................................2
    三、電路效果圖..................................................................................3
    四、設(shè)計總結(jié)......................................................................................3 附錄(單片機源代碼)......................................................................4
    一、電路原理圖
    二、電路pcb圖(或?qū)嵨飯D)
    三、電路效果圖
    四、設(shè)計總結(jié)
    eda的實驗還是挺有趣的,比較講究動手能力,當(dāng)然也不能忽略團(tuán)體合作。總的來說本次實驗還是成功了,雖然每個環(huán)節(jié)都遇到了困難。在生成原理圖的過程中,就曾把導(dǎo)線畫成了placeline而不是placewire,還有芯片的引腳應(yīng)該用net符號而不是用文本符號,所以這些錯誤都導(dǎo)致我花在原理圖上的時間多了點。而在生成pcb電路圖的過程中遇到的困難則是自動布線之后,還有電源的幾個腳需要手動布線,所以各個元件之間的位置要布置好,以免發(fā)生短路。腐蝕的時候,由于腐蝕的時間太長了,有些碳都化開了,導(dǎo)致里面的銅被腐蝕掉了,所以又為我的工作增加了困難。在焊接的時候,要注意元件的正負(fù)極,還要檢測錫是否都與那些銅連接上了。最終把led和 dht11的程序燒進(jìn)去就行了。
    本次實驗我還是能多多少少學(xué)到點什么的,總的來說還是希望能有多一點這樣的實習(xí)。
    附錄(單片機源代碼)
    //51單片機控制溫濕度傳感器dht11
    lcd1602上顯示當(dāng)前機最小系統(tǒng)。//lcd 讀進(jìn)去 寫出來 #include
    #include
    typedef unsigned char byte;typedef unsigned int word;#define uint unsigned int
    //定義無符號整型 #define uchar unsigned char typedef bit bool;
    //此聲明一個布爾型變量即真或假// uchar data_byte,num,i;uchar rh,rl,th,tl,flag;uchar shuzi[4];unsigned char code num1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
    sbit dht=p2^4;
    //dht11data端接單片機的p2^4口//
    //***************
    延
    時
    函
    數(shù)************************************* void delay(uchar ms)//延時模塊//延時1毫秒
    {
    }
    void delay1()
    //一個for循環(huán)大概需要8個多機器周期
    //一個機器周期為1us晶振為12mhz也就是說本函數(shù)延時8us{
    } uchar i;
    while(ms--)
    for(i=0;i<110;i++);
    uchar i;
    for(i=0;i<1;i++);void display(void){ // if(flag==0)// {
    p2=0x07;
    p0=num1[shuzi[2]];delay(1);// }
    // if(flag==1)// {
    p2=0x0b;
    p0=num1[shuzi[3]];delay(1);// } // if(flag==2)// {
    p2=0x0d;
    p0=num1[shuzi[0]];delay(1);// } // if(flag==3)// {
    p2=0x0e;p0=num1[shuzi[1]];delay(1);// } }
    //**************************dht11
    測
    試
    某
    塊*************************************// void start()//開始信號
    {
    dht=1;
    delay1();
    //主機發(fā)出8us高電平,開始信號開始發(fā)出 dht=0;
    delay(25);
    // 主機把總線拉低必須大于18ms
    dht11能檢測到起始信號
    dht=1;
    //delay1();
    //以下三個延時函數(shù)差不多為24usdelay1();delay1();
    20-40us
    }
    uchar receive_byte()
    //接收一個字節(jié) 8位// {
    uchar i,temp;
    for(i=0;i<8;i++)//接收8bit的數(shù)據(jù)
    {
    while(!dht);
    //等待40-50us的低電平開始信號結(jié)束
    delay1();
    //開始信號結(jié)束之后延時26us-28us
    delay1();delay1();
    temp=0;
    //時間為26us-28usif(dht==1)
    temp=1;
    //如果26us-28us
    '0'
    數(shù)據(jù)為'1'
    while(dht);
    //
    '0'為26us-28us
    '1'為70us
    } data_byte<<=1;
    //data_byte|=temp;
    //接收每一位的數(shù)據(jù),相或保存數(shù)據(jù)
    return data_byte;}
    void receive()//接收數(shù)據(jù)// {
    uchar t_h,t_l,r_h,r_l,check,num_check,i;start();
    //開始信號//調(diào)用開始信號子函數(shù)
    dht=1;
    //主機設(shè)為輸入判斷從機dht11響應(yīng)信號
    if(!dht)
    //判斷從機是否有低電平響應(yīng)信號// {
    while(!dht);//判斷從機發(fā)出 40us 的低電平響應(yīng)信號是否結(jié)束//
    while(dht);
    //判斷從機發(fā)出 40us 的高電平是否結(jié)束 如結(jié)束則從機進(jìn)入發(fā)送數(shù)據(jù)狀態(tài),主機進(jìn)入數(shù)據(jù)接收狀態(tài)
    數(shù)
    //兩個while語句加起來就是dht11的響應(yīng)信號
    r_h=receive_byte();//濕度高位
    調(diào)用接受一個字節(jié)的子函
    r_l=receive_byte();//濕度低位
    t_h=receive_byte();//溫度高位
    t_l=receive_byte();//溫度低位
    check=receive_byte();//校驗位
    //結(jié)束信號
    dht=0;
    //當(dāng)最后一bit數(shù)據(jù)接完畢后主機拉低電平50us// for(i=0;i<7;i++)//差不多8us的延時
    delay1();
    dht=1;
    //總線由上拉電阻拉高進(jìn)入空閑狀態(tài)
    num_check=r_h+r_l+t_h+t_l;
    if(num_check==check)//判斷讀到的四個數(shù)據(jù)之和是否與校驗位相同
    {
    rh=r_h;
    rl=r_l;
    th=t_h;
    tl=t_l;
    check=num_check;}
    shuzi[0]=rh/10;shuzi[1]=rh%10;shuzi[2]=th/10;shuzi[3]=th%10;
    } }
    void main()//主函數(shù)模塊// { while(1)
    //進(jìn)入死循環(huán)
    {
    receive();
    //接收數(shù)據(jù)
    display();
    } }