摘要 : 本設計是基于單片機的 LED 花樣照明 , 并附加時鐘設計 . 單片機也叫微控制器 ( Micro Control Unit, 簡稱 MCU ), 因其價格低廉 , 功能強大 , 在實際應用中得到廣泛認可 . 本設計的核心模塊是STC89C52RC 單片機 , 利用單片機驅動 74HC595 來實現 LED 心形花樣流水燈功能 , 驅動 DS1302 實現實時時鐘功能, 驅動 LCD12864 實現顯示時鐘 、 日期 、 節日等功能 .
關鍵詞 : STC89C52RC ; 74HC595 ; LCD12864 ; DS1302 ; LED
引言
為滿足大眾的審美需求,本文設計了一款既實用又美觀的 LED 花樣流水燈時鐘.這一款帶有心形花樣流水燈的時鐘在設計上充分考慮到需求者的心理,在設計時集成了多種功能,設計成品不死板,可以滿足大眾在選擇工藝品時的需求.
2 總體設計方案
利用 STC89C52RC 單片機的 P1.0~P1.2 三個引腳控制 74HC595 實現 LED 花樣照明功能、用P2.0~P2.2 三個引腳控制實時時鐘芯片 DS1302 實現電子時鐘的功能、用 P0 口、P2.3~P2.5 十一個引腳控制點陣圖形液晶顯示模塊 LCD12864 實現在LCD12864 上顯示年、月、日、星期、時、分、秒、節日及 附 加 功 能 .P1.3~P1.6 四 個 引 腳 接 四 個 按 鍵K1~K4. 其中 K1 控制 LED 花樣照明的閃爍模式,K2~K4 調節時間、日期.總體方案的框圖如圖 1 所示.

3 關鍵模塊介紹
3.1 單片機最小系統

能讓單片機在上電后正常工作所需要的最少器件組合而成的系統稱之為單片機最小系統.單片機最小系統中最關鍵的部分是單片機、時鐘電路和復位電路.單片機最小系統如圖 2 所示.
(1) 單片機:本文采用了宏晶公司生產的STC89C52RC 單片機,因其價格低廉,功耗較低,可 靠性高,無法解密等優點,已經在電子設計行業被廣泛采用.STC89C52RC 的工作電壓為直流 5V,其內部集成了 8 位 的 CPU、512B 的 RAM、8KB 的ROM、4個并行 8 線 I/O 端口、3類 6 個中斷源.單片機內部基本組成如圖 3 所示.

(2)時鐘電路:單片機的第 18 和第 19 引腳間跨接一個晶體振蕩器(簡稱晶振)來形成自激振蕩
器,從而產生脈沖并送入單片機內部時鐘電路.這樣就可以在單片機運行過程中產生唯一的單片機時序.
(3)復位電路:單片機在上電運行后單片機會處在一個不確定的初始狀態,這時就需要一個外部電路來讓單片機回到一個確定的初始狀態,并且從這個初始狀態開始工作.讓單片機從不確定的狀態回到初始狀態的過程稱為復位.
3.2?8位串入并出移位緩存器 74HC595
由于單片機的輸出端口有限,想要驅動 32 個LED 燈流水工作就會占用單片機全部的輸出端口,
不切實際. 因此就必須用外部電路進行端口擴展,以減少單片機端口的占用.用 74HC595 就可以只占用單片機的 3 個端口并實現 8 位輸出功能.本設計使 用 4 個 74HC595 的 級 聯 實 現 32 位 輸 出 .74HC595 共有 16 個引腳,引腳連線圖如圖 4 所示,其中 Q1~Q7 為并行輸出端,Q7' 為串行數據輸出端,MR 為復位端,SHcp 為 8 位存儲寄存器的時鐘信號,STcp 為 8 位移位寄存器的時鐘信號,CE 為使能端,Ds 為串行輸入端,Q0 為并行輸出端. 其功能表如表 1 所示.


3.3 LCD12864 液晶顯示
LCD12864 是一塊圖形點陣液晶顯示模塊,有128 個列點×64 個行點.顯示時每個英文字母占 16個行點 8 個列點,每個漢字占 16 個行點 16 個列點.LCD12864 在本設計中用來顯示輸出. 其中第一 行顯示重要節日,第二行顯示年、月、日,第三行顯示時、分、秒、星期,第四行顯示一句名言.LCD12864共有 20 個引腳,引腳連線圖如圖 5 所示,其中 V0 為 LCD 驅動電壓輸入端,RS 為并行的指令 / 數據選擇信號(低電平寫指令,高電平寫數據),R/W 是并行的讀寫選擇信號(低電平是寫,高電平是讀),E 為并行的使能信號,DB0~DB7 為并行數據輸入端,PSB 為并 / 串行接口(高電平是并行,低電平是串行),RST 為復位端,VOUT 為負壓輸出端.
3.4 實時時鐘 DS1302
DS1302 是 DALLAS 公司生產的一款帶涓流充電的計時芯片.可以計算年、月、日、時、分、秒、星期,直到 2100 年,并有閏年調節功能.DS1302 的VCC2 和 GND 引腳接電源正極和負極,當外部電源停止工作后 DS1302 的 8 引腳 VCC1 的備用電源會繼續給 DS1302 供電,這就解決了掉電后數據會丟失的困擾,這也是 DS1302 的優點之一.DS1302使用的是簡單的 3 線串行接口,接口容易,并且與單片機連線通信時占用單片機的端口少,可節省單片機有限的輸入輸出端口.DS1302 共有 8 個引腳,引腳連線圖如圖 6 所示,其中 RST 為使能信號,SCLK 為串行時鐘信號.

3.5 鍵盤
按鍵是單獨的一個按鈕,按鈕的一端接電源或地,按下按鈕后實現按鈕兩端電位相同的功能.本設計采用的是一端接地的獨立式鍵盤,共 4 個按鍵分別接在 P1.3~P1.6 引腳,每個按鍵實現不同的功能.其中按鍵 1 實現每按一下按鍵 LED 照明變化一個模式的功能,按鍵 2,3,4 實現調節時間、日期的功能。

本設計所用的按鍵開關為機械彈性開關.機械彈性按鍵開關在按下或松開時會有抖動,如圖 7 所示,抖動持續的時間非常短,一般只有 5~10ms 的時間,雖然這個時間非常短,卻不可忽視.這就要求用有效的方法來消除這個電位忽高忽低的抖動過程.我們可以通過編程時延時一段時間的方法來消除抖動.具體做法就是在按鍵按下后不是立即檢測按鍵的電位,而是讓單片機延時 5~10ms 的時間后再去檢測按鍵的電位,如果 5~10ms 后按鍵的電位仍為 0(按鍵另一端接地)則證明按鍵已經確實按下,反之則沒有按下.
4 程序設計及調試
4.1 LED 花樣照明部分的設計
在單片機上電工作后,LED 花樣流水燈一開始不工作,在按下 K1 鍵后 LED 花樣流水燈開始工作,此時 LED 花樣流水燈按模式一閃爍.如果不繼續按 K1,LED 花樣流水燈會一直按模式一閃爍.當再一次按下 K1 后,LED 花樣流水燈按模式二閃爍.如果不繼續按 K1,LED 花樣流水燈會一直按模式二閃爍. 再按下 K1 后會按模式三閃爍……一共有六種閃爍方式.其中第六種模式為全亮模式,在全亮模式后再按一次按鍵后進入全滅模式(即關閉模式).進入關閉模式后再次按下 K1 又會按模式一閃爍,以此循環.其中六種模式分別為:模式一:LED 燈從下往上依次點亮.
模式二:LED 燈從上往下依次點亮.
模式三:LED 燈從第一個開始依次點亮.
模式四:LED 燈從最后一個開始依次熄滅.
模式五:LED 燈從下往上依次交替點亮.
模式六:LED 燈全亮.
4.2 按鍵調時部分的設計
K2~K4 實現調節時間的功能.K2 按下后實現調節時間、日期的功能,按第一下實現調小時功能,按第二下實現調分鐘功能,按第三下實現調秒功能,按第四下實現調年功能,按第五下實現調月功能,按第六下實現調日功能,按第七下實現調星期功能,按第八下時鐘恢復工作,再按一下又實現調小時功能……如此反復.K3 實現調節時間 / 日期時的加 1 功能,即每按一次對應調節的時間 / 日期加1.K4 實現調節時間 / 日期時的減 1 功能,即每按一次對應調節的時間 / 日期減 1.
4.3 調試
電路焊接完成后,在調試的過程中遇到了以下兩個問題:
問題一:流水燈工作時,本不該亮的 LED 燈在其他 LED 燈亮滅變化的瞬間會有短暫的閃爍,而且是所有的不該亮的 LED 燈都閃爍.
問題二:當只有一個 LED 燈亮時,LCD12864的屏幕亮度正常;當 LED 燈亮的個數越來越多時LCD12864 的亮度會越來越暗;當 LED 燈全亮時,LCD12864 的亮度最暗;當 LED 燈都滅時或只有少數幾個 LED 亮時,LCD12864 的亮度恢復正常. 導致 LED 燈瞬間閃爍的原因是有浪涌電流,在 LED 燈和限流電阻串聯后的兩端并聯一個電容起到濾波和增加抗干擾的功能.在并聯電容后完美
解決了 LED 燈的瞬間閃爍問題.LED 燈全亮時LCD12864 屏幕變暗的原因是電流不夠,因為調試時用的是電腦上的 USB 口提供的電源,而電腦的USB 口輸出電流有限導致 LED 燈全亮時,沒有足夠大的電流來驅動 LCD12864.
5 總結
首先經過構思選定方案,把一個整體的設計進行模塊化拆分,各個模塊都設計好之后再進行整合得到最終的設計成果最終設計的原理圖見附圖 1.