蜂鳴器源代碼(無源蜂鳴器代碼)
前沿拓展:
蜂鳴器源代碼
在我的博客里有比較規范的ds18b20溫度測量程序,你可看一下,也許有幫助。對于你的具體要求,你要改寫一下程序。
ELEJ-CDC1是一款創意型數字時鐘(即Creative Digital Clock)。之所以說它是創意制作,其實就是使用常規的數碼管和常見元器件,實現通常時鐘具備的功能的同時,還通過硬件改進和軟件設置,巧妙實現通常時鐘不具備的功能——人性化用戶體驗。
時鐘太常見了,是生活中極其普通的物品之一,我們只需瞧一下鐘,就能說出時間,而且我們也把這看成是很自然的事情。功能完善的時鐘可以計時間(Clock)和日期(Calendar),即年、月、星期、日、時、分和秒的實時參數。時鐘有很多種,按照不同的分類標準可以分為不同的類型,對于按照模擬數字量分為傳統的模擬時鐘和數字時鐘,這里主要分析一下數字時鐘。
數字時鐘可以由模塊化的時鐘電路實現,可以由數字門電路+時鐘發生電路實現,也可以由控制器(單片機)+定時器實現,還可以由控制器+RTC芯片實現等,其實這里也不用“等”了,因為似乎沒有其他方法了。你可能會說從網上下載一個時鐘軟件不也是嘛,哈哈,告訴你吧,其實這樣的軟件用的時鐘信號是你計算機主板上的RTC芯片時鐘或者集成在某個大規模集成電路內部的RTC模塊提供的。
RTC即為實時時鐘,它是可提供時間(通常也提供日期)的時鐘器件。RTC通常包含一個可長期供電的電池,即使在沒有電源供電的情況下也可以保持時間的跟蹤。
有很多著名廠商和很多著名的RTC芯片,玩單片機的應該沒有不知道DS1302、DS12887和PCF8523等芯片的;RTC著名廠商有很多,比如Maxim(美信〈達拉斯半導體〉)、NXP(恩智浦)、Intersil(英特矽爾)等。筆者曾經使用過美信的DS3231用作智能電表的時鐘計量,調過英特矽爾的ISL12022M,DS3231和ISL12022M,它們都集成了晶體振蕩器,精度極高,且外圍電路十分簡單,基本無需外圍元器件,其實DS3231和ISL12022M的功能也很相似、性能也差不多。恩智浦的RTC芯片有很多款,比如本文要介紹的ELEJ-CDC1,使用的是PCF8523。PCF8523性能很不錯,使用的是I2C總線與控制器連接,且是高速I2C總線(Fm+),可以達到1MHz,在某些實時性要求極高的系統中非常適用。常見的PCF8523有SO8和TSSOP14封裝,TSSOP14引腳間距較小,引腳排列很密,不容易焊接,大家可以選擇SO8封裝的,容易焊接。
制作實時時鐘非常有趣,可以同時學會很多與界面顯示相關的技術、控制器接口技術、數字處理技術和按鍵功能實現技術等,對于各種智能家用電器的顯示界面設計有參考意義,例如冰箱、洗衣機、電磁爐等的顯示界面。關于實時數字顯示器件的選擇,可以是LED、數碼管、點陣屏、LCD等,實際學習可以逐個調試掌握、真正搞懂,然后獨立開發基于控制器的項目就不成問題了。(不騙你,真的!)
現在,我們就一起開始制作吧!
ELEJ-CDC1硬件原理ELEJ-CDC1由6個模塊電路構成:電源電路、控制器電路、RTC電路、數碼管電路、蜂鳴器電路和按鍵電路,其中電源電路、數碼管電路、蜂鳴器電路和按鍵電路與ELEJ-IDBC1智能數字電池充電器設計中的電路設計方法和電路原理一樣,只是數碼管在實際的排列時有所不同,而且數碼管選用的是1位的8段式數碼管。
下面主要介紹控制器電路、RTC電路和特殊處理的數碼管電路。
為了大家的制作方便,這個制作仍然使用STC的51控制器,ELEJ-CDC1使用的控制器型號為STC15F204EA,用DIP-20封裝,電路連接如圖1.1所示。STC15F204EA內部高精度R/C時鐘,常溫下溫漂5‰,時鐘從5~35MHz可選,這樣我們就無需再外置晶體振蕩器了。實際焊接在“洞洞板”上如圖1.2所示。
RTC芯片用NXP的PCF8523時鐘芯片,PCF8523電路圖如圖1.3所示。
圖1.3中電阻R11、R16和R17是上拉電阻,因為PCF8523的INT2、INT1/CLKOUT引腳都是開漏輸出,所以必須上拉,此外,SDA和SCL也必須上拉。仔細看看圖1.3,你會發現在+5V電源和PCF8523的VDD之間接了VD5、R15和C6,有什么用,不接可以嗎?很多時鐘芯片都不接的呀!說說原因吧:仔細閱讀PCF8523數據手冊的典型應用一節,你會發現它提供的典型應用電路連接有R15和C6,它倆的作用是限制VDD的壓擺率,如果VDD下降得過快,就不能確保內部電路可靠切換到備用電池供電;二極管VD5是為了防止電源反接燒壞PCF8523TS,PCF8523TS不便宜啊,燒的是錢呢!
注 :電壓轉換速率(Slew Rate),簡寫為SR,簡稱壓擺率,其定義是在1μs或者1ns的時間里電壓升高的幅度,直觀上講就是方波電壓由波谷升到波峰所需時間,單位通常有V/s、V/ms、V/μs和V/ns四種。電壓轉換速率用示波器就可以測量。
我使用的是TSSOP14封裝的,由于芯片引腳很密,所以我腐蝕了一塊轉接板,實物如圖1.4所示。注意:在制作中你可以使用SO8封裝的,無轉接板也可以焊接。
圖1.1 控制器電路
圖1.2 控制器實物圖
圖1.3 PCF8523電路圖
圖1.4 PCF8523腐蝕板
圖1.5 PCF8523腐蝕板焊接實物
焊接上芯片,通電藍色LED點亮,如圖1.5所示。
數碼管電路如圖1.6所示。其實仔細看看原理圖,和通常使用的電路沒有任何區別,其實就是驅動電路的設計。
圖1.6 數碼管電路圖
與通常使用不同的是數碼管的放置方式。如何實現顯示功能,以下詳細說明一下。
對于動態掃描顯示技術,幾乎每本書、每個資料都會說“動態顯示是多個數碼管交替顯示,利用人的視覺暫留作用,使人看到多個數碼管同時顯示。在編程時,需要輸出段選和位選信號,位選信號選中其中一個數碼管,然后輸出段碼,使該數碼管顯示所需要的內容,延時一段時間后,再選中另一個數碼管,再輸出對應的段碼,高速交替。”如果你是初學者,肯定感到有點迷惑!
那我就用圖來說明一下吧!動態掃描最根本的原理如圖1.7所示。
圖1.7 數碼管動態掃描原理
4個數碼管輪流顯示一遍為一個周期T,即4個顯示ton之和,且由于每個顯示時間一樣,也即T=4×ton,在軟件實現手段上,我用的是定時器中斷,這樣便于main函數處理多個任務。使用的數碼管為共陽極的,所以ton時間數碼管的位引腳為低電平(以數碼管DS1為例:當LED_COM1=0,三極管導通,DS1選通,此時如果有段碼數據加到A-H引腳,則DS1顯示),即數碼管顯示,數碼管會按照300μs的時間輪流循環顯示,即:數碼管1→數碼管2→數碼管3→數碼管4→數碼管1……無限循環往復,由于“數碼管1→數碼管2→數碼管3→數碼管4”僅需要1200μs,即掃描頻率833Hz,我們眼睛是分辨不出它們是在逐個顯示的,我們可以看到的是每個數碼管都完整顯示。如果,你想仔細看看所謂的“掃描”是啥,你可以把T選得大一些,對應的ton=T/4也大些,那樣你就會看到數碼管逐個顯示,顯示的界面會讓你感覺很不舒服(一個接一個地閃爍顯示)。
圖1.8 ELEJ-CDC1數碼管實物
圖1.9 ELEJ-CDC1整機焊接面實物圖
總結一下:我們調試數碼管,說白了就是調試T(根據實際調試數據ton≈1ms時,顯示效果也很不錯,當然是越小越好了;掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感),此外還要注意以下兩個問題。
(1)所謂的“消隱”問題,當你更新顯示的“段”的時候,顯示的位置還是在前一時間的“位”上;然后你再更新“位”,這就出現移動的效果了。解決方法:顯示下一位時先讓數碼管熄滅;在位的數碼顯示前,先關閉一下數碼管,這樣方可消除拖尾現象。
(2)驅動要足夠,例如,我在使用數碼管時均使用了三極管驅動,盡管STC控制器I/O口可以配置為推挽輸出,但是為了便于硬件移植,即51控制器通用,還是加了驅動,在實際制作調試時,你也可以選擇用STC控制器直接驅動。
ELEJ-CDC1創意數字時鐘數碼管實物如圖1.8所示,焊接面如圖1.9所示。
軟件設計思路這里我直接用文字敘述:在沒有任何認為“干預”ELEJ-CDC1的情況下,ELEJ-CDC1從用戶接通電源起,工作步驟(也就是軟件執行過程)為控制器初始化、某些系統參數初始化→配置PCF8523、獲取RTC數據(通過I2C接口讀取)→處理RTC數據,處理結果暫時存儲在控制器緩存中→通過定時器中斷技術使控制器緩存中的RTC數據顯示在數碼管上→再讀取新的RTC數據,處理數據,實時顯示……就這樣只要用戶不斷電,ELEJ-CDC1就會“不知疲倦”地重復實時顯示RTC的實時數據。
然而,RTC芯片內部的數據在上電時,一般不會是當前的時間,怎么辦呢?一般人都知道重新校準時間。其實,從PCF8523角度來看,就是重新向PCF8523內部時鐘寄存器內寫入數據,覆蓋掉原始的不是當前時間的數據,然后PCF8523就從新的時間數據開始計時(時鐘源就是那個32768Hz的晶體振蕩器)。這樣,自然就需要一個校時程序,而且這個校時程序塊不是一直運行,只有用戶需要時才啟動,所以就需要一個開關。開關?你可能會驚訝:軟件里面哪里有開關呢?此時,如果你仔細想一想數字電路,是不是想起了0和1,就是啊,這個開關就用一個Bit變量實現,比如,變量為1時啟動校時程序塊,為0時運行時鐘。記住一點,校時程序塊和正常走時程序塊在同一時間絕不可能同時運行!
至于鬧鐘,也很簡單,每讀取一次RTC數據顯示,程序就判斷一次此時的時間和用戶設定的鬧鐘時間是否一樣,如果一樣,那就“鬧”吧!鬧多久?程序開發者自行設置,如果開發者愿意,甚至可以讓用戶自行配置;如果你既是開發者又是用戶,那我就不說啥了,隨你的心情,隨意配置吧!
讀到這里,你是不是感覺ELEJ-CDC1總體脈絡很清晰了呢!如果真的用心說是,那就好,你肯定可以獨立調試ELEJ-CDC1了,而且,你還可以學習很多工程設計調試的方法。再說得犀利些:如果你僅僅是為了做一個ELEJ-CDC1,完全或者基本沒有什么濃厚實物興趣驅使你,你可能在調試時非常痛苦,甚至不能讓ELEJ-CDC1正常運行。比如,你在調試ELEJ-CDC1時,你會徹徹底底地明白什么是數碼管動態顯示,為什么動態顯示要用定時器中斷,為什么不直接用延時掃描的方法,數碼管不同界面切換方法,I2C驅動如何寫(后續我會仔細說),甚至蜂鳴器振蕩頻率如何選擇……總之,我們喜歡電,我們可以在興趣中提高能力和扎實掌握解決實際工程問題的方法。哇!說多了,不過這樣的興趣就是動力,可以很隨意地步行10多里路去二手電子市場(偷笑)。
圖1.10 “AL:--”界面
圖1.11 “AL:on”界面
圖1.12 “12Hr”和“24Hr”界面
圖1.13 時間顯示界面
圖1.14 日期顯示界面
圖1.15 星期顯示界面
看幾張數碼管的界面圖片吧!如圖1.10~1.15所示。
好吧,這個版本的ELEJ-CDC1制作就介紹到這里吧,其實如果想再加其他功能,真的有點難,因為4K字節ROM空間的STC15F204EA放不下了,我就遇到此尷尬,不然ELEJ-CDC1最后一位本來打算用作“℃”顯示的數碼管就不會沒用上,我的代碼中,數碼管段碼就沒有全部放在code內,否則連鬧鐘功能也沒了。反正我們以后會讓ELEJ-CDC1升級的!
相關源程序可以到qq群657864614進行下載!
新店開張,為了提升人氣,即日起將開啟前所未有的優惠力度,相當于免費送了!商品限購,先買先得!所有商品均可以無理由退換,請放心購買!一個屬于電子工程師的專屬淘寶店,總有一款適合你:首頁-電子工程師小李-淘寶網
拓展知識:
- 億田燃氣灶維修知識(億田燃氣灶維修技巧)11-18
- 1海信42k11p怎么折開(海信42K11P:全方位展示超清畫質)
- 2電視頻道沒了怎么恢復(快速解決方法)
- 3Fardior燃氣灶售后維修電話號碼查詢(Fardior燃氣灶售后維修電話查詢)
- 4艾木歐防盜門沒電打不開怎么辦(艾木歐防盜門沒電無法啟動?解決方法總結)
- 5ENS指紋鎖售后熱線(ENS指紋鎖售后熱線-專業解決您的問題)
- 6打電話顯示關機是什么原因(如何解決手機無法接通問題)。
- 7v500hk1 cs5故障維修(v500hk1 cs5故障維修指南)
- 8創維液晶電視的遙控器怎么調試(創維電視遙控器調試指南)
- 9林內空氣能售后服務官網熱線(林內空氣能售后服務官網熱線)
- 10朝友精工保險柜24小時售后電話(朝友精工保險柜24小時售后電話 - 完善24小時保
-
開利24小時人工服務熱線(開利空調一開斷路器就跳閘可能的原因及解決方法)。
2024-09-12
-
三菱重工空調廠家維保電話是多少(三菱空調缺相故障怎么修三菱空調缺相故障
2024-09-12
-
三菱中央空調售后電話24小時人工電話(中央三菱空調油位故障如何有效解決中央
2024-09-12
-
開利空調全國客服(開利空調25gw是什么意思詳解25gw型號的特點與用途)。
2024-09-12
-
廣州增城日立HITACHI電視售后維修(電視機怎么手動切換AV信號)
2024-09-12