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