版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南人文科技學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:單片機(jī)原理及應(yīng)用課程設(shè)計(jì)設(shè)計(jì)題目: 自動(dòng)控制升降旗裝置 系 別: 通信與控制工程系 專 業(yè): 通信工程 指導(dǎo)教師評(píng)語(yǔ): 指導(dǎo)教師簽名: 年 月 日成績(jī)?cè)u(píng)定項(xiàng) 目權(quán)重成績(jī)鄧曉雄王成胡楚煊1、設(shè)計(jì)過(guò)程中出勤、學(xué)習(xí)態(tài)度等方面0.22、課程設(shè)計(jì)質(zhì)量與答辯0.53、設(shè)計(jì)報(bào)告書寫及圖紙規(guī)范程度0.3總 成 績(jī) 教研室審核意見:教研室主任簽字: 年 月 日教學(xué)系審核意見: 主任簽字: 年 月 日摘 要本系統(tǒng)采用單片機(jī)stc89c52作為自動(dòng)控制升降旗系統(tǒng)的檢測(cè)和控制核心,采用由單片機(jī)控制的步進(jìn)電機(jī)帶動(dòng)國(guó)旗升降,實(shí)現(xiàn)對(duì)國(guó)旗升降的自動(dòng)控制。該電路主要由電機(jī)驅(qū)動(dòng)控制模塊、鍵盤
2、與顯示模塊及語(yǔ)音模塊幾個(gè)部分組成。電機(jī)驅(qū)動(dòng)控制模塊采用集成驅(qū)動(dòng)芯片uln2003l,采用鍵盤作為輸入控制和數(shù)碼管作為輸出顯示,語(yǔ)音模塊采用報(bào)警蜂鳴器(ls)電路。關(guān)鍵字:步進(jìn)電機(jī);自動(dòng)控制;語(yǔ)音;數(shù)碼管顯示;按鍵 目 錄設(shè)計(jì)要求11 方案選擇與論證11.1電機(jī)的選擇與論證11.2 電機(jī)驅(qū)動(dòng)方案的選擇與論證22 自動(dòng)控制升降旗整體電路設(shè)計(jì)22.1整體電路原理23 單元電路設(shè)計(jì)33.1 步進(jìn)電機(jī)電路的設(shè)計(jì)33.2 數(shù)碼管顯示電路的設(shè)計(jì)43.3 音樂發(fā)聲電路的設(shè)計(jì)53.4 矩陣4x4鍵盤電路的設(shè)計(jì)63.5 外部rom存儲(chǔ)器電路設(shè)計(jì)74 自動(dòng)控制升旗裝置軟件設(shè)計(jì)84.1 系統(tǒng)總程序流程圖84.2 步進(jìn)
3、電機(jī)轉(zhuǎn)動(dòng)的軟件設(shè)計(jì)94.3 數(shù)碼管實(shí)時(shí)顯示的軟件設(shè)計(jì)104.4 國(guó)歌音樂的軟件設(shè)計(jì)104.5 矩陣鍵盤實(shí)時(shí)控制軟件設(shè)計(jì)114.6 外部rom實(shí)時(shí)訪問(wèn)的軟件設(shè)計(jì)125 詳細(xì)儀器清單136 總結(jié)與思考及致謝14參考文獻(xiàn)15附錄一:系統(tǒng)程序代碼16附錄二:總原理圖27自動(dòng)控制升降旗裝置設(shè)計(jì)要求基本部分: 1).按下上升按鍵后,旗幟勻速上升,同時(shí)流暢地播放歌曲,上升到最高端時(shí)自動(dòng)停止上升,歌曲停奏;按下下降按鍵后,旗幟勻速下降,降旗的時(shí)間不放歌曲,下降到最低端時(shí)自動(dòng)停止; 2).旗幟在最高端,上升按鍵不起作用;在最低端時(shí),下降按鍵不起作用; 3).升降旗的時(shí)間均為43秒,與國(guó)歌的演奏時(shí)間相等; 4).
4、即時(shí)顯示旗幟所在的高度,以cm為單位,誤差不大于2cm。發(fā)揮部分: 1). 重新合上電源后,所顯示的旗幟高度數(shù)據(jù)不變; 2). 要求升降旗的速度可調(diào)整,調(diào)整范圍是30120秒鐘,步進(jìn)1秒(除43秒外,其他時(shí)間可與國(guó)歌不同步); 3). 在最高升降速度下(以自選的電機(jī)參數(shù)定),能在指定的位置上自動(dòng)停止,定位誤差2cm。1 方案選擇與論證1.1電機(jī)的選擇與論證方案一:采用普通的直流電機(jī)。普通直流電動(dòng)機(jī)具有優(yōu)良的調(diào)速特性,調(diào)速平滑、方便,調(diào)整范圍廣,過(guò)載能力強(qiáng),能承受頻繁的沖擊負(fù)載,可實(shí)現(xiàn)頻繁的無(wú)級(jí)快速啟動(dòng)、制動(dòng)和反轉(zhuǎn)。方案二:采用步進(jìn)電機(jī)。步進(jìn)電機(jī)是純粹的數(shù)字控制電動(dòng)機(jī),它將電脈沖轉(zhuǎn)化為角位移,即
5、一脈沖,電機(jī)就轉(zhuǎn)動(dòng)一角度,因此很適合單片機(jī)控制。步進(jìn)電機(jī)的一個(gè)顯著特點(diǎn)是具有快速的啟停能力,如果負(fù)荷不超過(guò)步進(jìn)電機(jī)所能提供的動(dòng)態(tài)轉(zhuǎn)矩值,就能夠立即使步進(jìn)電機(jī)啟動(dòng)或反轉(zhuǎn)。另一個(gè)顯著特點(diǎn)是轉(zhuǎn)換精度高,可以通過(guò)步數(shù)實(shí)現(xiàn)精確定位,可正轉(zhuǎn)反轉(zhuǎn)控制靈活。綜上所述,我們選用方案二。1.2 電機(jī)驅(qū)動(dòng)方案的選擇與論證方案一:采用繼電器對(duì)電動(dòng)機(jī)的開或關(guān)進(jìn)行控制,通過(guò)控制開關(guān)的切換速度實(shí)現(xiàn)對(duì)電機(jī)的運(yùn)行速度進(jìn)行調(diào)整。這個(gè)電路的優(yōu)點(diǎn)是電路結(jié)構(gòu)簡(jiǎn)單,其缺點(diǎn)是繼電器的響應(yīng)時(shí)間長(zhǎng),易損環(huán),壽命短,耗電流,不能很好的驅(qū)動(dòng)步進(jìn)電機(jī),可靠性不是很高。方案二:采用由達(dá)林頓管組成的h橋型pwm電路。用單片機(jī)控制達(dá)林頓管使之工作在占空比
6、可調(diào)的開關(guān)狀態(tài),可精確調(diào)整電動(dòng)機(jī)的運(yùn)動(dòng)狀態(tài)(前進(jìn),后退,左轉(zhuǎn),右轉(zhuǎn))。這種電路由于工作在管子的飽和截至模式下,效率很高。h橋電路保證了可以簡(jiǎn)單的實(shí)現(xiàn)轉(zhuǎn)速和方向的控制,但不能很精確的控制步距和速度。方案三:采用uln2003驅(qū)動(dòng)。uln2003 是高耐壓、大電流達(dá)林頓陳列,由七個(gè)硅npn 達(dá)林頓管組成,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動(dòng)的系統(tǒng)。所以綜上所述我們采用方案三。2 自動(dòng)控制升降旗整體電路設(shè)計(jì)2.1整體電路原理系統(tǒng)整體電路原理框圖如圖1所示:圖1總體電路框圖3 單元電路設(shè)計(jì)3.1 步進(jìn)電機(jī)電路的設(shè)計(jì)根據(jù)設(shè)計(jì)要求,我們采用了步進(jìn)電機(jī)的準(zhǔn)
7、確步進(jìn)來(lái)控制旗桿的升降,電路圖如圖3所示:圖 3 步進(jìn)電機(jī)原理圖 步進(jìn)電機(jī)是數(shù)字控制電機(jī),不同于直流電機(jī)。它將脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰?,即給一個(gè)脈沖信號(hào),步進(jìn)電機(jī)就轉(zhuǎn)動(dòng)一個(gè)角度,非常適合單片機(jī)控制。工作原理如下: (1)控制換相順序 通電換相這一過(guò)程稱為脈沖分配。例如:三相步進(jìn)電機(jī)的六拍工作方式,其各相通電順序?yàn)閍-ab-b-bc-c-ca-a,通電控制脈沖必須嚴(yán)格按照這一順序分別控制a,b,c各相得通斷。 (2)控制步進(jìn)電機(jī)的轉(zhuǎn)向 如果給定工作方式正序換相通電,電機(jī)正轉(zhuǎn),如果按反序通電換相,電機(jī)就反轉(zhuǎn)。 (3)控制步進(jìn)電機(jī)的速度如果給步進(jìn)電機(jī)發(fā)一個(gè)控制脈沖,它就轉(zhuǎn)一步,再發(fā)一個(gè)脈沖,它就會(huì)再轉(zhuǎn)一
8、步。兩步脈沖的時(shí)間間隔越短,步進(jìn)電機(jī)就轉(zhuǎn)的越快。調(diào)整單片機(jī)發(fā)出的脈沖頻率,就可以對(duì)步進(jìn)電機(jī)進(jìn)行調(diào)速。步進(jìn)電機(jī)步序表如表1所示:表1 步進(jìn)電機(jī)步序表步序c4c3c2c1uln2003輸出單片機(jī)輸出100010x010x0e200110x030x0c300100x020x0d401100x060x09501000x040x0b611000x0c0x03710000x080x07810010x090x06 如果按步序1-步序 8輸出數(shù)據(jù),步進(jìn)電機(jī)正轉(zhuǎn),按步序8步序一輸出數(shù)據(jù),步進(jìn)電機(jī)反轉(zhuǎn)。 3.2 數(shù)碼管顯示電路的設(shè)計(jì)由于要求升降過(guò)程中即時(shí)顯示所在高度,故采用四位數(shù)碼管即可顯示出來(lái)。本試驗(yàn)所采用的開
9、發(fā)板上有一排六位的數(shù)碼管,每個(gè)數(shù)碼管的8段是由芯片8255得pb口控制亮滅,即可得到所要顯示的數(shù)字,每個(gè)數(shù)碼管的公共腳分別由8255的pa0pa5經(jīng)三極管擴(kuò)流后進(jìn)行控制,原理圖如圖4所示:圖 4 數(shù)碼管顯示電路原理圖 要在某位數(shù)碼管上顯示一個(gè)數(shù)字,首先把待顯示數(shù)字的顯示碼送給8255的pb口,接著選中要顯示的位。例如:要在開發(fā)板的最左邊的數(shù)碼上顯示一個(gè)0,則需要先把0得顯示碼0xc0送8255得pb口,接著pa0賦0(低電平),隨后讓單片機(jī)保持這個(gè)值不變。3.3 音樂發(fā)聲電路的設(shè)計(jì)為了在升旗得過(guò)程中同步放出國(guó)歌的音樂,本實(shí)驗(yàn)采取蜂鳴器來(lái)奏響國(guó)歌。單片機(jī)的p33引腳用來(lái)控制蜂鳴器的工作,當(dāng)p33
10、輸出高電平時(shí),蜂鳴器不工作。當(dāng)p33引腳輸出低電平時(shí),三極管導(dǎo)通,蜂鳴器工作,同時(shí)二極管發(fā)光。蜂鳴器音樂電路如圖5示:圖 5 音樂發(fā)聲電路3.4 矩陣4x4鍵盤電路的設(shè)計(jì)本實(shí)驗(yàn)中用來(lái)控制的功能比較多,故采取按鍵控制的方法來(lái)實(shí)現(xiàn)控制功能。電路如圖6示:圖 6 矩陣4x4鍵盤電路 矩陣式鍵盤的按鈕識(shí)別辦法可以確定矩陣式鍵盤上何鍵被按下,采用的方法之一為“行掃描法”。行掃描法又稱為逐行(或列)掃描查詢法,是一種最常見的按鈕識(shí)別方法,鍵盤如上所示。具體實(shí)現(xiàn)過(guò)程如下:判斷鍵盤中有無(wú)鍵按下。將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵低于低電平線與4根
11、行線交叉的4個(gè)按鈕之中。若所有列線均為高電平,則按鍵中無(wú)鍵按下。判斷閉合鍵所在的位置:在確認(rèn)有鍵按下的情況下,即可進(jìn)入確定具體鍵的過(guò)程。操作是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其他線為高電平。在確定某根行線為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該線與置為低電平的行線交叉處的按鈕就是閉合的按鈕。3.5 外部rom存儲(chǔ)器電路設(shè)計(jì)由于設(shè)計(jì)要求要掉電后將數(shù)據(jù)保存,即重開電源后單片機(jī)要從上次掉電前得狀態(tài)繼續(xù)執(zhí)行,故采取i2c總線形式掛載外部程序存儲(chǔ)器來(lái)存儲(chǔ)掉電前得數(shù)據(jù)。原理圖如圖7所示:圖 7 外部rom存儲(chǔ)器電路i2c總線是一種用于ic器件之間連接的二進(jìn)制總線。它通過(guò)s
12、da(串行數(shù)據(jù)線)及scl(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件:不管是單片機(jī)、存儲(chǔ)器、lcd驅(qū)動(dòng)器還是鍵盤接口。at24c08是低功耗的cmos串行eeprom,內(nèi)含256*8位存儲(chǔ)空間,工作電壓寬,擦寫次數(shù)多,寫入速度快等特點(diǎn)。本設(shè)計(jì)中24c08的1、2、3腳是三條地址線,用于確定芯片的硬件地址。在開發(fā)板上均接地,第8腳和第4腳分別接正、負(fù)電源。第5腳sda為串行數(shù)據(jù)輸入輸出,數(shù)據(jù)通過(guò)這條i2c總線串行傳送,與單片機(jī)的p27連接。第6腳scl為串行時(shí)鐘輸入線與單片機(jī)的p26連接。sda與scl都需要和正電源間各接一個(gè)2k的上拉電阻。第7腳需接地。4 自動(dòng)
13、控制升旗裝置軟件設(shè)計(jì)4.1 系統(tǒng)總程序流程圖系統(tǒng)工作總程序流程圖如圖8所示:圖8 整體程序流程圖4.2 步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的軟件設(shè)計(jì)步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(及步進(jìn)角)??梢酝ㄟ^(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)也可以通過(guò)控制脈沖頻率來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。其工作流程圖如圖9所示: 圖9 步進(jìn)電機(jī)程序流程圖此次設(shè)計(jì)中,采用的為四相八拍的步進(jìn)電機(jī)控制方式。代碼中,先定義了要用到的步進(jìn)電機(jī)正轉(zhuǎn)和反轉(zhuǎn)的時(shí)序數(shù)組,以使后面的程序能夠隨時(shí)更改電機(jī)接收到的脈沖時(shí)序,
14、以達(dá)到實(shí)時(shí)地控制電機(jī)的正轉(zhuǎn)和反轉(zhuǎn),從而實(shí)現(xiàn)旗幟的上升與下降。更改脈沖時(shí)序的條件由所按下的鍵盤按鍵決定,所以可以實(shí)時(shí)地更改脈沖的時(shí)序,達(dá)到實(shí)時(shí)地控制電機(jī)轉(zhuǎn)動(dòng)方式。4.3 數(shù)碼管實(shí)時(shí)顯示的軟件設(shè)計(jì)數(shù)碼管顯示的部分硬件上是通過(guò)8255擴(kuò)展i/o芯片實(shí)現(xiàn)控制,且采用的為動(dòng)態(tài)數(shù)碼管顯示的方法,也就是六要數(shù)碼管共用的為一個(gè)八位數(shù)據(jù)線。上面函數(shù)的功能為在指定的數(shù)碼管上顯示指定的數(shù)字。實(shí)際中要顯示的數(shù)字不只有一位,所以必須在人的視覺停留的時(shí)間內(nèi),即1/12秒的時(shí)間內(nèi),把所有要顯示的數(shù)碼管全部點(diǎn)亮,才能給人感覺像是所有數(shù)碼管同一時(shí)刻全部點(diǎn)亮了。數(shù)碼管工作流程圖如圖10所示:圖 10 數(shù)碼管子程序流程圖4.4 國(guó)
15、歌音樂的軟件設(shè)計(jì) 音樂功能主要在兩個(gè)中斷中完成;定時(shí)器0中斷主要輸出一定頻率的方波,定時(shí)器1中斷完成音長(zhǎng)的控制,在完成特定音符的音長(zhǎng)后讀取下一個(gè)音符,并且更新定時(shí)器0的初始設(shè)置值。演奏時(shí),要根據(jù)音符的不同把對(duì)應(yīng)半周期的定時(shí)時(shí)間初始值送入定時(shí)器t0,再由定時(shí)器t1按時(shí)輸出高低電平,定時(shí)器控制音樂程序流程圖如圖11所示: 圖 11 定時(shí)器t0、t1控制音樂子程序流程圖4.5 矩陣鍵盤實(shí)時(shí)控制軟件設(shè)計(jì)本次設(shè)計(jì)采用的為4x4矩陣鍵盤,這種鍵盤是由16個(gè)按鍵組成的開關(guān)矩陣。其程序流程圖如圖12所示,程序中用來(lái)識(shí)別用戶按下的按鍵采用的方式為動(dòng)態(tài)掃描的方式,即分別對(duì)矩陣進(jìn)行行掃描,再進(jìn)行列掃描即可得到識(shí)別按
16、鍵所需的兩個(gè)坐標(biāo)值,在程序中定義全局變量test_x,test_y用來(lái)存儲(chǔ)鍵盤掃描得到的值。個(gè)體的程序設(shè)計(jì)中,因?yàn)閷?shí)時(shí)控制電機(jī)的轉(zhuǎn)動(dòng),音樂的開關(guān)均以用戶按下的按鍵為基準(zhǔn),故程序中多次要用到鍵盤掃描,所以將鍵盤掃描程序抽象出來(lái)形成一個(gè)單獨(dú)的函數(shù)scankeyboard(),提高編碼效率。圖12 鍵盤程序流程圖4.6 外部rom實(shí)時(shí)訪問(wèn)的軟件設(shè)計(jì)因?yàn)閞am存儲(chǔ)器的掉電易失性,而要達(dá)到掉電保存數(shù)據(jù)的效果,就必須將要保存的數(shù)據(jù)寫到rom中。本次設(shè)計(jì)中,采用外部程序存儲(chǔ)器24c08,采用的通訊協(xié)議為i2c串行總線方式,外部rom程序流程圖如圖13所示。具體的程序設(shè)計(jì)中,將主要對(duì)存儲(chǔ)器的操作抽象為兩個(gè)函數(shù)
17、以供調(diào)用,即存儲(chǔ)器寫函數(shù)write24c02(uint ch,uchar address),功能為每一次寫一字節(jié)到指定的存儲(chǔ)器地址上,存儲(chǔ)器讀函數(shù)read24c02(uchar address),功能為讀出指定地址上的一個(gè)字節(jié)。圖 13 外部rom程序流程圖5 詳細(xì)儀器清單表格 1 儀器清單儀器名稱數(shù)量stc89c52芯片18255a芯片1uln2003l1步進(jìn)電機(jī)1七段led數(shù)碼顯示器6按鍵166 總結(jié)與思考及致謝本系統(tǒng)采用單片機(jī)stc89c52作為自動(dòng)控制升降旗系統(tǒng)的檢測(cè)和控制核心,采用由單片機(jī)控制的步進(jìn)電機(jī)帶動(dòng)國(guó)旗升降,通過(guò)用按生鍵來(lái)實(shí)現(xiàn)對(duì)國(guó)旗升降的自動(dòng)控制,最終與實(shí)踐相結(jié)合的升降旗系統(tǒng)
18、,實(shí)現(xiàn)單片機(jī)與人們活的密切應(yīng)用。做本設(shè)計(jì),深刻的體會(huì)到,要把各功能模塊搞懂才能達(dá)到各硬件的融合,達(dá)到硬件和軟件的結(jié)合。軟件設(shè)計(jì)中,由于匯編的繁瑣性,本系統(tǒng)采用c來(lái)編寫程序,其實(shí)c是每一條語(yǔ)句可轉(zhuǎn)化為匯編,匯編是更接近硬件的語(yǔ)言,寫匯編可以對(duì)單片機(jī)的實(shí)際操作有更好的理解,故有時(shí)間可以嘗試寫“雙語(yǔ)”。 感謝學(xué)校能給我們這次機(jī)會(huì),讓我們有一個(gè)發(fā)揮自己的平臺(tái),讓我們把從課本學(xué)到的知識(shí)用到實(shí)際生活當(dāng)中,從中得到鍛煉。在系統(tǒng)設(shè)計(jì)過(guò)程中,劉老師、方老師、譚老師、周老師等提出了許多寶貴的意見,在此深表感謝!同時(shí)得到了在校老師和同學(xué)們的支持與幫助,在此表示感謝!參考文獻(xiàn)1 朱定華,戴汝平.單片微機(jī)原理與應(yīng)用(m
19、).北京:清華大學(xué)出版社20032 張?chǎng)螁纹瑱C(jī)原理及應(yīng)用(m).電子工業(yè)出版社.20093 彭秀華單片機(jī)高級(jí)語(yǔ)言c51windows環(huán)境編程與應(yīng)用(m).電子工業(yè)出版社 20014 全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽組委會(huì)全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)作品選編(m).北京:理工大學(xué)出版社2003年5 彭為單片機(jī)典型系統(tǒng)設(shè)計(jì)實(shí)例精講(m).電子工業(yè)出版社20056 沈慶陽(yáng)8051單片機(jī)實(shí)踐與應(yīng)用(m).清華大學(xué)出版社20027 張立科單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航(m).北京:人民郵電出版社 20048 陳濤單片機(jī)應(yīng)用及c51程序設(shè)計(jì)(m).機(jī)械工業(yè)出版社2007附錄一:系統(tǒng)程序代碼#include #includ
20、e #include #define uchar unsigned char#define uint unsigned intuchar code ffw8=0x75,0x65,0x6d,0x4d,0x5d,0x1d,0x3d,0x35;/步進(jìn)電機(jī)正轉(zhuǎn)數(shù)組uchar code rev8=0x35,0x3d,0x1d,0x5d,0x4d,0x6d,0x65,0x75;/步進(jìn)電機(jī)反轉(zhuǎn)數(shù)組/setflag用標(biāo)志定位是否有效test_x,test_y用于定義16個(gè)按鍵中的任一個(gè)uchar test_x=10,test_y=10,setflag=0;uchar setfalse=0;uint count
21、er=0;/用于定義每隔多少個(gè)脈沖數(shù)碼管上數(shù)字自增/定義四個(gè)變量分別存儲(chǔ)四個(gè)要顯示的數(shù)位的值four顯最高位第四位的值,依此類推uint sum=0,four=0,three=0,two=0,one=0;uint four_max=0,three_max=0,two_max=0,one_max=0;/定義四個(gè)變量,用來(lái)定位停止/音樂模塊用到的些定義常量,變量,數(shù)組unsigned char volatile flagbeat;/基本節(jié)拍單位計(jì)數(shù)變量unsigned int volatile freqtemp;unsigned char volatile music_temp; /暫時(shí)存放從mu
22、sictable數(shù)組中讀出的變量unsigned char volatile beat;unsigned char volatile freq;/簡(jiǎn)譜碼對(duì)應(yīng)t值數(shù)組的下標(biāo)unsigned char volatile *pmusic;sbit pin_buzzer=p33; /串行外存定義的量#definewritedeviceaddress 0xa0/定義器件在iic總線中的地址#definereaddviceaddress 0xa1sbitscl=p26;sbitsda=p27;unsigned char x1,x2,x3;unsigned int code freqtab= /簡(jiǎn)譜對(duì)應(yīng)的簡(jiǎn)
23、譜碼、t值65535,63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030;unsigned char code musictable=/音符節(jié)拍碼0x52,0x84,0x02,0x82,0x82,0x01,0x81,0x52,0x61,0x71,0x84,0x84,0xa2,0x82,0x91,0xa1,0xc2,0x01,0xc1,0xc4,0xa2,0x01,0xa1,0x82,0x01,0xa1,0xc2,0x01,0xa1,0x94,0x94,0x04,0xd4,0xc4
24、,0x94,0xa4,0xc2,0xa4,0xc2,0xa2,0x91,0xa1,0x82,0x01,0x91,0xa4,0xc2,0x01,0x61,0x82,0xa2,0x01,0xa1,0xc2,0x01,0xc1,0x92,0x92,0x92,0x62,0x01,0x61,0x94,0x02,0x52,0x84,0x02,0x82,0xa4,0x02,0xa2,0xc4,0x04,0xc4,0x04,0x82,0x01,0xa1,0xc2,0x01,0xc1,0xd4,0xc4,0xa2,0x01,0x81,0xc2,0xc2,0xc2,0xa2,0x82,0x54,0x84,0x32
25、,0x01,0x81,0xc2,0xc2,0xc2,0xa2,0x82,0x54,0x84,0x54,0x84,0x54,0x84,0x84,;unsigned char const dis_table16= 0xa0, /*0*/ 0xbb, /*1*/ 0x62, /*2*/ 0x2a, /*3 */ 0x39, /*4*/ 0x2c, /*5 */ 0x24, /*6*/ 0xba, /*7*/ 0x20, /*8*/ 0x28, /*9 */;void delayms(unsigned int number) unsigned char temp;for(;number!=0;numb
26、er-) for(temp=112;temp!=0;temp-) ;/開始總線void start() sda=1;scl=1;sda=0;scl=0;/結(jié)束總線void stop() scl=0;sda=0;scl=1;sda=1;/發(fā)ack0void noack() sda=1;scl=1;scl=0;/測(cè)試ackbit testack() bit errorbit;sda=1;scl=1;errorbit=sda;scl=0;return(errorbit);/寫入8個(gè)bit到24c08write8bit(unsigned int input) unsigned char temp;fo
27、r(temp=8;temp!=0;temp-) sda=(bit)(input&0x80);scl=1;scl=0;input=input1;/寫入一個(gè)字節(jié)到24c08中void write24c02(uint ch,uchar address) start();write8bit(writedeviceaddress);testack();write8bit(address);testack();write8bit(ch);testack();stop();delayms(10);/從24c08中讀出8個(gè)bituchar read8bit() unsigned char temp,rbyte
28、=0;for(temp=8;temp!=0;temp-) scl=1;rbyte=rbyte1;rbyte=rbyte|(unsigned char)(sda);scl=0;return(rbyte);/從24c08中讀出1個(gè)字節(jié)uchar read24c02(uchar address) uchar ch;start();write8bit(writedeviceaddress);testack();write8bit(address);testack();start();write8bit(readdviceaddress);testack();ch=read8bit();noack();
29、stop();return(ch);void delay()/延時(shí)主要用于控制display函數(shù)執(zhí)行速度,以及電機(jī)的轉(zhuǎn)帶 uint i = 0; for(i = 0; i20;i+);void delaytest()/延時(shí)主要用作按鍵消抖作用。 uint i = 0; for(i = 0; i25000;i+);/動(dòng)態(tài)掃描4x4鍵盤,不停的掃描則可以確實(shí)按下的為哪一個(gè)按鍵。void scankeyboard() uint i,j,pc_data = 0; a8255_con=0x89; a8255_pb=0xff; a8255_pa=0xff; delay(); pc_data=a8255_p
30、c; for(j = 0;j4;j+) if(pc_data&(1j) = (1j) for(i = 0;i4;i+) a8255_pa=1i; delay(); pc_data=a8255_pc; if(pc_data&(1j) = (1j) test_x = i; test_y = j; break;/定時(shí)器,音樂模塊的一些初始化void initial()pmusic=musictable; beat=1; flagbeat=0; tmod=0x11;/定時(shí)器0,1都工作16位計(jì)數(shù)方式 et0=1; /允許定時(shí)器0溢出中斷; et1=1; /允許定時(shí)器1溢出中斷 ea=1; tl1=0x
31、f0; th1=0xff; tr1=1;it0=1; /外中斷跳變產(chǎn)生中斷ex0=1;/數(shù)碼管顯示方法,在指定的place位置顯示num數(shù)字。void display(uchar place,uint num) uchar i = 0,display_num = 0; uint test = 0; a8255_con=0x89; a8255_pb=0xff; a8255_pa=0xff; delay(); if(place = 1) test = (0x10); else if(place = 2) test = (0x11); else if(place = 3) test = (0x12)
32、; else if(place = 4) test = (0x13); else if(place = 5) test = (0x14); else if(place = 6) test = (0x15); a8255_pa=test;if(num = 0) display_num = dis_table0; else if(num = 1) display_num = dis_table1; else if(num = 2) display_num = dis_table2; else if(num = 3) display_num = dis_table3; else if(num = 4
33、) display_num = dis_table4; else if(num= 5) display_num = dis_table5; else if(num = 6) display_num = dis_table6; else if(num = 7) display_num = dis_table7; else if(num = 8) display_num = dis_table8; else if(num = 9) display_num = dis_table9; a8255_pb=display_num; delay();/主函數(shù)入口,主要用來(lái)組合音樂,電機(jī),顯示模塊以及通過(guò)按鍵實(shí)時(shí)的控制步進(jìn)機(jī),音樂播放void main(void)/用于掉電保存的數(shù)據(jù),每次開機(jī)時(shí),用于加載掉電前的數(shù)據(jù)uint stonum=read24c02(0x04);four_max=stonum/100;three_max=stonum/10%10;two_max=stonum%10;four=four_ma
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 營(yíng)運(yùn)車輛轉(zhuǎn)讓協(xié)議書范本
- 2025年全球及中國(guó)藻源蝦青素行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)低扭矩軸承行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)卡布奇諾發(fā)泡劑行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 二零二四樣板房樣板間銷售合作協(xié)議3篇
- 實(shí)驗(yàn)室裝修設(shè)計(jì)委托協(xié)議
- 物聯(lián)網(wǎng)工程居間合同
- 2024-2027年中國(guó)電腦散熱器行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 半導(dǎo)體設(shè)備研發(fā)及生產(chǎn)合同
- 銷售模型制作合同
- 第八講 發(fā)展全過(guò)程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 實(shí)體瘤療效評(píng)價(jià)標(biāo)準(zhǔn)RECIST-1.1版中文
- 王崧舟:學(xué)習(xí)任務(wù)群與課堂教學(xué)變革 2022版新課程標(biāo)準(zhǔn)解讀解析資料 57
- 企業(yè)新春茶話會(huì)PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計(jì)算方法
- 2022年上海市初中畢業(yè)數(shù)學(xué)課程終結(jié)性評(píng)價(jià)指南
- DIC診治新進(jìn)展課件
- 公路工程施工現(xiàn)場(chǎng)安全檢查手冊(cè)
- 1汽輪機(jī)跳閘事故演練
- 禮品(禮金)上交登記臺(tái)賬
- 普通高中英語(yǔ)課程標(biāo)準(zhǔn)詞匯表
評(píng)論
0/150
提交評(píng)論