# digital clock A1115530 劉柏均 A1115531 錢昱名 # 目標 使用BCD實現一個24小時制,有秒、分鐘、小時的時鐘 # 實現 JKFF ![](https://cdn.discordapp.com/attachments/1008682931734196287/1167035036348977203/image.png?ex=654ca913&is=653a3413&hm=c97b43ede8ee98a564625c88ce7b3ae9feac08b85ee428580636885b4c8d5899&) 先把JKFF轉成負緣觸發,等等會用到,依照JKFF的功能,來看看如何使用JK觸發器模擬一個計數器: 基本工作原理 設置(Set)模式:當J=1,K=0時,輸出Q變為1。 重置(Reset)模式:當J=0,K=1時,輸出Q變為0。 保持(Hold)模式:當J=0,K=0時,輸出Q保持不變。 翻轉(Toggle)模式:當J=1,K=1時,輸出Q會在每次觸發時從0變成1,或從1變成0。 我們這次止用到Toggle,所以直接接上VCC,我們觀察一下計數器的序列 00 01 10 11,最低位數只會0101變化,而高一個位數會在1變0的時候bit翻轉,這時候就用到負緣觸發了把輸出接上下一個JKFF,輸出從1變成0的時候,下一個計數器就會翻轉,等效於+1。 再來需要mod6 ,mod10的bcd,或是等價的功能。 BCD mod10 0b1010 把1,3==1的時候resetJKFF就是mod10了,而JKFF是0reset所以要用nand。 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1167034978396282890/image.png?ex=654ca905&is=653a3405&hm=da34d50532feb973e2a95d2973ecbcde720e4ce26d9d8ade4edfe6484ab57d80&) bcd mod6 0b110 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1167035096025538620/image.png?ex=654ca921&is=653a3421&hm=6ab780e85c029678137758dd8bc04267e354e7ebbd76164175307a01bb289f38&) BCD mod24比較難,要左邊mod3,右邊要MOD10但是左邊2的時候右邊要MOD4 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1171987256844767293/image.png?ex=655ead30&is=654c3830&hm=cf43e510eba3695b50c54b7092e50e9985c193559d395e9f8a8711ef02a70aff&) 再把他們都接起來,一樣負緣觸發這就用到了,在前一個是最高電位的時候,突然被Reset變0就代表下一個BCD可以計數了。 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1167034908624039946/image.png?ex=654ca8f4&is=653a33f4&hm=0c513f3a98b9f3bb43606028789c9e7eb9bb1c1a5ee5cc95118692f04b0e38cd&) 所以是 ![](https://latex.vimsky.com/test.image.latex.php?fmt=svg&val=%255Cdpi%257B150%257D%2520%255Clarge%2520%255Cbegin%257Barray%257D%257Bcccccccccccccccccc%257D%2520%255Cmathbf%257BS_%257B12%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B11%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B10%257D%257D%2520%2526%2520%257C%2520%2526%2520%255Cmathbf%257BS_%257B03%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B02%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B01%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B00%257D%257D%2520%2526%2520%255Crightarrow%2520%2526%2520%255Cmathbf%257BS_%257B12%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B11%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B10%257D%257D%2520%2526%2520%257C%2520%2526%2520%255Cmathbf%257BS_%257B03%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B02%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B01%257D%257D%2520%2526%2520%255Cmathbf%257BS_%257B00%257D%257D%2520%255C%255C%25200%2520%2526%25200%2520%2526%25200%2520%2526%2520%257C%2520%2526%2520%255Cmathbf%257B1%257D%2520%2526%25200%2520%2526%25200%2520%2526%25201%2520%2526%2520%255Crightarrow%2520%2526%25200%2520%2526%25200%2520%2526%2520%255Cmathbf%257B1%257D%2520%2526%2520%257C%2520%2526%2520%255Cmathbf%257B0%257D%2520%2526%25200%2520%2526%25200%2520%2526%25200%2520%255C%255C%2520%255Cend%257Barray%257D&dl=0) 繼續計數下去。 # 模擬結果 ## 秒區 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1171996000873885716/image.png?ex=655eb555&is=654c4055&hm=fe5f5cd14ef0cb471be0faf94cfc0cd16968931d50d14a8be5244cb553b7fc5e&) 在圖上可以看到最下方的秒個位數$S_0$從0數到9後reset成0,秒十位數S1+1,直到S1數到5 S0數到9兩個都reset,分鐘個位數+1。 ## 分鐘區 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1171996224333828178/image.png?ex=655eb58a&is=654c408a&hm=69bc83bc7250828ebfced46e2f050dc917573199b1f39cfef12f665b47cf10f2&) 在圖上可以看到最下方的分鐘個位數$S_0$從0數到9後reset成0,分鐘十位數S1+1,直到S1數到5 S0數到9兩個都reset,小時個位數+1。 ## 小時區 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1171987180583927870/image.png?ex=655ead1e&is=654c381e&hm=75ec33336e2e9e4347e34b0c023cb804eefe4802855a5856541cff32c9eadb52&) 在圖上可以看到最下方的小時個位數S0從0數到9後reset成0,小時十位數S1+1,直到S1數到2 S0數到3兩個都reset,然後全部包括分鐘、秒鐘都reset成00 00 00 ![](https://cdn.discordapp.com/attachments/1008682931734196287/1174367500851478638/image0.png?ex=656755f6&is=6554e0f6&hm=bf13b82c73b15ec3b92f7a7f7c2f51dc14a328b8c6448dd44af8524e4694f354&) 因為加上秒數移動後,一定會崩潰就先省略了 ## 討論 在模擬波形圖過程中,我們面臨了計數太大的問題,電腦會跑超級慢,讓debug時間拉很久,但是我們也學會了分開來,小時區、分鐘區、秒區分開模擬debug,這真的很花時間 # References chatGPT4 debug