一、基于單片機(jī)的多功能防醉駕系統(tǒng)裝置設(shè)計(jì)
基于ATmega16超低功耗單片機(jī)的2J2001A型數(shù)碼酒精探測控制儀,探測傳感器安裝在汽車內(nèi),分別在主駕駛車位上的頭頂上、方向盤上、每一個(gè)車門的邊上安裝,當(dāng)駕駛?cè)藛T進(jìn)入駕駛座位后,可以自動(dòng)對酒精濃度進(jìn)行探測,當(dāng)系統(tǒng)通過對5個(gè)酒精測試儀的數(shù)據(jù)分析后,會(huì)判定出駕駛員是否是飲酒駕車和醉酒駕車,并分別采取對應(yīng)的措施,以確保行車和駕駛員的安全。系統(tǒng)可以根據(jù)檢測到的酒精含量是否超標(biāo)控制汽車點(diǎn)火器打開或者關(guān)閉,如果超標(biāo),則駕駛?cè)藛T無法啟動(dòng)汽車同時(shí)安全帶會(huì)自動(dòng)收緊,而且系統(tǒng)會(huì)呼叫相應(yīng)的人員過來幫助駕駛員,因此從根本上杜絕了酒后駕車的出現(xiàn)。該系統(tǒng)具有性價(jià)比高,智能化程度高,工作穩(wěn)定可靠的優(yōu)點(diǎn)。
1 系統(tǒng)工作原理
系統(tǒng)采用超高靈敏度酒精傳感器用旁熱型半導(dǎo)體式酒精氣敏元件MQ3,超低功耗ATmega16單片機(jī)系統(tǒng),自動(dòng)探測酒精濃度的方法,可以防止駕駛?cè)藛T逃避檢測,以判斷駕駛員是否是酒后開車,系統(tǒng)總體設(shè)計(jì)如圖1所示。主機(jī)電路包括8個(gè)模塊,分別是酒精傳感電路模塊、電源模塊、GPS定位模塊、鍵盤控制模塊、液晶顯示模塊、聲光報(bào)警模塊、語音呼叫模塊、繼電器控制模塊。該系統(tǒng)放置在汽車儀表盤位置,當(dāng)司機(jī)打開車門時(shí),酒精探測控制儀啟動(dòng),此時(shí)發(fā)動(dòng)機(jī)處于被鎖狀態(tài),汽車無法啟動(dòng)。酒精傳感器加熱后,探測控制儀對酒精傳感器探測的氣體信號進(jìn)行檢測。由于酒精含量與酒精傳感器檢測后產(chǎn)生的電壓信號成特定的比例關(guān)系,因而可根據(jù)電壓信號進(jìn)行酒精含量的判斷。檢測到的信號經(jīng)過放大和濾波之后,通過單片機(jī)內(nèi)置的12位ADC轉(zhuǎn)換為數(shù)字信號,由單片機(jī)對此信號進(jìn)行處理判斷,假設(shè)酒精含量沒有超標(biāo),LCD顯示屏幕顯示當(dāng)前酒精濃度,同時(shí)綠色指示燈(正常)亮起,控制繼電器不起作用,汽車隨之啟動(dòng);反之紅色指示燈(不正常)亮起并進(jìn)行聲光報(bào)警,控制繼電器切斷點(diǎn)火裝置電源,同時(shí)安全帶收緊,系統(tǒng)啟動(dòng)呼叫緊急聯(lián)系人裝置,通過GPRS導(dǎo)航儀測定當(dāng)前位置并以語音或短信“我現(xiàn)在在XX方位,我喝醉了,請速來”告訴給緊急聯(lián)系人,此時(shí)駕駛?cè)藛T無法啟動(dòng)汽車,從根本上實(shí)現(xiàn)控制酒后駕車。汽車啟動(dòng)后,控制儀隨即進(jìn)入低功耗狀態(tài),只有酒精濃度探測電路一直工作,一旦駕駛?cè)藛T駕駛過程中飲酒,控制儀立即恢復(fù)到正常工作狀態(tài)。
2 系統(tǒng)主要電路設(shè)計(jì)
?。?)主控電路
本控制儀采用了由Atmel公司研發(fā)出的新一代高性能、低功耗、高集成化的8位微處理器,具有先進(jìn)的RISC結(jié)構(gòu),大多數(shù)指令的執(zhí)行時(shí)間為單個(gè)時(shí)鐘周期增強(qiáng)型ATmega16單片機(jī),它的工作電壓為4.5~5.5 V,工作頻率為0~16 MHz,支持JTAG端口仿真和編程,仿真效果比傳統(tǒng)仿真更真實(shí)有效。它的高度集成不但大大降低了故障率,而且在成本、體積、穩(wěn)定性方面都有明顯優(yōu)勢。系統(tǒng)主控電路如圖2所示,包含晶振電路、復(fù)位電路等。
?。?)酒精檢測電路
酒精傳感器采用旁熱型半導(dǎo)體式酒精氣敏元件MQ3,探測范圍為10~1000ppm。酒精檢測電路由高精度酒精傳感器、信號調(diào)理放大電路、濾波電路和單片機(jī)內(nèi)置12位ADC等組成,主要功能是檢測酒精含量,判斷其是否超標(biāo),如圖3所示。
?。?)指示燈電路
指示燈電路有紅綠黃三個(gè)指示燈,紅燈是電源指示燈,工作時(shí)亮;綠燈是檢測提示燈,因?yàn)榫凭筋^需要一定時(shí)間加熱,才能達(dá)到理想的靈敏度,加熱時(shí)間到,綠燈亮,表示可以進(jìn)行濃度探測;黃燈為報(bào)警指示燈,黃燈不亮,表示可以行車;當(dāng)黃燈亮?xí)r,表示酒精濃度超標(biāo),不可以駕駛,同時(shí)黃燈閃爍的頻率越高,酒精濃度越高。如圖4所示。
(4)液晶顯示電路
此系統(tǒng)選用的是廣州瑞通科技有限公司的SED1335圖形點(diǎn)陣LCD模塊。這是一款低功耗的點(diǎn)陣圖形式LCD,可以工作在3.3 V供電的情況下,顯示格式為128(列)×64(行),具有多功能指令,內(nèi)部帶有中文字庫,既可以工作于串行方式又可以工作于并行方式,很容易與16位的單片機(jī)相連。本系統(tǒng)中與單片機(jī)的連接采用并行工作模式,以液晶顯示控制芯片ATmega16的異步串行通信端USART為外部數(shù)據(jù)或控制指令的輸入斷口,如圖5所示。
?。?)GPS導(dǎo)航系統(tǒng)設(shè)置電路
本設(shè)計(jì)在系統(tǒng)終端采用了GPS導(dǎo)航系統(tǒng)模塊作為開發(fā)平臺,當(dāng)酒精檢測系統(tǒng)發(fā)出醉酒超標(biāo)信號時(shí),該模塊就會(huì)將所在地點(diǎn)的信息發(fā)到語音呼叫模塊上。在平時(shí)無醉酒(飲酒)情況下,該模塊就充當(dāng)GPS實(shí)時(shí)導(dǎo)航系統(tǒng),為駕駛員提供必要的信息。
?。?)繼電器控制電路
控制繼電器有兩個(gè)主要部分,一個(gè)是控制系統(tǒng),另一個(gè)是被控制系統(tǒng)。其起動(dòng)機(jī)的工作原理如圖6所示。
?。?)語音呼叫系統(tǒng)控制電路
語音呼叫系統(tǒng)是繼酒精檢測電路發(fā)出超標(biāo)信號后,該系統(tǒng)讀取GPS模塊傳送過來的信息并通過語音呼叫系統(tǒng)把飲酒者所在地點(diǎn)信息傳給其最近聯(lián)系人,讓他過來幫忙,如:“我現(xiàn)在在XX方位,我喝醉了,請速來”。其電路如圖7所示。
?。?)報(bào)警和鍵盤電路
利用蜂鳴器作為報(bào)警器,當(dāng)酒精含量超標(biāo)時(shí),發(fā)出禁止行車警告音;不超標(biāo)時(shí)發(fā)出允許行車提示音。由單片機(jī)的I/O口驅(qū)動(dòng)蜂鳴器來實(shí)現(xiàn)。
3 系統(tǒng)軟件設(shè)計(jì)
軟件部分根據(jù)系統(tǒng)功能進(jìn)行模塊化編程。控制儀主程序流程圖如圖8所示,實(shí)現(xiàn)酒精含量檢測、酒精含量是否超標(biāo)判別、酒精含量顯示、聲光報(bào)警等功能。系統(tǒng)初始化后,對酒精傳感器進(jìn)行加熱,自動(dòng)進(jìn)入測量狀態(tài),然后采集酒精含量電壓信號,與設(shè)定的精度濃度進(jìn)行比較,如果高于這個(gè)濃度,則顯示該濃度,并進(jìn)行聲光報(bào)警,同時(shí)切斷點(diǎn)火電路,駕駛?cè)藛T不能發(fā)動(dòng)汽車;如果低于這個(gè)濃度,則顯示所測的濃度,同時(shí)啟動(dòng)發(fā)動(dòng)機(jī)。
通過電路中預(yù)留的JTAG接口調(diào)試程序,依據(jù)檢測系統(tǒng)不同功能的需要,采用模塊化的設(shè)計(jì),將程序分成幾個(gè)主要的功能模塊:氣體檢測、工作電壓設(shè)置、采樣數(shù)據(jù)上傳。
4 結(jié)語
酒精監(jiān)控系統(tǒng)是為預(yù)防或杜絕醉酒駕車引發(fā)交通事故發(fā)生而設(shè)計(jì)的。通過對各個(gè)電路功能及軟件工作流程的研究與制作,基本實(shí)現(xiàn)了設(shè)計(jì)要求。系統(tǒng)具有自動(dòng)測量、智能化程度高、功耗低等特點(diǎn),對預(yù)防酒后駕車具有很好的效果,在實(shí)際應(yīng)用中具有很好的推廣價(jià)值。
二、智能電飯煲中單片機(jī)的應(yīng)用
1 引言
微電腦或電腦控制的智能電飯煲符合現(xiàn)代人的要求,人性化的界面設(shè)計(jì),使得人們一眼看出當(dāng)前工作狀態(tài),讓您更安心,各種烹調(diào)過程全部由電腦自動(dòng)控制,并且大多的智能電飯煲采用太空“黑晶”內(nèi)膽,超硬耐磨,恒久美觀,所有的這些特點(diǎn)符合現(xiàn)代人的省時(shí)、省力、耐用的觀念。
本文主要介紹利用SPMC65P2404A芯片來對電飯煲的過程進(jìn)行控制,SPMC65P2404A是凌陽公司的8位元單片機(jī),最高工作頻率為8MHz,工作電壓2.5V~5V,有192字節(jié)的RAM和4K字節(jié)的OTP ROM,有23個(gè)可編程IO口,8通道10位A/D轉(zhuǎn)換器,2通道8位定時(shí)/計(jì)數(shù)器,2通道16位定時(shí)/計(jì)數(shù)器,1個(gè)12位PWM輸出口,有低電壓、上電、看門狗、外部信號、錯(cuò)誤地址復(fù)位,并且有一個(gè)蜂鳴器輸出口。
2 總體方案介紹
利用凌陽8位MCU設(shè)計(jì)的智能電飯煲控制系統(tǒng)原理框圖如圖2-1所示,通過按鍵來選擇功能模式、顯示電路完成顯示當(dāng)前狀態(tài)和定時(shí)時(shí)間;通過溫度傳感器來對溫度進(jìn)行采樣;通過MCU的控制最終實(shí)現(xiàn)對繼電器的控制,從而來控制對加熱盤的加熱與否,電源部分完成對單片機(jī)系統(tǒng)和外圍電路提供5V電源,并且對加熱盤進(jìn)行加熱。
圖2-1 控制系統(tǒng)構(gòu)成框圖
3 系統(tǒng)硬件設(shè)計(jì)
1、由單片機(jī)SPMC65P2404A控制的電飯煲的硬件原理圖如圖3-1所示,它包括按鍵輸入部分,溫度檢測輸入電路,復(fù)位和晶振電路,PA6、PA7完成對頂蓋和底盤的溫度的檢測,PA5完成對繼電器的控制,SPMC65P2404A是系統(tǒng)的核心部分。
圖3-1 電飯煲的電路原理圖
芯片特性簡介
SPMC65P2404A是凌陽公司的8位元單片機(jī),最高工作頻率為8MHz,工作電壓2.5V~5V,有192字節(jié)的RAM和4K字節(jié)的OTP ROM,有23個(gè)可編程IO口,8通道10位A/D轉(zhuǎn)換器,2通道8位定時(shí)/計(jì)數(shù)器,2通道16位定時(shí)/計(jì)數(shù)器,1個(gè)12位PWM輸出口,有低電壓、上電、看門狗、外部信號、錯(cuò)誤地址復(fù)位,并且有一個(gè)蜂鳴器輸出口……。利用這些資源,能夠?qū)崿F(xiàn)電飯煲的功能。
2、顯示電路:
顯示電路由共陽極數(shù)碼管和10個(gè)LED組成,通過單片機(jī)位選和所送的數(shù)據(jù)來點(diǎn)亮相應(yīng)的LED和數(shù)碼管的顯示狀態(tài)。其電路原理圖如圖3-2所示:
圖3-2 顯示電路
3、電源電路:
電源部分為單片機(jī)提供+5V的直流穩(wěn)壓源,并且通過降壓、整流、濾波之后的+14V電壓對繼電器進(jìn)行供電,通過控制三極管射極的導(dǎo)通與否來控制繼電器的工作狀態(tài)。電源電路原理圖如圖3-3所示
圖3-3 電源電路
4、溫度采集部分電路圖:
J2和J3是溫度傳感器的兩個(gè)接口,其中J2和J3分別是頂蓋和底盤溫度傳感器的接口,單片機(jī)檢測的信號實(shí)際上是與溫度傳感器分壓的電阻的電壓值,因?yàn)闇囟葌鞲衅鞯碾娮柚禃?huì)隨溫度的上升而減小,所以分壓電阻的電壓值間接反映了某一時(shí)刻的溫度,電路原理圖如圖3-4所示:
圖3-4 溫度傳感器電路
4 系統(tǒng)軟件設(shè)計(jì)
4.1 主程序流程
從樣機(jī)分析中大致設(shè)計(jì)整個(gè)系統(tǒng),整個(gè)系統(tǒng)輸入包括2個(gè)溫度傳感器,5個(gè)按鍵;輸出包括2位七段數(shù)碼管、10個(gè)發(fā)光二極管、繼電器控制信號等。根據(jù)控制功能,將程序設(shè)計(jì)為幾個(gè)主要的模塊,程序主流程見圖4-1所示:
程序主流程圖
4.2 子程序介紹
1、 診斷子程序
診斷程序主要進(jìn)行溫度采集并判斷傳感器是否良好,主要對2個(gè)溫度傳感器連續(xù)檢測20次,若測到的數(shù)據(jù)不在范圍內(nèi)(溫度范圍:-10℃~160℃),則表明傳感器短路或斷路錯(cuò)誤,數(shù)碼顯示“E”,并禁止按鍵操作。
2、 鍵盤掃描子程序
程序每循環(huán)一次掃描一次鍵盤,如果掃描到有鍵按下,則暫存鍵值,如果連續(xù)5次掃描到的鍵值都一樣,則認(rèn)為是穩(wěn)定的鍵值。
3、 系統(tǒng)共有5個(gè)按鍵,在不同的狀態(tài)下,每個(gè)鍵只要輕按一次就有效。系統(tǒng)的五個(gè)鍵接于PA1 、PA3、PA2 、PA0、PA4,如果按鍵值有效則返回值的相應(yīng)位為0,否則相應(yīng)位為1。
4、 溫度采集子程序
熱敏電阻靈敏度高,為了防止干擾及其它原因?qū)е聹y出的溫度值變化太快,引起控制部件頻繁動(dòng)作,溫度采集采用滑動(dòng)平均值濾波方法。即在同一個(gè)通道上連續(xù)采集三個(gè)數(shù)據(jù),取其中的中間值。
5、 顯示子程序
系統(tǒng)共有2位七段數(shù)碼管顯示及10個(gè)發(fā)光二極管顯示。數(shù)碼管主要有6種狀態(tài)需要顯示:待機(jī)狀態(tài)、出錯(cuò)顯示、燜飯、保溫、煮飯中及定時(shí)時(shí)間顯示。發(fā)光二極管顯示所選擇的功能、開始及保溫狀態(tài)。功能顯示需采用輪循方式,在按下開始鍵之前,開始燈閃爍。進(jìn)入保溫狀態(tài)后,保溫指示燈亮。LED顯示程序由位碼掃描子程序及數(shù)碼顯示狀態(tài)選定子程序組成。
三、STC單片機(jī)自動(dòng)下載系統(tǒng)設(shè)計(jì)
引言
STC單片機(jī)下載程序不需要編程器燒寫,可以通過串口下載。美中不足的是,STC單片機(jī)下載時(shí)必須進(jìn)行冷啟動(dòng),即下載信號加到單片機(jī)串口以后必須對單片機(jī)斷電再上電,這給用戶帶來了一些不便。尤其是反復(fù)調(diào)試程序需要多次下載時(shí),顯得更加繁瑣。
為了解決這一問題,有必要研制一種STC單片機(jī)專用的自動(dòng)下載系統(tǒng),使系統(tǒng)接收到上位機(jī)發(fā)往單片機(jī)的下載信號后,自動(dòng)冷啟動(dòng)STC單片機(jī),完成下載任務(wù)。
1 原理分析
STC單片機(jī)下載時(shí),需要使用宏晶公司提供的STCISP軟件。下載開始時(shí),上位機(jī)軟件首先向單片機(jī)發(fā)出下載命令。自動(dòng)下載系統(tǒng)收到上位機(jī)對單片機(jī)發(fā)出的下載命令后,實(shí)現(xiàn)對單片機(jī)的斷電、上電冷啟動(dòng)操作。單片機(jī)經(jīng)冷啟動(dòng)后,收到命令數(shù)據(jù)流后作出回應(yīng),開始下載程序。需要注意的是,單片機(jī)在正常工作中,串口有可能接收數(shù)據(jù),由于自動(dòng)下載系統(tǒng)與單片機(jī)串口連接,因而系統(tǒng)必須具有自動(dòng)判斷接收的數(shù)據(jù)流是否為下載命令的能力,保證及時(shí)冷啟動(dòng)目標(biāo)單片機(jī)。
為了檢測下載程序的命令數(shù)據(jù)流,可以采用如下方法:從PC的串口引出連接線,接至PC的另一個(gè)串口,用串口調(diào)試助手打開;用STC-ISP軟件發(fā)送下載命令,可以檢測到在波特率為9 600 bps的情況下,該軟件持續(xù)向單片機(jī)發(fā)送十六進(jìn)制的0x80;當(dāng)自動(dòng)下載系統(tǒng)連續(xù)接收到足夠數(shù)量的0x80時(shí),即可判定接收到了下載命令數(shù)據(jù)流,從而進(jìn)入冷啟動(dòng)程序。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 主控芯片STC15F104E簡介
自動(dòng)下載系統(tǒng)需要接收上位機(jī)發(fā)往目標(biāo)單片機(jī)的下載命令程序流,并對目標(biāo)單片機(jī)進(jìn)行冷啟動(dòng)。STC15F104E是宏晶公司研發(fā)的一款單片機(jī),具有省去一些外部電路而功能較全面的優(yōu)點(diǎn)。
該單片機(jī)的特點(diǎn)有:
◆內(nèi)部集成了可靠復(fù)位,省去了外部復(fù)位電路。
◆內(nèi)部集成了R/C時(shí)鐘(在常溫下僅有5‰溫漂),省去了外部晶振。
◆內(nèi)部集成了2個(gè)16位可重裝載定時(shí)器,與普通8051單片機(jī)兼容。
◆為DIP8/SOP8封裝,體積較小,功耗較低。
◆增強(qiáng)型8051內(nèi)核,單時(shí)鐘周期,信號處理速度快,實(shí)時(shí)性較好。
由于STC15F104E可以省去傳統(tǒng)單片機(jī)的復(fù)位電路、外部晶振電路,且采用貼片封裝,因此占用電路板面積非常小,適合集成在電路板上,因而作為本系統(tǒng)的主控芯片。
2.2 主控電路
如圖1所示,整個(gè)系統(tǒng)以STC15F104E為核心進(jìn)行設(shè)計(jì)。STC15F104E的P3.0腳與目標(biāo)單片機(jī)STC89C52RC的串口接收端相連,即將發(fā)往目標(biāo)單片機(jī)的信號連接到自動(dòng)下載系統(tǒng),實(shí)現(xiàn)信號的獲取和處理。由丁自動(dòng)下載系統(tǒng)不需要發(fā)出任何信息,STC15F104E的P3.1引腳懸空,不與目標(biāo)單片機(jī)相連。
對目標(biāo)單片機(jī)進(jìn)行冷啟動(dòng),實(shí)現(xiàn)斷電、再上電,可以用三極管作為電子開關(guān)實(shí)現(xiàn)。必須注意到的是,三極管的最大可通過電流不要小于單片機(jī)電路的所需電流。如果三極管僅作為單片機(jī)供電的開關(guān),由于STC89系列單片機(jī)的正常丁作模式功耗為2~7 mA,90系列三極管通常情況下可以滿足需求。但在某些情況下,單片機(jī)的串口上電后會(huì)給單片機(jī)供電,使單片機(jī)各引腳電平處于不確定的狀態(tài),因而必須對目標(biāo)電路板整體進(jìn)行冷啟動(dòng),三極管必須滿足目標(biāo)電路板的總電流需求。由于三極管8550的最大可通過電流為1.5 A,可以滿足絕大多數(shù)電路的供電需求。所以選擇三極管8550連接到目標(biāo)單片機(jī)STC89C52RC的VCC腳,作為對其冷啟動(dòng)的開關(guān)。
如圖1所示,D1為指示燈,其亮滅可以通過STC15F104E的P3.3腳控制。在程序中加入相應(yīng)的語句即可實(shí)現(xiàn)燈的亮滅與閃爍,以顯示系統(tǒng)的狀態(tài)。
3 系統(tǒng)軟件設(shè)計(jì)
STC單片機(jī)自動(dòng)下載系統(tǒng)軟件流程如圖2所示。在初始化后,系統(tǒng)循環(huán)檢測是否接收到下載信號;經(jīng)過判斷證實(shí)接收到下載信號后,就切斷目標(biāo)單片機(jī)電源;等待適當(dāng)?shù)臅r(shí)間后,再給目標(biāo)單片機(jī)上電。單片機(jī)正常工作期間,系統(tǒng)接收到發(fā)往目標(biāo)單片機(jī)串口的非下載命令程序,經(jīng)自動(dòng)判斷后不作任何動(dòng)作。
3.1 串口模擬程序
由于STC15F104E沒有串口,因而必須利用定時(shí)器模擬串口。其方法是,定義一個(gè)常量,根據(jù)所需要的波特率對該常量賦值,并將該常量值賦到定時(shí)所用的寄存器中。在模擬外部晶振為11.059 2 MHz、波特率為9 600 bps的情況下,設(shè)置常量BAUD為0xFE80,并將該常量賦值到TL1、TH1兩個(gè)寄存器中,實(shí)現(xiàn)定時(shí)。每到相應(yīng)時(shí)間觸發(fā)定時(shí)中斷程序,將外部引腳的狀態(tài)讀入并存入預(yù)先設(shè)定的數(shù)組中,完成模擬串口讀入字節(jié)的任務(wù)。
3.2 下載命令檢測程序
在STC上位機(jī)軟件發(fā)出的下載命令中,波特率為9 600 bps時(shí)數(shù)據(jù)流為連續(xù)的0x80。由于在單片機(jī)正常工作時(shí)也有可能接收0x80,下載系統(tǒng)只有嚴(yán)格檢測到連續(xù)多個(gè)0x80時(shí),才能判斷為接收到了下載命令。如果其中有一個(gè)不是0x80,則重新檢測計(jì)數(shù)。這里設(shè)定為當(dāng)系統(tǒng)連續(xù)接收到200個(gè)0x80時(shí),判定為接收到了下載命令。
3.3 冷啟動(dòng)操作和指示燈程序
接收到下載命令后,STC15F104E首先關(guān)閉定時(shí)器中斷,停止模擬串口的接收工作。之后將P3.4置1,切斷目標(biāo)單片機(jī)的電源。延遲1~2 s后置0,恢復(fù)對目標(biāo)單片機(jī)的供電??紤]到STC上位機(jī)下載軟件從發(fā)送下載命令到單片機(jī)開始下載大約需要1~2 s的時(shí)間,恢復(fù)供電后需要繼續(xù)延遲5 s,保證目標(biāo)單片機(jī)已經(jīng)開始下載后再啟動(dòng)定時(shí)器中斷。
STC單片機(jī)接收到下載命令后,必須作出回應(yīng)才能進(jìn)行下載。上位機(jī)發(fā)出的下載信號同時(shí)發(fā)送到目標(biāo)單片機(jī)和自動(dòng)下載系統(tǒng),自動(dòng)下載系統(tǒng)中的單片機(jī)的P3.1腳懸空,而目標(biāo)單片機(jī)的P3.1與上位機(jī)串口相連。這樣,只有目標(biāo)單片機(jī)能夠回應(yīng)下載命令實(shí)現(xiàn)下載,自動(dòng)下載系統(tǒng)中的單片機(jī)不能回應(yīng)下載命令,避免了對上位機(jī)的干擾。
結(jié)語
STC單片機(jī)自動(dòng)下載系統(tǒng)省去了操作人員手動(dòng)開關(guān)電源的不便,避免了相應(yīng)的機(jī)械損耗,具有較高的實(shí)用價(jià)值。
四、Proteus的單片機(jī)演奏系統(tǒng)
當(dāng)前的很多用單片機(jī)實(shí)現(xiàn)音樂演奏的系統(tǒng)都是利用開發(fā)板結(jié)合仿真器實(shí)現(xiàn)的,這種方法不是很復(fù)雜,實(shí)現(xiàn)也較方便,但是調(diào)試不是很方便,且成本也較高。 本文提出的一種基于Proteus 的單片機(jī)演奏音樂的方法,非常簡單實(shí)用,且該方法基于軟件來實(shí)現(xiàn)的,所以成本非常低,調(diào)試方便,效果也很不錯(cuò),適合于愛好音樂的單片機(jī)學(xué)習(xí)者。 單片機(jī)系統(tǒng)的設(shè)計(jì)分兩大部分:硬件設(shè)計(jì)部分和軟件設(shè)計(jì)部分。
1 硬件設(shè)計(jì)
硬件部分比較簡單,如果在開發(fā)板上做實(shí)驗(yàn)可仿下面圖1 電路連接。
AT89C51 單片機(jī)的P2.5 口控制一個(gè)8550 的三極管,三極管控制電磁蜂鳴器的電源通斷。
如果用Proteus 軟件來仿真的話,電路更加簡單,見圖2。
圖2 在Proteus 環(huán)境下用單片機(jī)控制蜂鳴器發(fā)聲的原理圖。
需要的關(guān)鍵元件:單片機(jī)和蜂鳴器。
為了便于軟件編程,先要了解單片機(jī)唱歌的基本原理。
什么是聲音呢?聲音是空氣的振蕩,不同的振蕩頻率我們就可以聽到不同聲調(diào)的聲音。 音的頻譜范圍約在幾十到幾千赫茲。
其次,如何讓蜂鳴器發(fā)聲?蜂鳴器有很多種類,但大致分為兩類:有源式(直流電就發(fā)聲,但頻率單一);無源式(根據(jù)輸入方波頻率而發(fā)出不同的聲音)。 這里選擇無源式蜂鳴器。
單片機(jī)唱歌的基本原理:利用程序來控制單處機(jī)某個(gè)口線出一定頻率的方波到蜂鳴器,蜂鳴器就可以發(fā)出一定音調(diào)的聲音,若再利用不同的延時(shí)程序改變輸出頻率,就可以改變音調(diào),進(jìn)而就可讓單片機(jī)發(fā)出“1”、“2”,“3”,“4”,“5”,“6”,“7”的音樂。
2 軟件設(shè)計(jì)
通過軟件延時(shí)或者定時(shí)器延時(shí)來的方式以不同頻率改變口線的的高低電平狀態(tài)來實(shí)現(xiàn)的。 如果只是讓蜂鳴器發(fā)聲這已經(jīng)夠了。 但是我們要的是唱歌,所以還有一些工作需要作。
2.1 音調(diào)
輸出不同頻率的方波,以實(shí)現(xiàn)1、2、3、4 等的不同音調(diào);比如,發(fā)出200HZ 的音頻,其周期為1/200s,即5ms. 這樣,當(dāng) P2.5 的高電平或低電平的持續(xù)時(shí)間為2.5ms 時(shí),就能發(fā)出200HZ 的音調(diào)。 我們可以寫一個(gè)延時(shí)子程序,用R3 來提供參數(shù),R3=1 時(shí),延時(shí)為20us,那么R3 取2500/20=125(7DH)時(shí),就可以發(fā)出200Hz 的音調(diào),提供不同的R3 常數(shù),可以得到不同的音調(diào)變化。
利用通用發(fā)聲程序可以編寫樂曲演奏程序,樂曲是按照一定的高低,長短和強(qiáng)弱的關(guān)系組成的音調(diào),在一首樂曲中,每音符的音高和音長與頻率和節(jié)拍有關(guān)(如圖3 所示)。
圖3 音符的音高和音長與頻率的關(guān)系
圖3 畫出了兩個(gè)音階(一個(gè)音階是8 個(gè)音符)的鋼琴鍵和每個(gè)鍵的音符名及其頻率(HZ),低音階以低C(130.8Hz)到中C(261.7Hz)高音階以中C 到高C(523.3Hz)黑鍵比它旁邊的白鍵高半個(gè)音或低半個(gè)音。 組成樂曲的每個(gè)音符的頻率和持續(xù)時(shí)間是樂曲程序發(fā)聲所需要的兩個(gè)重要數(shù)據(jù)。 頻率可以從圖中得到,音符的持續(xù)時(shí)間可根據(jù)樂曲速度及每個(gè)音符的節(jié)拍數(shù)來確定,是可以從樂譜中得到的。
2.2 節(jié)拍
控制一個(gè)音符輸出的時(shí)間,比如1 拍、1/4 拍。 在4/4(四四拍)中,四分音符為一拍,每小節(jié)4 拍,全音符持續(xù)4 拍,二分音符持續(xù)2 拍,四分音符持續(xù)1 拍,八分音符持續(xù)半拍。 而全音符需要1s 的時(shí)間,則二分音符持續(xù)時(shí)間為0.5s(50×10ms),四分音符的持續(xù)時(shí)間為0.25s(25×10ms),八分音符持續(xù)時(shí)間為0.125s(12.5×10ms)。
知道了音調(diào)與頻率和時(shí)間的關(guān)系,就可以按照樂曲的曲譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的時(shí)間值和頻率值。
僅上所敘還不夠,要準(zhǔn)確奏出一首曲子,必須準(zhǔn)確地控制樂曲節(jié)奏,即一音符的持續(xù)時(shí)間。 例如,一首曲子的節(jié)奏為每分種94 拍,那么一拍就為60/94=0.64s.
音樂的節(jié)拍我們可用定時(shí)器來控制,簡單的說,一個(gè)一拍的音符唱0.64s,我們就設(shè)置一個(gè)定時(shí)器定時(shí)0.64s,時(shí)間一到就換下一個(gè)音符。 但是,由于單片機(jī)的T0,在12MHz 晶振下最大定時(shí)時(shí)間只能為65ms,因此不可能直接用改變T0 的時(shí)間初值來實(shí)現(xiàn)不同節(jié)拍。 如何定時(shí)一個(gè)更大的時(shí)間,我們可以用T0 來產(chǎn)生10ms 的時(shí)間基準(zhǔn),然后設(shè)置 一個(gè)中斷計(jì)數(shù)器,通過判別中斷計(jì)數(shù)器的值來控制節(jié)拍時(shí)間的長短。
例如對1/4 拍音符,定時(shí)時(shí)間為0.16s,相應(yīng)的時(shí)間常數(shù)(中段計(jì)數(shù)器)為16(即10H);對3 拍音符,定時(shí)時(shí)間為1.92s,相應(yīng)時(shí)間長數(shù)為192(即C0H)。
2.3 電路實(shí)現(xiàn)
因?yàn)橐皇浊硬恢挂粋€(gè)音符,我們不可能對每一個(gè)音符的音階都去“手工”的提供時(shí)間常數(shù),為了實(shí)現(xiàn)的簡化,我們編制一個(gè)將每一音符的時(shí)間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成的表格,在程序里用查表指令依次查出每一個(gè)音符的頻率和對應(yīng)節(jié)拍時(shí)間,產(chǎn)生音符并控制節(jié)奏,就可以實(shí)現(xiàn)演奏效果。
此外,結(jié)束符和體止符可以分別用代碼00H 和FFH 來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應(yīng)的停頓效果。
為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例兩個(gè)相同音符)音插入一個(gè)時(shí)間單位的頻率略有不同的音符。
程序框圖如下圖4. 本程序演奏的是民歌“八月桂花遍地開”,C 調(diào),節(jié)奏為94 拍/min。
用Keil 對程序進(jìn)行編譯,見圖5,具體方法可文獻(xiàn)[5],編譯無誤后生成。hex 文件,然后雙擊Proteus環(huán)境下的原理圖中的AT89C51,找到這個(gè)。 hex 文件,然后點(diǎn)按鈕Play,這時(shí)單片機(jī)控制的蜂鳴器就可以開始播放音樂了。
圖4 程序流程圖
圖5 在Keil 環(huán)境下對程序進(jìn)行編譯
3 結(jié)論
以上介紹的方法已通過測試,運(yùn)行良好。 對初學(xué)單片機(jī)者有一定的啟示作用。 讀者也可以自行找出一首歌,將樂曲翻譯成碼表輸入單片機(jī),而程序不變。 本實(shí)驗(yàn)方法簡便,即使不懂音樂的人,也可方便地將一首陌生的曲子翻譯成代碼。
評論
查看更多