2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  模擬信號(hào)處理</b></p><p><b>  一、實(shí)驗(yàn)題目2</b></p><p><b>  二、實(shí)驗(yàn)?zāi)康?</b></p><p><b>  三、設(shè)計(jì)內(nèi)容2</b></p><p><b>  四、

2、實(shí)驗(yàn)原理2</b></p><p>  4.1 ADC0804芯片介紹2</p><p>  4.1.1 ADC0804工作過(guò)程4</p><p>  4.1.2 ADC0804 轉(zhuǎn)換器的工作時(shí)序圖及轉(zhuǎn)換步驟6</p><p>  4.1.3 ADC0804的轉(zhuǎn)換精度7</p><p>  

3、4.1.4 AD轉(zhuǎn)換的轉(zhuǎn)換公式7</p><p>  4.2 矩陣鍵盤(pán)原理8</p><p>  4.3 報(bào)警電路原理9</p><p><b>  五、實(shí)驗(yàn)思路10</b></p><p>  5.1 ADC0804模塊10</p><p>  5.2 鍵盤(pán)模塊11</p&g

4、t;<p>  六、實(shí)驗(yàn)流程圖13</p><p>  6.1 AD轉(zhuǎn)換過(guò)程13</p><p>  6.2 鍵盤(pán)實(shí)現(xiàn)過(guò)程13</p><p>  七、實(shí)驗(yàn)收獲及心得體會(huì)14</p><p><b>  八、附錄15</b></p><p><b>  一、實(shí)驗(yàn)題

5、目</b></p><p><b>  模擬信號(hào)處理</b></p><p><b>  二、實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  1、學(xué)習(xí)Verilog HDL的設(shè)計(jì)技巧</p><p>  2、學(xué)習(xí)ADC0804模塊工作原理</p><p>  3、掌握ADC

6、0804控制邏輯設(shè)計(jì)技術(shù)</p><p><b>  三、設(shè)計(jì)內(nèi)容</b></p><p>  學(xué)習(xí)ADC0804模塊的工作原理,利用ADC0804對(duì)外部輸入的模擬信號(hào)進(jìn)行采用獲取當(dāng)前電壓值,在數(shù)碼管上顯示。</p><p><b>  四、實(shí)驗(yàn)原理</b></p><p>  4.1 ADC080

7、4芯片介紹 </p><p><b>  1功能:</b></p><p>  A/D轉(zhuǎn)換器就是模擬/數(shù)字轉(zhuǎn)換器(ADC),是將輸入的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)。信號(hào)輸入端可以是傳感器或轉(zhuǎn)換器的輸出,而ADC的數(shù)字信號(hào)也可能提供給微處理器,以便更廣泛的應(yīng)用。</p><p>  2 ADC0804的規(guī)格及引腳圖:</p><p

8、>  8位CMOS依次逼近型的A/D轉(zhuǎn)換器。</p><p><b>  三態(tài)鎖定輸出</b></p><p>  存取時(shí)間:135us</p><p><b>  分辨率:8位</b></p><p>  轉(zhuǎn)換時(shí)間:100us</p><p>  總誤差:正負(fù)1LSB

9、</p><p>  工作溫度:ADC0804LCN—0_70度</p><p>  引腳圖及說(shuō)明圖如圖4.1.1所示:</p><p>  圖4.1.1 ADC0804的引腳圖</p><p>  /CS:芯片選擇信號(hào)。</p><p>  /RD:外部讀取轉(zhuǎn)換結(jié)果的控制輸出信號(hào)。/RD為高電平,8個(gè)數(shù)字輸出口處理高

10、阻抗,/RD為低電平時(shí)數(shù)字?jǐn)?shù)據(jù)才會(huì)輸出。</p><p>  /WR:用來(lái)啟動(dòng)轉(zhuǎn)換的控制輸入,相當(dāng)于ADC轉(zhuǎn)換的開(kāi)始(CS=0時(shí)),/WR由高電平變?yōu)榈碗娖剑D(zhuǎn)換器被清除,/WR回到高電平時(shí),轉(zhuǎn)換正式開(kāi)始。</p><p>  CLK_IN和CLK_R:時(shí)鐘輸入或接振蕩元件(R.C),頻率限制在100KHZ~1460KHZ,如果使用RC電路,振蕩頻率為1/(1.1RC)。</p>

11、;<p>  /INTR:中斷請(qǐng)求信號(hào)輸出,低電平動(dòng)作。INTR 是轉(zhuǎn)換結(jié)束信號(hào)輸出端,輸出跳轉(zhuǎn)為低電平表示本次轉(zhuǎn)換已經(jīng)完成,可作為微處理器的中斷或查詢信號(hào)。如果將/CS 和/WR 端與/INTR 端相連,則ADC0804 就處于自動(dòng)循環(huán)轉(zhuǎn)換狀態(tài)。</p><p>  VIN(+)和VIN(-):差動(dòng)模擬電壓輸入,輸入單端正電壓時(shí),VIN(-)接地。差動(dòng)輸入時(shí)直接接VIN(+) VIN(-)。&l

12、t;/p><p>  AGND:模擬信號(hào)接地。</p><p>  DGND:數(shù)字信號(hào)接地。</p><p>  VREF/2:輔助參考電壓。</p><p>  DB0~DB7:8位的數(shù)字輸出。</p><p>  VCC:電源供應(yīng)以及作為電路的參考電壓。</p><p>  引腳功能及應(yīng)用特性如

13、下: /CS 、/RD 、/WR (引腳1、2、3):是數(shù)字控制輸入端,滿足標(biāo)準(zhǔn)TTL 邏輯電平。其中/CS 和/WR用來(lái)控制A/D 轉(zhuǎn)換的啟動(dòng)信號(hào)。/CS 、/RD 用來(lái)讀A/D 轉(zhuǎn)換的結(jié)果,當(dāng)它們同時(shí)為低電平時(shí),輸出數(shù)據(jù)鎖存器DB0~DB7 各端上出現(xiàn)8位并行二進(jìn)制數(shù)碼。</p><p>  CLKIN(引腳4)和CLKR(引腳19):ADC0801~0805片內(nèi)有時(shí)鐘電路,只要在外部“CLKI”和“CLKR

14、”兩端外接一對(duì)電阻電容即可產(chǎn)生A/D轉(zhuǎn)換所要求的時(shí)鐘,其振蕩頻率為fclk≈1/1.1RC。其典型應(yīng)用參數(shù)為:R=10kΩ,C=150pF,fclk≈640kHz轉(zhuǎn)換時(shí)間為100us。若采用外部時(shí)鐘,則外部fclk可從CLKIN端送入,此時(shí)不接R、C允許的時(shí)鐘頻率范圍為100kHz~1460kHz。</p><p>  CS=0時(shí),允許進(jìn)行A/D轉(zhuǎn)換。WR由低跳高時(shí)A/D轉(zhuǎn)換開(kāi)始,8位逐次比較需8×8=

15、64個(gè)時(shí)鐘周期,再加上控制邏輯操作,一次轉(zhuǎn)換需要66~73個(gè)時(shí)鐘周期。在典型應(yīng)用fclk=640kHz時(shí),轉(zhuǎn)換時(shí)間約為103us~114us。當(dāng)fclk 超過(guò)640kHz,轉(zhuǎn)換精度下降,超過(guò)極限值1460kHz 時(shí)便不能正常工作。本次實(shí)驗(yàn)中,選擇clk=40MHz,經(jīng)過(guò)200分頻之后,使時(shí)鐘頻率為fclk=200kHz。</p><p>  實(shí)驗(yàn)箱上ADC0804的原理圖如圖4.1.2:</p>&

16、lt;p>  圖4.1.2 ADC0804原理圖</p><p>  由原理圖上可以看出ADC0804部分的各種參數(shù)設(shè)置。</p><p>  4.1.1 ADC0804工作過(guò)程</p><p>  控制ADC0804進(jìn)行模擬/數(shù)字的轉(zhuǎn)換時(shí)使用的信號(hào)為CS、WD、RD三個(gè)。DB0~DB7代表轉(zhuǎn)換后的數(shù)字資料。可以分為如下步驟:</p><

17、p>  (1)、置CS=WR=0,RD=1,要求ADC0804開(kāi)始進(jìn)行模擬/數(shù)字轉(zhuǎn)換;</p><p>  (2)、置CS=WR=RD=1,此時(shí)ADC0804進(jìn)行轉(zhuǎn)換動(dòng)作,轉(zhuǎn)換時(shí)間>100us,INIT下降沿表示完成;</p><p>  (3)、置CS=RD=0,WD=1,向ADC0804請(qǐng)求讀取轉(zhuǎn)換后數(shù)據(jù);</p><p>  (4)、讀取DB0~D

18、B7的數(shù)據(jù),置CS=WR=RD=1。</p><p>  狀態(tài)轉(zhuǎn)換圖分析如下:</p><p>  我們把state作為狀態(tài)標(biāo)志,共有4個(gè)值:00,01,10,11.當(dāng)state=00時(shí),片選信號(hào)CS=寫(xiě)信號(hào)WR=0,而讀信號(hào)RD=1,此時(shí)執(zhí)行寫(xiě)操作,完成后延時(shí)一段時(shí)間,轉(zhuǎn)入state=01狀態(tài)。</p><p>  進(jìn)入state=01狀態(tài)后,CS=WR=RD=1

19、,即0804不工作,這樣把寫(xiě)入的數(shù)值存住,當(dāng)存完畢,發(fā)出INT=0信號(hào),轉(zhuǎn)入state=10狀態(tài),若未存住,則發(fā)出INT=1,繼續(xù)第二步。</p><p>  進(jìn)入state=10狀態(tài),CS=RD=0,WR=1,進(jìn)行讀操作,完成后延時(shí)一段時(shí)間,轉(zhuǎn)入state=11狀態(tài)。</p><p>  進(jìn)入最后一個(gè)狀態(tài)后,依然CS=RD=WR=1,這樣實(shí)現(xiàn)AD804的復(fù)位工作,再自動(dòng)轉(zhuǎn)回state=0

20、0狀態(tài)。</p><p>  設(shè)s0、s1、s2、s3對(duì)應(yīng)上面所說(shuō)的四種狀態(tài),轉(zhuǎn)換圖如下:</p><p>  4.1.2 ADC0804 轉(zhuǎn)換器的工作時(shí)序圖及轉(zhuǎn)換步驟</p><p>  ADC0804的工作時(shí)序圖(Timing Diagrams)如圖4.1.2所示:</p><p>  圖4.1.2:ADC0804手冊(cè)給出的ADC轉(zhuǎn)換時(shí)

21、序圖</p><p>  圖4.1.2給出的其實(shí)就是使ADC0804正確工作的軟件編程模型。由圖可見(jiàn),實(shí)現(xiàn)一次ADC轉(zhuǎn)換主要包含下面三個(gè)步驟:</p><p>  1.啟動(dòng)轉(zhuǎn)換:由圖4.1.2中的上部“FIGURE 10A”可知,在/CS信號(hào)為低電平的情況下,將/WR引腳先由高電平變成低電平,經(jīng)過(guò)至少tW(WR)I延時(shí)后,再將/WR引腳拉成高電平,即啟動(dòng)了一次AD轉(zhuǎn)換。</p>

22、<p>  注:手冊(cè)中給出了要正常啟動(dòng)AD轉(zhuǎn)換/WR的低電平保持時(shí)間tW(WR)I的最小值為100ns,即/WR拉低后延時(shí)大于100ns即可,不用太精確,只要估計(jì)插入的延時(shí)大于100ns即可。</p><p>  2.延時(shí)等待轉(zhuǎn)換結(jié)束:依然由圖4.1.2中的上部“FIGURE 10A”可知,由拉低/WR信號(hào)啟動(dòng)AD采樣后,經(jīng)過(guò)1到8個(gè)Tclk+INTERNAL Tc延時(shí)后,AD轉(zhuǎn)換結(jié)束,因此,啟動(dòng)轉(zhuǎn)

23、換后必須加入一個(gè)延時(shí)以等待AD采樣結(jié)束。</p><p>  注:手冊(cè)中給出了內(nèi)部轉(zhuǎn)換時(shí)間“INTERNAL Tc”的時(shí)間范圍為62~73個(gè)時(shí)鐘周期,因此延時(shí)等待時(shí)間應(yīng)該至少為8+73=81個(gè)時(shí)鐘周期。本次實(shí)驗(yàn)采用外部時(shí)鐘,外部fclk可從CLKIN端送入,此時(shí)不接R、C允許的時(shí)鐘頻率范圍為100kHz~1460kHz。本實(shí)驗(yàn)時(shí)鐘頻率約為fclk=200kHz,因此時(shí)鐘周期約為T(mén)clk=1/fclk=5us。所以

24、該步驟至少應(yīng)延時(shí)81*Tclk≈405us。不用太精確,只要估計(jì)插入的延時(shí)大于405us即可。</p><p>  3.讀取轉(zhuǎn)換結(jié)果:由圖4.1.2的下部“FIGURE 10B”可知,采樣轉(zhuǎn)換完畢后,再/CS信號(hào)為低的前提下,將/RD腳由高電平拉成低電平后,經(jīng)過(guò)tACC的延時(shí)即可從DB腳讀出有效的采樣結(jié)果。</p><p>  注:手冊(cè)中給出了tACC的典型值和最大值分別為135ns和20

25、0ns,因此將/RD引腳拉低后,等待大于200ns后即可從DB0~DB7讀出有效的轉(zhuǎn)換結(jié)果。不用太精確,只要估計(jì)插入的延時(shí)大于200ns即可。</p><p>  4.1.3 ADC0804的轉(zhuǎn)換精度</p><p>  關(guān)于轉(zhuǎn)換器的轉(zhuǎn)換精度問(wèn)題,用分辨率和轉(zhuǎn)換誤差來(lái)描述其轉(zhuǎn)換精度。 </p><p>  所謂分辨率,就是電路所能分辨的最小輸出電壓U(L

26、SB)與滿刻度輸出電壓U(omax)之比: </p><p>  分辨率=U(LSB)/U(omax)=1/(2^n-1) </p><p>  轉(zhuǎn)換誤差:指輸入端加滿刻度的數(shù)字量時(shí),ADC輸出電壓的理論值與實(shí)際值之差。轉(zhuǎn)換誤差一般<0.5U(LSB) </p><p>  最小分辨電壓:U(LSB)=分辨率*U(omax)=U(oma

27、x)/(2^n-1)。由于ADC0804是個(gè)8位CMOS依次逼近型的A/D轉(zhuǎn)換器,而且原理上來(lái)說(shuō)U(omax)=5V(為參考電壓),但是經(jīng)過(guò)實(shí)際測(cè)量芯片的9號(hào)管腳(Vref/2),其電壓值為2.96V,因此,根據(jù)實(shí)際情況,將參考電壓值由5V修改為Vref=5.92V。因此最小分辨電壓為5.92V/255=0.023V。</p><p>  4.1.4 AD轉(zhuǎn)換的轉(zhuǎn)換公式 </p><p>

28、;  對(duì)采樣值進(jìn)行運(yùn)算變換,換算出實(shí)際的滑動(dòng)變阻器輸入電壓值。</p><p>  對(duì)于任何一個(gè)A/D采樣器而言,其轉(zhuǎn)換公式如下:</p><p><b>  其中:</b></p><p>  :輸入ADC的模擬電壓值。</p><p> ?。篈DC轉(zhuǎn)換后的二進(jìn)制值。本試驗(yàn)的ADC0804為八位。</p>

29、<p> ?。篈DC能夠表示的刻度總數(shù)。ADC0804為八位ADC,因此</p><p> ?。篈DC參考電壓值,本試驗(yàn)ADC0804經(jīng)過(guò)測(cè)量后所得=5.92V。因此,對(duì)于本試驗(yàn),轉(zhuǎn)換公式為:</p><p>  4.2 矩陣鍵盤(pán)原理</p><p>  在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少I(mǎi)/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤(pán)中,每條水平線

30、和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(8鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤(pán)是合理的。矩陣式結(jié)構(gòu)的鍵盤(pán)顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過(guò)電阻接正電源,x[3..0]為列掃描輸出,y[3..0]為行掃描輸入。這樣,

31、當(dāng)按鍵沒(méi)有按下時(shí),所有的輸出端都是高電平,代表無(wú)鍵按下。列線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。本次實(shí)驗(yàn)中,clk信號(hào)采用與AD轉(zhuǎn)換所用的時(shí)鐘信號(hào)相同,均為200kHz。</p><p>  行列式鍵盤(pán)的電路原理如圖4.2.1所示。(為了說(shuō)明問(wèn)題以4*4為例)</p><p>  圖4.2.1 行列式鍵盤(pán)的電路原理如圖</

32、p><p>  設(shè)置掃描信號(hào)為x[3]~x[0],行線按鍵輸入信號(hào)y[3]~y[0]與鍵值關(guān)系如表4-2所示。</p><p>  表4-1 掃描信號(hào)和行線按鍵輸入信號(hào)與按鍵之間的關(guān)系表</p><p>  4.3 報(bào)警電路原理</p><p>  由于ADC0804芯片有電壓限制,為了避免在進(jìn)行AD轉(zhuǎn)換的過(guò)程中,由于操作不當(dāng)引起芯片燒毀這種

33、情況的發(fā)生,本次實(shí)驗(yàn)增加了一個(gè)報(bào)警電路,當(dāng)電壓大于所設(shè)的閾值時(shí),蜂鳴器報(bào)警。報(bào)警原理是:給PAin引腳一個(gè)方波,則蜂鳴器響,否則,蜂鳴器不報(bào)警。當(dāng)設(shè)置撥碼開(kāi)關(guān)為高電平時(shí)(本次實(shí)驗(yàn)設(shè)置的是第九個(gè)撥碼開(kāi)關(guān)),關(guān)閉蜂鳴器報(bào)警。具體實(shí)現(xiàn)可以看附錄代碼。</p><p>  報(bào)警電路的原理圖如圖4.3所示:</p><p><b>  圖4.3 報(bào)警電路</b></p&g

34、t;<p><b>  五、實(shí)驗(yàn)思路</b></p><p>  5.1 ADC0804模塊</p><p>  最初,我們想借鑒學(xué)長(zhǎng)的程序,建立查找表的方法;但是,這種方法的弊端很多:比如,大大增加了代碼量,直接導(dǎo)致程序編譯時(shí)間過(guò)久,效率低下;而且如果要換一個(gè)長(zhǎng)度范圍,則要完全新建一個(gè)查找表,而且這種方法會(huì)耗費(fèi)大量的計(jì)算。所以,思考前后,我們決定根據(jù)A

35、DC0804的轉(zhuǎn)換公式用除法和取余的方式進(jìn)行處理,即用二進(jìn)制的模擬電壓值通過(guò)數(shù)制計(jì)算轉(zhuǎn)換為十進(jìn)制數(shù),然后再用該數(shù)除以(255/5.92)(注:因?yàn)闇y(cè)得實(shí)驗(yàn)箱上ADC0804芯片9號(hào)管腳的電壓為Vref/2=2.96V,因此,參考電壓Vref=5.92V)。把各個(gè)位賦值到cntq(cntq4代表個(gè)位數(shù),cntq3代表第一位小數(shù),cntq2代表第二位小數(shù),cntq1代表第三位小數(shù),cntq的顯示是在8為數(shù)碼管的后四位)。我們還將8位數(shù)碼管的

36、前三位用來(lái)顯示ADC轉(zhuǎn)換后的8位二進(jìn)制值(DB0~DB7),將二進(jìn)制轉(zhuǎn)換為十進(jìn)制,即0~255的范圍;將各個(gè)位賦給a(a1代表百位,a2代表十位,a3代表個(gè)位)。</p><p><b>  具體實(shí)現(xiàn)如下:</b></p><p>  接著就是數(shù)碼管的顯示了。在數(shù)碼管輪換顯示的模塊當(dāng)中,最初我們只是按順序賦值于各個(gè)數(shù)碼管,但在硬件調(diào)試過(guò)程中出現(xiàn)中大量問(wèn)題,比如數(shù)碼管閃

37、爍強(qiáng)烈,和部分不能顯示和顯示亂碼問(wèn)題,后來(lái)加上了case語(yǔ)句,以cnt的變化做周期循環(huán),小數(shù)點(diǎn)直接賦值,這樣問(wèn)題就消失了。</p><p>  在AD讀寫(xiě)狀態(tài)的轉(zhuǎn)換中,要設(shè)定延時(shí),來(lái)保證指令的執(zhí)行。</p><p>  但是,用除法也有不足之處,數(shù)碼管一直在閃爍,即電壓不穩(wěn)定。因?yàn)槟M量肯定不像數(shù)字量一樣穩(wěn)定,所以可以對(duì)模擬量進(jìn)行濾波處理或者是通過(guò)多次采樣取平均來(lái)減小誤差,提高精度。本次實(shí)

38、驗(yàn)采用的就是100次采樣取平均來(lái)減少數(shù)碼管閃爍,實(shí)驗(yàn)結(jié)果證明效果很好。而且大大降低了實(shí)驗(yàn)誤差(沒(méi)取平均時(shí),誤差為0.04~0.05V,采用100次采樣取平均后,誤差縮小為0.005V)。</p><p><b>  具體實(shí)現(xiàn)過(guò)程如下:</b></p><p><b>  5.2 鍵盤(pán)模塊</b></p><p>  由于8

39、個(gè)數(shù)碼管中后4個(gè)用于顯示電壓值,前3個(gè)用于顯示ADC轉(zhuǎn)換后的8位二進(jìn)制值;所以只剩下第四個(gè)數(shù)碼管。我們的思路是:</p><p>  用第四個(gè)數(shù)碼管顯示鍵盤(pán)的鍵值(只需顯示0~9即可,A~F的鍵值用不到,可以不顯示),一方面可以測(cè)試一下鍵盤(pán)電路是否準(zhǔn)確;另一方面可以清晰的看到按鍵是否正常按下,方便后面的程序檢驗(yàn)。本次實(shí)驗(yàn)除了用到了數(shù)字鍵之外,只用到了A這個(gè)功能鍵,當(dāng)按下A鍵之后,可以設(shè)定一個(gè)三位數(shù)的閾值(0~25

40、5)每個(gè)數(shù)都在第四個(gè)數(shù)碼管上依次顯示,當(dāng)ADC轉(zhuǎn)換后的8位二進(jìn)制值(前三個(gè)數(shù)碼管上顯示;同時(shí)前8個(gè)LED燈對(duì)應(yīng)這8個(gè)二進(jìn)制數(shù),亮表示對(duì)應(yīng)位為1,不亮表示對(duì)應(yīng)位為0)大于設(shè)定的三位數(shù)的閾值之后,蜂鳴器報(bào)警。A設(shè)置鍵可以多次設(shè)置。</p><p>  由于只有一個(gè)數(shù)碼管可用,所以必須要在A鍵按下之后開(kāi)始存儲(chǔ)接下來(lái)按下的數(shù)字鍵,并且按照順序存儲(chǔ)。我們通過(guò)設(shè)置3個(gè)4位的寄存器threshold來(lái)存儲(chǔ)鍵值。同時(shí)設(shè)置cnt2

41、來(lái)判斷按鍵次數(shù)(鍵盤(pán)程序必須有消抖功能),每按下一個(gè)鍵cnt2+1;通過(guò)判斷cnt2的值來(lái)判斷按下數(shù)字鍵的順序;同時(shí),由于是在A鍵按下之后才開(kāi)始存儲(chǔ)數(shù)字鍵的鍵值,因此當(dāng)判斷是A鍵按下之后,cnt2清零。</p><p>  因?yàn)樵O(shè)定的是一個(gè)三位數(shù),因此還需要設(shè)定一個(gè)寄存器hh用來(lái)限制存儲(chǔ)的數(shù)值個(gè)數(shù),當(dāng)A鍵按下之后,hh=1,然后進(jìn)行存儲(chǔ)后面按下的三個(gè)數(shù)字鍵的鍵值,而當(dāng)按下三個(gè)數(shù)字鍵之后,即cnt2>3時(shí),h

42、h=0;不再對(duì)后面的數(shù)字鍵值進(jìn)行存儲(chǔ)。</p><p><b>  下面是具體實(shí)現(xiàn):</b></p><p><b>  六、實(shí)驗(yàn)流程圖</b></p><p>  6.1 AD轉(zhuǎn)換過(guò)程</p><p>  6.2 鍵盤(pán)實(shí)現(xiàn)過(guò)程</p><p>  七、實(shí)驗(yàn)收獲及心得體會(huì)&l

43、t;/p><p>  本次課程設(shè)計(jì)收獲良多,由于很多次實(shí)驗(yàn)都有接觸過(guò)AD轉(zhuǎn)換,所以這個(gè)題目對(duì)我們來(lái)說(shuō)并不陌生。雖然不陌生,但是要系統(tǒng)的實(shí)現(xiàn)一個(gè)功能的工作量也是很大的;而且本次的課程設(shè)計(jì)時(shí)間是從周二開(kāi)始的,時(shí)間相對(duì)來(lái)說(shuō)比較緊,所以我們充分利用了晚上的時(shí)間,每天晚上都到實(shí)驗(yàn)室去調(diào)代碼。</p><p>  回顧這一周的課程設(shè)計(jì),我們選定題目后,就上網(wǎng)去搜集相關(guān)的資料,分析ADC0804的工作原理,

44、然后針對(duì)ADC0804芯片的特點(diǎn)做相應(yīng)的設(shè)計(jì)。只要了解了A/D轉(zhuǎn)換的四個(gè)狀態(tài),A/D轉(zhuǎn)換部分的問(wèn)題也就迎刃而解了;但是,關(guān)鍵問(wèn)題是只去一次數(shù)值,用除法來(lái)做,無(wú)論怎么調(diào)節(jié)頻率,在數(shù)碼管上顯示的數(shù)值都會(huì)閃的很厲害,影響對(duì)對(duì)應(yīng)電壓的讀取;而且只取一個(gè)值的話,實(shí)驗(yàn)誤差必然會(huì)比較大。針對(duì)這些問(wèn)題,我們采取了采樣100次,然后取平均,將處理過(guò)的數(shù)據(jù)作為A/D轉(zhuǎn)換的數(shù)據(jù)輸出,這樣閃爍問(wèn)題也就解決了,而且取平均也順帶解決了實(shí)驗(yàn)誤差的問(wèn)題,可謂一舉兩得。

45、</p><p>  完成A/D轉(zhuǎn)換的主題部分之后,我們就想在此基礎(chǔ)上添加一些附加功能:采用鍵盤(pán)程序和蜂鳴器報(bào)警電路??紤]到滑動(dòng)變阻器阻值的改變會(huì)導(dǎo)致輸出電壓的改變,為了避免因調(diào)節(jié)滑動(dòng)變阻器導(dǎo)致電壓過(guò)高燒毀芯片這種情況的發(fā)生,我們決定通過(guò)鍵盤(pán)設(shè)定一個(gè)閾值,當(dāng)輸出電壓高于這個(gè)閾值之后,蜂鳴器報(bào)警。由于之前有做過(guò)鍵盤(pán)程序的實(shí)驗(yàn),因此,鍵盤(pán)部分就節(jié)省了不少時(shí)間;但是設(shè)定閾值部分因?yàn)橐鎯?chǔ)設(shè)定的數(shù)值的順序,實(shí)現(xiàn)起來(lái)相對(duì)麻

46、煩了一點(diǎn);所幸的是,在同學(xué)的幫助下,我們終于調(diào)試成功了。</p><p>  總體來(lái)講,本次實(shí)驗(yàn)由于是兩個(gè)人一組,兩個(gè)人的智慧肯定大于一個(gè)人的;所以,當(dāng)我們遇到什么難題的時(shí)候,經(jīng)過(guò)討論、總結(jié),最終我們都把這些困難一一解決了。這應(yīng)該算是團(tuán)隊(duì)合作的精髓所在吧。這一周基本上都在實(shí)驗(yàn)室待者,我個(gè)人比較享受在實(shí)驗(yàn)室的時(shí)光,看大家都忙著自己的課程設(shè)計(jì),還有調(diào)試成功時(shí)候露出欣慰的笑容,再看看自己一步一步調(diào)程序到最后成功實(shí)現(xiàn)希望

47、實(shí)現(xiàn)的功能時(shí),這種感覺(jué)真的是非常奇妙。</p><p>  最后,感謝我的搭檔,正是因?yàn)槲覀儍蓚€(gè)相互合作才有最后這個(gè)成品的誕生;同時(shí)還感謝那些在實(shí)驗(yàn)室?guī)臀艺{(diào)試代碼,找出程序BUG,并給我們很多建議的同學(xué)。如果沒(méi)有他們的幫助,我們估計(jì)還得走不少?gòu)澛贰?lt;/p><p><b>  八、附錄</b></p><p><b>  程序代碼如下

48、:</b></p><p>  module adc(cs,wr,rd,intr,dati,clk,scan,seg,PAin,din0,reset,y,x,out,keypress);</p><p>  output cs,wr,rd; //片選、讀、寫(xiě),控制AD轉(zhuǎn)換的</p><p>  output[7:0] scan,seg;

49、//位選、段選</p><p>  output PAin; //接蜂鳴器的,控制發(fā)聲</p><p>  output[3:0] x; //鍵盤(pán)列掃描輸出</p><p>  output [3:0]out; //存儲(chǔ)鍵盤(pán)鍵值</p><p>  output keypress;

50、//判斷是否有鍵按下,有鍵按下高電平輸出</p><p>  input clk,intr; //時(shí)鐘(40MHz),intr為下降沿表示AD轉(zhuǎn)換完成</p><p>  input[7:0] dati; //ADC0804DB7~DB0輸出作為CPLD的輸入</p><p>  input din0,reset; //di

51、n0接第9個(gè)撥碼開(kāi)關(guān),控制蜂鳴器</p><p>  input [3:0] y; //鍵盤(pán)行掃描輸入</p><p>  reg[7:0]sm=8'b11111111; //8位的閾值初始化為255</p><p>  reg hh; //A鍵按下,hh=1,開(kāi)始控制存儲(chǔ)按下的數(shù)字鍵鍵值</p>

52、;<p>  reg[3:0] threshold[2:0]; //用于存儲(chǔ)A鍵按下之后按的三個(gè)數(shù)字鍵的鍵值</p><p>  reg[2:0] cnt2; //用于判斷按下數(shù)字鍵的順序</p><p>  reg keypress; //判斷按鍵是否按下,按鍵輸出上升沿</p><p>  reg

53、[4:0] count; //消抖累加到30,合約10ms左右</p><p>  reg[3:0] x;</p><p>  reg[7:0] dato,scan; //AD轉(zhuǎn)換的輸出dato</p><p>  wire[7:0] seg;</p><p>  reg cs,wr,rd;</p>

54、;<p>  reg clk1,clk3; //分頻</p><p>  reg[7:0] fenpinclk1,fenpinclk; //用于分頻計(jì)數(shù)</p><p>  reg[15:0] fenpinclk3;</p><p>  reg[3:0] cntq1,cntq2,cntq3,cntq4,Dat; //用于存儲(chǔ)A

55、D轉(zhuǎn)換輸出電壓的各個(gè)位</p><p>  reg[3:0] a1,a2,a3; //用于存儲(chǔ)AD轉(zhuǎn)換輸出的二進(jìn)制轉(zhuǎn)化為十進(jìn)制值各個(gè)位</p><p>  reg[3:0] cnt; //cnt不同狀態(tài)選通不同的數(shù)碼管</p><p>  reg[1:0] state; //AD轉(zhuǎn)換

56、的四個(gè)不同的狀態(tài)之間的變換</p><p>  reg[3:0] state1,out; //鍵盤(pán)的幾個(gè)狀態(tài)</p><p><b>  reg PAin;</b></p><p>  reg[7:0]i=0; //i為采樣100次的計(jì)數(shù)器</p><

57、;p>  reg[20:0]datismt=0; //存儲(chǔ)采樣100次的數(shù)據(jù)之和</p><p>  parameter[1:0]s0=0,s1=1,s2=2,s3=3; //AD轉(zhuǎn)換的四個(gè)狀態(tài)</p><p>  always @(posedge clk3) //經(jīng)過(guò)分頻后,clk3=5kHz</p><

58、p><b>  begin</b></p><p>  if(dato >= sm) //超過(guò)設(shè)定的閾值之后,蜂鳴器報(bào)警</p><p><b>  begin</b></p><p>  PAin = ~PAin; //給蜂鳴器一個(gè)方波,發(fā)聲</p><

59、;p>  if(din0==1) //撥碼開(kāi)關(guān)為高電平時(shí),蜂鳴器不叫</p><p><b>  PAin=0;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  always@(pos

60、edge clk) //分頻,clk3=5kHz</p><p><b>  begin</b></p><p>  if(fenpinclk3==3999) //每4000次翻轉(zhuǎn),8000分頻,clk為40MHz,</p><p><b>  begin </b></p

61、><p>  fenpinclk3<=8'h00;</p><p>  clk3=~clk3; //clk3=5kHz</p><p><b>  end</b></p><p><b>  else</b></p><p><b&

62、gt;  begin</b></p><p>  fenpinclk3<=fenpinclk3+1;</p><p><b>  end</b></p><p><b>  end</b></p><p>  always@(posedge clk) //clk經(jīng)

63、過(guò)分頻后,變?yōu)锳D轉(zhuǎn)換所需的頻率clk1</p><p><b>  begin</b></p><p>  if(fenpinclk1==8'b0110_0011) //每100次翻轉(zhuǎn),200分頻,clk1=200kHz</p><p><b>  begin</b></p><p>

64、  fenpinclk1<=8'h00;</p><p>  clk1=~clk1; </p><p><b>  end</b></p><p><b>  else</b></p><p><b>  begin</b></p><p>

65、;  fenpinclk1<=fenpinclk1+1;</p><p><b>  end</b></p><p><b>  end</b></p><p>  ///////////////////////////////////////////////控制ADC0804轉(zhuǎn)換//////////////////

66、/////////////////////////////</p><p>  always @(posedge clk1) </p><p><b>  begin</b></p><p>  case(state)</p><p>  s0:begin //開(kāi)始AD轉(zhuǎn)換<

67、;/p><p><b>  cs<=0;</b></p><p><b>  wr<=0;</b></p><p><b>  rd<=1;</b></p><p>  if(fenpinclk==8'b0110_0011) //s0->s1,延

68、時(shí)</p><p><b>  begin</b></p><p>  state<=s1;</p><p>  fenpinclk<=0;</p><p><b>  end</b></p><p><b>  else</b></p

69、><p>  fenpinclk<=fenpinclk+1;</p><p><b>  end</b></p><p>  s1:begin //ADC0804轉(zhuǎn)換中</p><p><b>  wr<=1;</b></p><p

70、><b>  cs<=1;</b></p><p><b>  rd<=1;</b></p><p>  if(intr==0) // intr=0表示轉(zhuǎn)換完成,進(jìn)入下一個(gè)狀態(tài)</p><p><b>  begin</b></p><

71、;p>  state<=s2;</p><p><b>  end </b></p><p><b>  els </b></p><p>  begin state<=s1; end</p><p><b>  end </b></p><

72、;p>  s2:begin //向ADC0804請(qǐng)求轉(zhuǎn)換后的數(shù)據(jù)</p><p><b>  cs<=0;</b></p><p><b>  wr<=1;</b></p><p><b>  rd<=0; </b></p>

73、<p>  if(fenpinclk==8'b0110_0011) //s2->s3,延時(shí)</p><p><b>  begin</b></p><p>  state<=s3;</p><p>  fenpinclk<=0; </p><p><b>  end<

74、/b></p><p><b>  else</b></p><p>  fenpinclk<=fenpinclk+1; </p><p><b>  end </b></p><p>  s3:begin //讀取轉(zhuǎn)換后的數(shù)據(jù)(DB7~DB0)

75、</p><p><b>  cs<=1;</b></p><p><b>  wr<=1;</b></p><p><b>  rd<=1;</b></p><p>  if(i<100) //采樣100次,將所采的數(shù)據(jù)

76、求和 </p><p>  begin //值存在datismt中</p><p>  datismt=datismt+dati; </p><p><b>  i=i+1;</b></p><p>  state<=s0; //每取完一個(gè)數(shù)據(jù)之后,重新進(jìn)行一次&l

77、t;/p><p>  end // AD轉(zhuǎn)換,故跳轉(zhuǎn)到s0</p><p><b>  else</b></p><p><b>  begin</b></p><p>  i=0; //取滿100個(gè)數(shù)據(jù),計(jì)數(shù)器i清零</p>

78、<p>  datismt=datismt/100; //對(duì)所采數(shù)據(jù)求和之后再取平均</p><p>  dato=datismt; //平均值賦給dato進(jìn)行后面的操作</p><p>  datismt=0; //取完平均后,存儲(chǔ)器清零</p><p>  state<=s0; //重新進(jìn)行下一輪

79、的AD轉(zhuǎn)換</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  endcase</b></p><p><b>  end</b></p><p>  ///////

80、//////////////////////////數(shù)碼管后四位和前三位各個(gè)位的算法/////////////////////////////////</p><p>  // cntq4代表個(gè)位數(shù),cntq3代表第一位小數(shù),cntq2代表第二位小數(shù),cntq1代表//第三位小數(shù)。a1代表百位,a2代表十位,a3代表個(gè)位</p><p>  always@(dato)</p>

81、<p><b>  begin</b></p><p>  cntq4=dato/(25500/592); </p><p>  cntq3=((dato%(25500/592))*10)/(25500/592);</p><p>  cntq2=((((dato%(25500/592))*10)%(25500/592))*10)/

82、(25500/592); cntq1=(((((dato%(25500/592))*10)%(25500/592))*10)%(25500/592))*10/(25500/592);</p><p>  a1=dato/100;</p><p>  a2=(dato%100)/10;</p><p>  a3=(dato%100)%10;</p>

83、<p><b>  end</b></p><p>  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p><p>  always @(posedge

84、 clk1)</p><p><b>  begin</b></p><p>  if(cnt==4'b1000) //cnt選通數(shù)碼管并顯示</p><p>  begin //當(dāng)達(dá)到第9個(gè)狀態(tài)時(shí)返回第一個(gè)狀態(tài), </p><p>  cnt<=4

85、'b0000; //輪流掃描8個(gè)數(shù)碼管</p><p><b>  end</b></p><p><b>  else</b></p><p><b>  begin </b></p><p>  cnt<=cnt+1'b1; <

86、/p><p><b>  end </b></p><p><b>  case(cnt)</b></p><p>  4'b0000: //選通第一個(gè)數(shù)碼管,顯示百位a1</p><p><b>  begin</b></p>&

87、lt;p>  scan<=8'b10000000;</p><p><b>  Dat<=a1;</b></p><p><b>  end</b></p><p>  4'b0001: //選通第二個(gè)數(shù)碼管,顯示百位a2</p><p>

88、<b>  begin</b></p><p>  scan<=8'b01000000;</p><p><b>  Dat<=a2;</b></p><p><b>  end</b></p><p>  4'b0010:

89、 //選通第三個(gè)數(shù)碼管,顯示百位a3</p><p><b>  begin</b></p><p>  scan<=8'b00100000;</p><p><b>  Dat<=a3;</b></p><p><b>  end</b></p&g

90、t;<p>  4'b0011: //選通第5個(gè)數(shù)碼管,顯示小數(shù)點(diǎn)前一位cntq4</p><p><b>  begin</b></p><p>  scan<=8'b00001000; </p><p>  Dat<=cntq4;</p><p&g

91、t;<b>  end</b></p><p>  4'b0100: //選通第5個(gè)數(shù)碼管,顯示小數(shù)點(diǎn)</p><p><b>  begin</b></p><p>  scan<=8'B00001000; </p><p>  Dat<=

92、4'B1010; </p><p><b>  end</b></p><p>  4'b0101: //選通第6個(gè)數(shù)碼管,顯示第一位小數(shù)cntq3</p><p><b>  begin</b></p><p>  scan<=8'B00

93、000100; </p><p>  Dat<=cntq3;</p><p><b>  end </b></p><p>  4'b0110: //選通第7個(gè)數(shù)碼管,顯示第二位小數(shù)cntq2</p><p><b>  begin</b></p&g

94、t;<p>  scan<=8'B00000010;</p><p>  Dat<=cntq2;</p><p><b>  end</b></p><p>  4'b0111: //選通第8個(gè)數(shù)碼管,顯示第三位小數(shù)cntq1</p><p><

95、;b>  begin</b></p><p>  scan<=8'B00000001; </p><p>  Dat<=cntq1; </p><p><b>  end</b></p><p>  4'b1000: //這個(gè)狀態(tài)和鍵盤(pán)有關(guān)<

96、/p><p><b>  begin</b></p><p>  scan<=8'b00010000; //鍵盤(pán)的鍵值都在第四個(gè)數(shù)碼管顯示</p><p>  if((out <= 9) && (out >= 0))</p><p><b>  begin</b&

97、gt;</p><p>  Dat<=out; //顯示數(shù)字鍵的鍵值</p><p>  if(hh==1) //代表A鍵按下去且數(shù)字鍵按下的次數(shù)少于3</p><p><b>  begin</b></p><p>  case(cnt2) //A鍵按下后按數(shù)字鍵的順序</p><p&g

98、t;  1:threshold[2]<=out; //存儲(chǔ)第一個(gè)數(shù)字鍵</p><p>  2:threshold[1]<=out; //存儲(chǔ)第二個(gè)數(shù)字鍵</p><p>  3:threshold[0]<=out; //存儲(chǔ)第三個(gè)數(shù)字鍵</p><p><b>  endcase</b></p><p&g

99、t;  if(cnt2==3) //當(dāng)按下三個(gè)數(shù)字鍵之后,</p><p>  //計(jì)算出閾值,存儲(chǔ)到sm中,</p><p>  begin //與當(dāng)前輸出值比較</p><p>  sm=threshold[2]*100+threshold[1]*10+threshold[0];</p><p><b>

100、;  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  default:</b></p><p&g

101、t;<b>  begin</b></p><p>  scan<=8'B11111111; </p><p>  Dat<=4'B0000;</p><p><b>  end </b></p><p><b>  endcase</b><

102、/p><p><b>  end</b></p><p>  ///////////////////////////////////////////////////////鍵盤(pán)部分//////////////////////////////////////////////////////</p><p>  always@ (posedge clk

103、1)</p><p>  if(!reset) //reset鍵連接的是第一個(gè)撥碼開(kāi)關(guān)</p><p>  begin //當(dāng)reset鍵為低電平時(shí),初始化</p><p><b>  state1=0;</b></p><p>&

104、lt;b>  cnt2=0;</b></p><p><b>  end</b></p><p>  else //初始化之后,將撥碼開(kāi)關(guān)設(shè)為高電平,則程序往下</p><p>  case(state1) //執(zhí)行,否則一直都在初始化,鍵盤(pán)部分就是小了</p><

105、;p>  0:begin //判斷是否所有的鍵都松開(kāi)了,是則轉(zhuǎn)向1, </p><p>  x = 4'b0000; //否則循環(huán)檢測(cè)</p><p>  if(y != 4'b1111) state1 = 0;</p><p><b>  else </b></p><p&

106、gt;<b>  begin</b></p><p>  keypress = 0; </p><p>  count = 0;</p><p>  state1 = 1;</p><p><b>  end</b></p><p><b>  end</b&

107、gt;</p><p><b>  1:begin</b></p><p>  x = 4'b0000; //向四列輸出低電平,掃描是否有鍵按下</p><p>  if(y == 4'b1111) state1 = 1;</p><p><b>  else</b><

108、/p><p><b>  begin</b></p><p>  keypress = 1;</p><p>  count = count + 1;</p><p>  if(count == 30) //掃描到有鍵按下,消抖30ms, </p><p><b>  begin &

109、lt;/b></p><p>  state1 = 2; //確認(rèn)有鍵按下之后轉(zhuǎn)向2,</p><p>  cnt2=cnt2+1; //按鍵計(jì)數(shù)器cnt2+1</p><p>  if(cnt2 > 3) //按鍵次數(shù)大于3次之后,</p><p>  hh=0; //不存儲(chǔ)之后的鍵值</p>

110、;<p><b>  end</b></p><p><b>  else</b></p><p>  state1 = 1; //如果沒(méi)鍵按下,循環(huán)掃描</p><p><b>  end</b></p><p><b>  end&

111、lt;/b></p><p><b>  2:begin </b></p><p>  x=4'b0111; //掃描第一列,轉(zhuǎn)向3</p><p><b>  state1=3;</b></p><p><b>  end</b></p&

112、gt;<p><b>  3:begin</b></p><p>  case(y) //用來(lái)判斷第一列是否有鍵按下</p><p>  4'b1111: //第一列沒(méi)鍵按下,轉(zhuǎn)向4,掃描第二列</p><p><b>  begin</b></p>

113、<p><b>  state1=4;</b></p><p><b>  end </b></p><p><b>  4'b1110:</b></p><p><b>  begin</b></p><p>  state1=0;

114、 //0</p><p><b>  out=0; </b></p><p><b>  end</b></p><p><b>  4'b1101:</b></p><p><b>  begin</b></p><p&g

115、t;  state1=0; //4</p><p><b>  out=4; </b></p><p><b>  end </b></p><p><b>  4'b1011:</b></p><p><b>  begin</b><

116、/p><p>  state1=0; //8</p><p><b>  out=8; </b></p><p><b>  end </b></p><p><b>  4'b0111: </b></p><p><b>  beg

117、in</b></p><p>  state1=0; //C</p><p><b>  out=12; </b></p><p><b>  end </b></p><p><b>  endcase</b></p><p><

118、;b>  end</b></p><p><b>  4:begin </b></p><p>  x=4'b1011; //掃描第二列 </p><p><b>  state1=5;</b></p><p><b>  end </b&

119、gt;</p><p><b>  5:begin</b></p><p><b>  case(y)</b></p><p>  4'b1111: //第二列沒(méi)鍵按下,轉(zhuǎn)向6,掃描第三列</p><p><b>  begin</b></p>

120、;<p>  state1=6; </p><p><b>  end</b></p><p><b>  4'b1110: </b></p><p><b>  begin</b></p><p>  state1=0; //1 </p>

121、<p><b>  out=1; </b></p><p><b>  end</b></p><p><b>  4'b1101: </b></p><p><b>  begin</b></p><p>  state1=0;

122、 //5</p><p><b>  out=5; </b></p><p><b>  end</b></p><p><b>  4'b1011:</b></p><p><b>  begin</b></p><p>

123、  state1=0; //9</p><p><b>  out=9; </b></p><p><b>  end </b></p><p><b>  4'b0111:</b></p><p><b>  begin</b></p&

124、gt;<p>  state1=0; //D</p><p>  //out=13; //非數(shù)字鍵,鍵值不用顯示</p><p><b>  end</b></p><p><b>  endcase</b></p><p><b>  end </b>&

125、lt;/p><p><b>  6:begin </b></p><p>  x=4'b1101; //掃描第三列,轉(zhuǎn)向7</p><p><b>  state1=7;</b></p><p><b>  end </b></p><

126、p><b>  7: begin</b></p><p><b>  case(y)</b></p><p>  4'b1111: //第三列沒(méi)鍵按下,轉(zhuǎn)向8,掃描第四列</p><p><b>  begin</b></p><p><b>

127、;  state1=8;</b></p><p><b>  end </b></p><p><b>  4'b1110:</b></p><p><b>  begin</b></p><p>  state1=0; //2</p>&

128、lt;p><b>  out=2;</b></p><p><b>  end</b></p><p><b>  4'b1101:</b></p><p><b>  begin</b></p><p>  state1=0; //6&l

129、t;/p><p><b>  out=6;</b></p><p><b>  end</b></p><p><b>  4'b1011: </b></p><p><b>  begin</b></p><p>  stat

130、e1=0; //A鍵按下之后</p><p>  hh=1; //可以開(kāi)始存儲(chǔ)之后的數(shù)字鍵鍵值</p><p>  cnt2=0; //A鍵之前的按鍵數(shù)清零</p><p><b>  end </b></p><p><b>  4'b0111:</b></p>

131、<p><b>  begin</b></p><p>  state1=0; //E</p><p>  //out=14; //非數(shù)字鍵,不用顯示鍵值</p><p><b>  end </b></p><p><b>  endcase</b><

132、/p><p><b>  end</b></p><p><b>  8:begin </b></p><p>  x=4'b1110; //掃描第四列</p><p><b>  state1=9;</b></p><p>&

133、lt;b>  end </b></p><p><b>  9: begin</b></p><p><b>  case(y)</b></p><p>  4'b1111: //第四列也沒(méi)按鍵按下,返回</p><p><b>  begin&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論