數(shù)據(jù)分配器
能夠?qū)?個輸入數(shù)據(jù),根據(jù)需要傳送到m個輸出端的任何一個輸出端的電路,叫做數(shù)據(jù)分配器,又稱為多路分配器,其邏輯功能正好與數(shù)據(jù)選擇器相反。電路結(jié)構(gòu):由與門組成的陣列。分類:1路-4路數(shù)據(jù)分配器(如74LS139)、1路-8路數(shù)據(jù)分配器(74LS138)等。由于譯碼器和數(shù)據(jù)分配器的功能非常接近,所以譯碼器一個很重要的應(yīng)用就是構(gòu)成數(shù)據(jù)分配器。 也正因?yàn)槿绱耍袌錾蠜]有集成數(shù)據(jù)分配器產(chǎn)品,只有集成譯碼器產(chǎn)品。
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-8所示;
譯碼器
譯碼器是一個多輸入、多輸出的組合邏輯電路。它的工作是把給定的代碼進(jìn)行“翻譯”,變成相應(yīng)的狀態(tài),使輸出通道中相應(yīng)的一路有信號輸出。譯碼器在數(shù)字系統(tǒng)中有廣泛的用途,不僅用于代碼的轉(zhuǎn)換、終端的數(shù)字顯示,還用于數(shù)字分配,存儲器尋址和組合控制信號等。譯碼器可以分為通用譯碼器和顯示譯碼器兩大類。在電路中用的譯碼器是共陰極譯碼器74LS48,用74LS48把輸入的8421BCD碼ABCD譯成七段輸出a-g,再由七段數(shù)碼管顯示相應(yīng)的數(shù)。
通過QuartusII軟件進(jìn)行編譯后,仿真結(jié)果如圖3-11所示;
分頻器
分頻器的作用是將由石英晶體產(chǎn)生的高頻信號分頻成基時鐘脈沖信號和擴(kuò)展部分所需的頻率。在此電路中,分頻器的功能主要有兩個:一是產(chǎn)生標(biāo)準(zhǔn)脈沖信號;二是功能擴(kuò)展電路所需的信號,如仿電臺用的1KHz的高頻信號和500Hz的低頻信號等。可以組成二分頻電路和四分頻電路和十六分頻器。
打包后成元器件如圖3-12所示;
鬧時器
數(shù)字鐘在指定的時刻發(fā)出信號,或驅(qū)動音響電路“鬧時”;或?qū)δ逞b置的電源進(jìn)行接通或斷開“控制”。不管是鬧時還是控制,都要求時間準(zhǔn)確,即信號的開始時刻與持續(xù)時間必須滿足規(guī)定的要求。在這里將舉例來說明它的工作原理。要求上午7時59分發(fā)出鬧時信號,持續(xù)1分鐘。設(shè)計如下:
在電路圖中用到了4輸入二與非門74LS20,集電極開路的2輸入四與非門74LS03,因OC門的輸出端可以進(jìn)行“線與”,使用時在它們的輸出端與電源+5V端之間應(yīng)接一電阻RL。RL的值由下式?jīng)Q定:
鬧時器程序代碼;
module nsdl(out,m1,m2,h1,h2,tenh,oneh,tenm,onem,clk1k,cin);
output out;
input[3:0] m1,m2,h1,h2,tenh,tenm,oneh,onem; input cin, clk1k;
reg out;
always @(m1 or m2 or h1 or h2 or tenh or tenm or oneh or onem or cin) begin
if(cin) out《=0; else if(cin==0) begin
if(tenh==h1&&oneh==h2&&tenm==m1&&onem==m2) out《=clk1k; else out《=0; end end
endmodule
打包后成元器件如圖3-13所示;
報時器
(一)功能要求
報時的功能要求是:每當(dāng)數(shù)字鐘計時快要到正點(diǎn)時,通常按照4低音1高音的順序發(fā)出間斷聲響,以最后一聲高音結(jié)束的時刻為正點(diǎn)時刻。
? ? ? (二)該電路的工作原理
電路圖的工作原理舉例來說明;例如設(shè)4聲低音(約500Hz)分別 在59分51秒、53秒、55秒及57秒,最后一聲高音(約1000Hz)發(fā)生在59秒,它們的持續(xù)時間為1秒。只有當(dāng)分十進(jìn)位的Q2M2Q0M2=11,分個位的Q3M1Q0M1=11,秒十位的Q2S2Q0S2=11及秒個位的Q0S1=1時,音響電路才能工作。
(三)對該電路中使用的元件的介紹
因?yàn)樵谠撾娐分兴玫脑饕?4LS00、74LS04及74LS20這些元件在前面的
電路中已經(jīng)介紹。這里就不再介紹它了
報時器程序代碼;
module baoshi(tenm,onem,tens,ones,q500,q1k,a,b); input a,b;
input [3:0]tenm,onem,tens,ones; output q500,q1k; reg q500,q1k;
always @(tenm or onem or tens or ones) begin
if ({tenm,onem}==8‘h59&&{tens,ones}==8’h50||{tenm,onem}==8‘h59&&{tens,ones}==8’h52|| {tenm,onem}==8‘h59&&{tens,ones}==8’h54||{tenm,onem}==8‘h59&&{tens,ones}==8’h56|| {tenm,onem}==8‘h59&&{tens,ones}==8’h58) q500《=a; else q500《=0; end
always @(tenm or onem or tens or ones) begin
if ((tenm[3:0]==0000&&onem[3:0]==0000)&&(tens[3:0]==0000&&ones[3:0]==0000)) q1k《=b; else q1k《=0; end
endmodule
打包后成元器件如圖3-14所示;
數(shù)字鐘原理圖
將各模塊組合一起構(gòu)成如圖3-15所示:
軟件調(diào)試的過程據(jù)功能的增加分為幾步:
首先,根據(jù)原來的100進(jìn)制顯示程序的基礎(chǔ)上編寫成時分秒六位顯示的主程序。該程序?qū)r分秒分成個位和十位分別計算,所以將60進(jìn)制和24進(jìn)制變成10進(jìn)制、6進(jìn)制和2進(jìn)制。又因?yàn)槿绻麜r十位為2的話,不能大于3,所以在分十位向時個位進(jìn)位時得判斷時十位是否為2,在組員的幫助下經(jīng)過不斷試驗(yàn)和修改終于完成。過程比較順利。
該電子鐘使用一個鍵來調(diào)時,利用長按來選擇所要調(diào)的位,用短暫按下來對位進(jìn)行加1,前提是時鐘暫停,這個功能也是通過長按來實(shí)現(xiàn)的。選位是從秒個位到時十位依次選取,但到時十位以后就回不到秒個位了,就是不會循環(huán)。所以就得對選的位進(jìn)行檢查,如果到了時十位再按取位鍵就重新賦給秒個位地址。這樣就可以循環(huán)選位了。但在后來的測試中又有了新的問題,如果該位到了9,對一個位進(jìn)行加1調(diào)整就會顯示亂碼。時分秒的十位都會調(diào)到9!
對于這個問題費(fèi)看一些周折。起先構(gòu)思再加一個減一的鍵,但不但沒有解決這個亂碼問題而且減到了0一下很可能也會出現(xiàn)亂碼。所以就轉(zhuǎn)而尋求程序解決。調(diào)時的時候讓它也像正常運(yùn)行的時候進(jìn)位?沒見過這樣的。繼而決定在進(jìn)行加1調(diào)時的時候檢測該位是否到10或6或3。所以就產(chǎn)生了所謂的調(diào)時比較子程序,就是在調(diào)時的時候?qū)⒃撐桓?0或6或3比較。最后,調(diào)試的時候卻總是出現(xiàn)這樣的情況:所調(diào)的位超過了9或5或2就變成亂碼。比原來進(jìn)步的地方就是時分秒的十位不用超過9就變成亂碼。這說明雖然還沒成功,但還是有前展的。就繼續(xù)調(diào)試。
評論