該時鐘有四個模式
模式一:正常的時鐘,在此模式下可以修改時間(修改時間有bug,不能自己跳時間,例如可以調出25:00)
模式二:倒計時,倒計時結束后有鬧鈴,流水燈
模式三:鬧鈴,僅僅顯示鬧鈴
模式4:流水燈
PS:沒有驗證,這是 一個多月前做的。
感謝論壇一些大佬的指導。壓縮包內含設計報告,仿真圖,PCB工程,程序源碼。
摘要 學習輔助時鐘的idea主要來自于知乎的一個話題:用自己的專業知識做的小發明。看到有一位答主分享了自己舍友利用C語言編了一款“我要當學霸”應用程序,主要功能是設定時間提醒學習,并取得了不錯的效果。在羨慕計算機學生的編程能力之余我萌生了一個想法,利用自己學的51單片機來設計一個學習輔助時鐘,主要功能是時鐘顯示,定時學習,鬧鐘還有一個絢麗的LED流水燈,既可以用于輔助學習,還可以用作裝飾。時鐘源由外設的DS1302提供,顯示屏采用LCD1602,加上按鍵矩陣模塊用于調整時間,選擇單片機運行模式。
目錄 五邑大學電子設計大賽單片機組 摘要 目錄 1 學習輔助時鐘的總體布局 2 學習輔助時鐘各模塊設計原理 2.1 最小系統: 2.2 時鐘模塊: 2.2.1 時鐘芯片DS1302: 2.2.2 DS1302進行讀寫: 2.3 顯示屏LCD1602: 2.3.1 顯示屏1602液晶模塊引腳功能 2.4 鬧鐘鈴聲 2.5 基于74HC595流水燈 2.5.1 芯片74HC595工作原理 3 工作過程: 3.1 其控制程序如下: 3.2 lcd1602顯示程序: 3.3 流水燈程序: 4 功能介紹: 4.1 時鐘功能 4.2 鬧鐘功能 4.3 LED裝飾功能 5 參考文獻 6 程序附錄 1 學習輔助時鐘的總體布局圖1-學習輔助時鐘 圖2-系統控制結構框圖
2 學習輔助時鐘各模塊設計原理
2.1 最小系統:圖3-最小系統原理圖 2.2 時鐘模塊:2.2.1 時鐘芯片DS1302:圖4-時鐘模塊控制電路 圖4-DS1302芯片說明 美國DALLAS公司推出的具有涓細電流充電能力的低功耗實時時鐘電路DS1302的結構、工作原理及其在實時顯示時間中的應用。它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償等多種功能。美國DALLAS公司推出的具有涓細電流充電能力的低功耗實時時鐘電路DS1302的結構、工作原理及其在實時顯示時間中的應用。它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償等多種功能。 圖5-DS1302寄存器說明 1、秒寄存器(81h、80h)的位7定義為時鐘暫停標志(CH)。當初始上電時該位置為1,時鐘振蕩器停止,DS1302處于低功耗狀態;只有將秒寄存器的該位置改寫為0時,時鐘才能開始運行。 2、小時寄存器(85h、84h)的位7用于定義DS1302是運行于12小時模式還是24小時模式。當為高時,選擇12小時模式。在12小時模式時,位5是 ,當為1時,表示PM。在24小時模式時,位5是第二個10小時位 3、控制寄存器(8Fh、8Eh)的位7是寫保護位(WP),其它7位均置為0。在任何的對時鐘和RAM的寫操作之前,WP位必須為0。當WP位為1時,寫保護位防止對任一寄存器的寫操作。也就是說在電路上電的初始態WP是1,這時是不能改寫上面任何一個時間寄存器的,只有首先將WP改寫為0,才能進行其它寄存器的寫操作。 2.2.2 DS1302進行讀寫: 上面的電路圖可以看出,除了電源和接地,DS1302只有三根線和單片機連接,SCLK、I/O和RST(有的也寫成CE),先看時序圖: 圖6-DS1302讀寫時序圖 DS1302的數據讀寫是通過I/O串行進行的。當進行一次讀寫操作時最少得讀寫兩個字節,第一個字節是控制字節,就是一個命令,告訴DS1302是讀還是寫操作,是對RAM還是對CLOK寄存器操作,以及操作的地址。第二個字節就是要讀或寫的數據了。 我們先看單字節寫:在進行操作之前先得將CE(也可說是RST)置高電平,然后單片機將控制字的位0放到I/O上,當I/O的數據穩定后,將SCLK置高電平,DS1302檢測到SCLK的上升沿后就將I/O上的數據讀取,然后單片機將SCLK置為低電平,再將控制字的位1放到I/O上,如此反復,將一個字節控制字的8個位傳給DS1302。接下來就是傳一個字節的數據給DS1302,當傳完數據后,單片機將CE置為低電平,操作結束。 單字節讀操作的一開始寫控制字的過程和上面的單字節寫操作是一樣,但是單字節讀操作在寫控制字的最后一個位,SCLK還在高電平時,DS1302就將數據放到I/O上,單片機將SCLK置為低電平后數據鎖存,單機機就可以讀取I/O上的數據。如此反復,將一個字節的數據讀入單片機。讀與寫操作的不同就在于,寫操作是在SCLK低電平時單片機將數據放到IO上,當SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放數據到IO上,將SCLK置為低電平后,單片機就可從IO上讀取數據。 圖7-DS1302讀寫時序圖 位0就是讀寫位,當位0為1時,就是告訴DS1302,下面是進行讀出操作,而當位0為0時就是寫入操作。 位0-位5是要進行操作的DS1302寄存器地址。 位6就是告訴DS1302,是要對RAM進行操作還是對CLK寄存器進行操作,0就是對時間寄存器操作,一般我們都是對時間寄存器進行操作。 位7就是固定的1。為什么是1呢。還記得上面說的單字節讀操作嗎?在寫控制字的最后一個位也就是位7時,DS1302已將它的寄存器數據位0放到IO上了,要是控制字的位7是0的話,DS1302就無法將它的隨后的數據放到IO上了。 這也是為什么控制字80H是寫秒寄存器,而80H是讀秒寄存!80H換成二進制就是10000000。而81H的二進制就是10000001,一個是寫操作,另一個是讀操作! 2.3 顯示屏LCD1602:LCD1602是一種工業字符型液晶,能夠同時顯示16x02即32個字符。LCD1602液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區域進行控制,即可以顯示出圖形。 圖5-穩壓芯片 2.3.1 顯示屏1602液晶模塊引腳功能表1-各引腳接口說明 第1腳:VSS為地電源。 第2腳:VDD接5V正電源。 第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。 第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。 第7~14腳:D0~D7為8位雙向數據線。 第15腳:背光源正極。 第16腳:背光源負極。 表2-各指令說明 1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平) 指令1:清顯示,指令碼01H,光標復位到地址00H位置。 指令2:光標復位,光標返回到地址00H。 指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。 指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標。 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。 指令7:字符發生器RAM地址設置。 指令8:DDRAM地址設置。 指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。 指令10:寫數據。 指令11:讀數據。 2.4 鬧鐘鈴聲聲音是通過振動產生的。單片機對某一引腳以一定的頻率循環置1置0,該引腳便產生一定頻率的方波,方波通過放大,作用于一定的物理實件(蜂鳴器),就產生了一定頻率的聲音。若改變輸出方波的頻率,產生的聲音隨之改變。通過控制輸出方波的時間長短,聲音的長短也可以得到控制,因此,根據樂譜,以類似的音及同樣的節拍,單片機就可以產生電子音樂。音樂的播放選擇可以通過按鍵的輸入得以實現。 為簡便起見,以一定的頻率方波產生的音在其每個周期內高低幅值得時間各占一半因此,輸出引腳在每個方波周期內要動作兩次:一次升高,一次降低。即輸出引腳的頻率是原音頻率的兩倍。 方波的產生由定時器控制。定時器T0工作在定時方式1,改變TH0及TL0,產生不同的音頻頻率。必須考慮到中斷響應時間的影響,尤其在高音部分,若忽略中斷響應時間,會使音頻頻率比標準值低幾十Hz,相當于1/4音程,很容易聽出來,對低音部分影響不大。一般中斷響應時間為3~6個機器周期,經過反復試驗取5個機器周期作為校正最為恰當,表1中所給的定時初值就是考慮中斷響應后的定時常數。另外,為避免T1中斷可能引起雜音,應將定時器T0中斷設為高優先級。這樣編寫出來的程序播放的音與標準音叉進行差頻校音,非常準確和諧。 在音樂中使用的各個固定頻率的音叫音級。常用符號C、D、E、F、G、A、B、c、d、e、……a1、b1、c2、d2……表示,它們對應于鋼琴上的白鍵。兩音之間音高的距離叫音程。在上述音級中,E與F、B與C之間音高的距離僅為其它相鄰音級之間距離的一半,稱它們之間的音程為半音音程,而稱其它相鄰各音之間的距離為全音音程。在這些全音音程之間又加入新的半音音級,用符號﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,對應于鋼琴上的黑鍵。音持續時間的長短即時值,一般用拍數表示。休止符表示暫停發音。
2.5 基于74HC595流水燈2.5.1 芯片74HC595工作原理74HC595可以將單片機的串行輸入轉換為并行輸出,因此可以大大降低單片機I/O口的使用率,節省硬件資源,簡化硬件電路,降低生產成本,操作方便。 74HC595的引腳功能及主要性能參數
74595的控制端說明: MR (10腳): 低點平時將移位寄存器的數據清零。通常將它接Vcc。 SHCP (11腳):上升沿時數據寄存器的數據移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數據不變。(脈沖寬度:5V時,大于幾十納秒就行了。我通常都選微秒級) STCP (12腳):上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。通常我將STCP置為低點平,當移位結束后,在STCP端產生一個正脈沖(5V時,大于幾十納秒就行了。我通常都選微秒級),更新顯示數據。 OE (13腳): 高電平時禁止輸出(高阻態)。如果單片機的引腳不緊張,用一個引腳控制它,可以方便地產生閃爍和熄滅效果。比通過數據端移位控制要省時省力。 74HC595時序圖 3 工作過程: 開機先時鐘初始化,等待按鍵掃描選擇運行功能,通過掃描矩陣電平變化確定哪個按鍵按下,從而運行相對的功能。工作狀態也可以選擇模式,可以從當前運行模式換到別的模式。 4 功能介紹:4.1 時鐘功能提供年份日期星期24小時格式時間顯示,初始化后可以設置時間,選擇模式一后可設置,通過對應按鍵加減調整時鐘。 4.2 鬧鐘功能初始化的鬧鐘為45分鐘倒計時,可以根據按鍵調整倒計時時間,時間到了會發出鬧鐘鈴聲,燈光閃爍,可以通過按鍵停止提醒。 4.3 LED裝飾功能通過按鍵選擇裝飾功能,LED燈展示不同樣式的亮燈模式
結束語第一次設計單片機作品,用的是51單片機,程序寫起來不難,感覺復雜而且多,運行功能的程序函數基本上都是要編寫的,能夠調用的函數很少。程序修改了很多遍,一次又一次的試錯,最終完成了最后的程序。這個過程需要耐心,更需要扎實的c語言基礎。因為基礎不過關,需要的耐心就更多了,好在我們都克服了這兩個困難。時間上的緊迫也是我們面臨的一大問題,在進行這個比賽設計的同時,我們還有兩門課程設計需要進行,時間基本上重疊,為了平衡時間,我們不得不放棄了原先的一些設想,比如倒計時時間可以通過鍵盤輸入,增設單片機播放mp3功能,設計心形流水燈,時間的緊迫讓我們沒有辦法進行更多的開發。好在還是很滿意最后的作品,雖然功能不多,當時很實用,可以用來督促學習,作為學習輔助,能夠完成自身的任務。
全部資料51hei下載地址: |