一片果林的成熟季節又到了,大批量的水果就要和買(mai) 主交易,然而,買(mai) 主來收購之前給農(nong) 戶出了一個(ge) “難題”:將1000個(ge) 水果事先放在10隻籮筐裏,待其到來時如果能整筐整筐地搬出來並湊夠臨(lin) 時指定的數量,買(mai) 賣照做還堅持長期合作;如果做不到,預約好的買(mai) 賣取消,今後也不來打交道了。
題目出得很巧妙,我一想想不出來就查看答案,原來是一個(ge) 跟二進製數相關(guan) 的問題,第一個(ge) 籮筐裝1個(ge) ,第二個(ge) 箱子裝2個(ge) ,後麵的籮筐的數量都是前一個(ge) 籮筐的一倍(最後一個(ge) 除外),所以各個(ge) 籮筐的數量分別為(wei) :1、2、4、8、16、32、64、128、256和489,這樣的話就可以任意取出所需的數量了。一看答案,驚歎二進製數的神奇之處,竟然能這樣任意表達出所需的數量。
二進製時鍾誕生記
正好這幾天研究著用DS1302時鍾芯片和單片機製作一個(ge) 時鍾,突然想到,既然二進製能用“10個(ge) 箱子”任意取出“1000內(nei) 的數”,那麽(me) 是否可以製作出一個(ge) 跟二進製數相關(guan) 的時鍾呢?當兩(liang) 種思維結合在一起的時候,就可以產(chan) 生出很多有趣的事情來。這麽(me) 一來,就很自然地想出了製作一個(ge) 二進製時鍾,但是用什麽(me) 方式來顯示呢?看到手頭上有多種顏色的LED燈,於(yu) 是想到就用發光二極管唄,燈亮就是“1”,燈滅就是“0”,一排LED的亮就形成一個(ge) 二進製數,從(cong) 而讀出相應時間。這個(ge) 想法讓我興(xing) 奮不已,於(yu) 是我開始著手單片機的編程,用單片機把在DS1302上取出的時間的BCD碼轉換成10進製數直接放在一組I/O口上麵,單片機會(hui) 自動把十進製數轉換成以1和0表示的數放在一組的8個(ge) I/O口上,這樣一來,在相應I/O口上連接LED燈就能顯示出“時間”來了。由於(yu) 小時最多為(wei) “24”,因此隻需要5個(ge) LED燈就可以完整表示,而“分”和“秒”部分要6個(ge) LED燈才能完整表示。
注意事項
因為(wei) 我們(men) 一般采取上拉電流方式接正極驅動LED燈, 輸出為(wei) “0”時LED燈亮,所以我們(men) 還要把取來的數進行取反放在相應組位,單片機C語言中的取反為(wei) “~”,例如取來的“秒”放在P1組口,就這樣表示:“P1=~miao”,用“~”號就可以輕易取反。
還有需要注意的地方是,我們(men) 平常讀數是從(cong) 左到右讀高位數到低位數,但是大多單片機的I/O口組是從(cong) 低位到高位的,因此我們(men) 製作時要特別注意焊接LED燈的順序,或者把單片機翻轉擺放就可以解決(jue) 這個(ge) 問題。
讀時鍾的方法
如題圖所示的每組數就是“10110”、“101011”、“100001”,在腦袋裏進行簡單的運算就可以得出時間為(wei) :“22:43:33”。科學發現,經常運算可以防止老年癡呆症^_^,因此,二進製時鍾就有了它的意義(yi) 所在了。