第一篇:單片機課程設計
單片機課程設計
課題: 簡易電子琴設計
學
院:
電氣與信息工程學院 專
業:
電子信息工程 姓
名:
李琳琳 學
號:
093411106
指導老師:
田巍
河南城建學院
2014年
01 月
01 日
第二篇:單片機課程設計
課 程 設 計
設計題目: 基于單片機的8*8點陣顯示數字設計
學生姓名: 指導教師: 二級學院: 專
業: 班
級: 學
號:
目 錄
摘要??????????????????????????Ⅱ 1 方案選擇及總體設計???????????????????1 1.1方案確定?????????????????????1 1.1.1功能要求????????????????????1 1.1.2方案確定????????????????????1 1.2器件選擇?????????????????????1 2 控制系統設計??????????????????????2 2.1 控制系統硬件設計?????????????????2 2.1.1整體模塊設計??????????????????2 2.1.2單片機AT89C51?????????????????2 2.1.3單片機最小系統設計???????????????5 2.1.3.1晶振電路設計?????????????????5 2.1.3.2復位電路設計?????????????????5 2.1.4驅動電路設計??????????????????6 2.1.5LED點陣顯示設計????????????????9 2.2控制系統軟件設計?????????????????11 2.2.1軟件設計思想??????????????????11 2.2.2主程序流程圖??????????????????11 2.2.3子程序流程圖??????????????????13 3 系統仿真及調試????????????????????14 3.1系統調試?????????????????????14 3.2系統仿真?????????????????????14 3.2.1protrus軟件仿真????????????????14 3.2.2程序??????????????????????14 總結?????????????????????????^?17 參考文獻????????????????????????18
I
摘 要
現在市場上各類基于LED的顯示屏較多,但大部分產品為單一模式的LED顯示屏,其在顯示內容的更換及顯示屏的重組等方面都存在不便之處。但隨著信息化社會的迅速發展,LED顯示屏正在向顯示內容豐富、信息更改方便等方面發展。因此制作一款多功能的LED廣告顯示屏是非常有意義地。
LED驅動顯示采用動態掃描方法,動態掃描方式是逐行輪流點亮,這樣掃描驅動電路就可以實現多行的同名列共用一套列驅動器。以8×8點陣為例,把所有同一行的發光管的陽極連在一起,把所有同一列的發光管的陰極連在一起(共陽的接法),先送出對應第1行發光管亮滅的數據并鎖存,然后選通第1行使其燃亮一定的時間,然后熄滅;再送出第2行的數據并鎖存,然后選通第2行使其燃亮相同的時間,然后熄滅;第8行之后,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現象,就能看到顯示屏上穩定的圖形。該方法能驅動較多的LED,控制方式較靈活,而且節省單片機的資源。
本次課程設計的題目為8×8點陣數字顯示,設計的任務為使用單片機控制8×8的點陣顯示0到9的數字,不僅顯示清晰,并且每經過一定時間,顯示的數字加一,從0 到 9 循環。以AT89C51單片機為核心,采用串行傳輸、動態掃描技術,制作一款模塊化LED多功能顯示屏。
在資料收集方面,主要是參考了《51單片機原理及應用—基于Keil C與Proteus》一書,結合了一些網絡資料,以及一些集成塊的使用說明書。
在整個工作過程中,根據收集來的資料繪制出大概的原理圖,然后通過Proteus仿真,與此同時運用Keil 編程,用Keil 與Proteus進行聯調,調試成功后確定了原理圖和控制程序。
II
第一章 方案選擇及總體設計
1.1 方案確定
1.1.1 功能要求
1、采用STC-51單片機作為微處理器。
2、設計一個8×8點陣LED數碼字符顯示器。
3、在目測條件下LED顯示屏各點亮度均勻、充足、穩定、清晰無串擾。
4、動態顯示“0——9”幾個字符。
1.1.2 方案確定
采用ST89C51單片機作為微處理器,將共陽極二極管用共陰型接法連接成8×8點陣LED數碼字符陣列,通過程序控制,采用動態顯示,建立字符庫“0——9”。
1.2 器件選擇
微處理器采用ST89C51系列單片機,ST89C51單片機是這幾年在我國非常流行的單片機,是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能單片機,可擦除只讀存儲器可以反復擦除100次,具有低功耗、高性能的特點。
AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
第二章 控制系統設計
2.1控制系統硬件設計
2.1.1整體模塊設計
本設計行、列驅動電路,顯示器電路,運用單片機的智能化,系統的將每個功能電路模塊連接在一起,總體結構設計如圖2-1所示。
點陣顯示器行驅動電路PC上位機單片機8×8點陣LED顯示器電路點陣顯示器列驅動電路
圖2-1 硬件系統框圖
此次需要實現的功能是利用一個ST89C51,一個8×8LED點陣,動態顯示“0——9”10個字,采用PC上位機驅動顯示電路。
2.1.2 單片機AT89C51 AT89C51是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含4k bytes的可反復擦寫的只讀程序存儲器(PEROM)和128 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產, 兼容標準MCS-51指令系統,片內置通用8位中央處理器(CPU)和Flash存儲單元,功能強大AT89C51單片機能提供許多高性價比的應用場合,可靈活應用于各種控制領域。
AT89C51單片機引腳圖如圖2-2所示。
圖2-2 AT89C51引腳圖
AT89C51管腳說明: VCC:供電電壓。GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1 口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行
存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下所示: P3口管腳
備選功能: P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.7 /RD(外部數據存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:
來自反向振蕩器的輸出。
2.1.3 單片機最小系統設計
單片機的最小系統是能夠讓單片機工作的最小硬件電路。除了單片機外,最小系統還包括復位電路和時鐘電路。
復位電路:單片機的復位電路接在復位信號RST上,復位電路用于將單片機內部電路的狀態恢復到初始值。需要復位時按下按鈕即可。
時鐘電路:時鐘電路為單片機工作提供基本時鐘。時鐘電路中包含一個晶體振蕩器,簡稱晶振,頻率范圍是1.2~12MHz。晶體振蕩頻率越高,系統的時鐘頻率也越高,單片機的運行速度也就越快
ST89C51單片機最小系統電路由復位電路、晶振電路兩部分組成。2.1.3.1 晶振電路設計
ST89C52單片機芯片內部設有一個由反向放大器構成的振蕩器,XTAL1和XTAL2分別為振蕩電路的的輸入端和輸出端,時鐘可有內部或外部生成,在XTAL1和XTAL2引腳上外接定時元件,內部振蕩電路就會產生自激振蕩。系統采用的定時元件為石英晶體和電容組成的并聯諧振回路。晶振頻率采用12MHZ,C1、C2的電容值取30pF,電容的大小起頻率微調的作用。晶振電路圖如圖2-3所示。
C1XTAL130pFC2XTAL230pF圖2-3 晶振電路圖
X112MHZ
2.1.3.2 復位電路設計
ST89C51單片機在啟動運行時或者出現死機時需要復位,使CPU以及其他功能部件處于一個確定的初始狀態,并從這個狀態開始工作。單片機有多種復位方式,常用的復位操作有上電復位和手動復位方式。本設計采用最簡單的上電復位方式,電路如圖2-4所示。上電復位是通過外部復位電路的電容充電來實現的,復位電路產生的復位信號(高電平有效)由RST引腳送入到內部的復位電路,對ST89C51單片機進行復位,復位信號要持續兩個機器周期(24個時鐘周期)以上,才能使ST89C51單片機可靠復位。當上電時,C1相當于短路,有時碰到干擾時會造成錯誤復位,可在復位端加個去耦電容,可以取得很好的效果。
ST89C51單片機復位電路如下圖所示:
VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC
圖2-4 上電復位電路圖
圖2-5 按鍵電平復位電路圖
復位電路工作原理:
上電瞬間RST引腳的電位與VCC等電位,RST引腳為高電平,隨著電容C5充電電流的減少,RST引腳的電位不斷下降,可以保持RST引腳在為高電平的時間內完成復位操作。
當單片機已在運行當中時,按下復位鍵S5后再松開,也能使RST引腳為一段時間的高電平,從而實現ST89C51單片機復位。
2.1.4 驅動電路設計
驅動電路圖如圖2-6所示。
圖2-6 驅動電路圖
74LS245引腳圖如圖2-7所示。
圖2-7 74LS245引腳圖
引出端符號: A A總線端
B B總線端
/G 三態允許端(低電平有效)DIR 方向控制端
74LS245是用來驅動LED或者其他的設備,它是8路同相三態雙向總線收發器,可雙向傳輸數據。74LS245還具有雙向三態功能,既可以輸出,也可以輸入數據。
如果用89C51的P0口輸出到數碼管,那就要考慮到數碼管的亮度以及P0口帶負載的能力,當89C51單片機的P0口總線負載達到或超過P0最大負載能力時,必須接入74LS245等總線驅動器。選用74LS245提高驅動能力。P0口的輸出經過74LS245提高驅動后,輸出到數碼管顯示電路。
工作原理:
當片選端/CE低電平有效時,DIR=“0”,信號由B向A傳輸;(接收)DIR=“1”,信號由A向B傳輸;(發送)當CE為高電平時,A、B均為高阻態。
正向點亮一顆LED,至少也要10~20mA,若電流不夠大,則LED不夠大。而不管是ST89C51的I/O口,還是TTL、CMOS的輸出端,其高態輸出電流都不是很高,不過1~2mA而已。因此很難直接高態驅動LED,這時候就需要額外的驅動電路,通常有共陽型與共陰型LED陣列驅動電路,本設計才用共陰型高態掃描信號驅動電路。
共陰型LED陣列驅動電路采用高態掃描,也就是任何時間只有一個高態信號,其它則為低態。一行掃描完成后,再把高態信號轉化到近鄰的其他行,掃描信號接用一個反向驅動器,ST89C51本身內置一個反向驅動器,本設計將ST89C51作為點矩陣顯示控制系統的控制核心,通過點矩陣實時顯示并移動字符。
單片機的串口與行驅動器相連,用來發送顯示數據信息。P3口與LED陣列的行引腳相連,送出數據、地址以及系統控制信號。輸出低態時,最大可吸取0.5A,即500mA,若每個LED取30mA,7個LED同時點亮,需要210mA,完全滿足LED點亮的基本條件。
所要顯示的信號送入74LS245芯片,然后連接到LED陣列的列陣腳。對于高態的顯示信號,將可提供其所連接LED的驅動電流,而這個驅動電流經過LED到輸出端,形成正向回路,即可點亮該LED。其中每個晶體管任何時間只需負
責驅動一個LED,所以選擇30mA射極電流的晶體管。驅動電路如圖2-6所示。
2.1.5 LED點陣顯示設計
本設計采用ATMEL公司的AT89C51作矩陣顯示控制系統控制核心,12MHZ晶振,8?8點陣共陽LED顯示器。其中,P0口作為字符數據輸出口,P3口為字符顯示掃描輸出口,第31腳(EA)接電源,改變電阻(270×8)的大小可改變顯示字符的亮度,驅動用74LS245芯片。
本設計LED矩陣顯示器電路選用8×8點陣模塊,系統由單片機控制。LED顯示屏是將發光二極管按行按列布置的,在掃描驅動方式下可以按行掃描按列控制,也可以按列掃描按行控制。本文就是使用1塊8×8點陣,采用按列掃描按行控制控制方式,掃描順序自左向右,以滿足數字顯示的要求。8×8點陣LED結構如圖2-8所示。
8×8點陣LEDabcdefgh12345678
圖2-8 LED數碼顯示管
8×8 點陣LED的工作原理:LED點陣的顯示方式是按顯示編碼的順序,一行一行地顯示。對于共陽型的點陣來說,當某一點所在的行對應高電平“1”并且其所在的列對應低電平“0”的時候,這一點就會被點亮。將每一行的顯示時間進行一定的延時,由于人的視覺暫留現象,就會感覺到8行LED是在同時顯示的。若顯示的時間太短,則亮度不夠,若顯示的時間太長,將會感覺到閃爍。圖2-9為8×8點陣LED外觀及引腳圖,其等效電路如圖2-10所示,只要其對應的X、Y軸順向偏壓,即可使LED發亮。例如如果想使左上角LED點亮,則Y0=1,X0=0即可。應用時限流電阻可以放在X軸或Y軸。一個8×8點陣是由64個發光二極管按規律組成的,如圖2-10所示。圖中,行接高電平,列接低電平,發光二極管導通發光。
圖2-9 8×8點陣LED外觀及引腳圖
圖2-10 8×8點陣LED等效電路
8×8點陣數字顯示的編碼原理: 8×8點陣數字顯示主要應用行掃描動態顯示的方法實現,如圖2-11所示,將行線依次置零,一次對列線編碼,有紅色填充部分為1,無填充部分為0。
圖2-11 8×8點陣數字顯示的編碼原理
如此可得到“0”的編碼為{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:
{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}
//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}
//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}
//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}
//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}
//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}
//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}
//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}
//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}
//9 2.2控制系統軟件設計
2.2.1 軟件設計思想
主程序先進行設置中斷,并啟動,再進行鍵盤掃描載入“0——9”字型,然后判斷一組字型是否掃描完,按不同情況進行循環調用子程序。進入子程序后,首先設置相應的程序,反復調用顯示子程序,并在顯示過程中反復調用鍵盤掃描子程序進行延時,判斷是否退出相應的方式顯示子程序。設計過程中,能很好得提高按鍵響應速度。
2.2.2 主程序流程圖
主程序首先設置并啟動T0中斷,然后調用初始化程序,為后面程序要用到的數據調入,并清零一些用到的數據單元,然后載入“0——9”字型,進行掃描。圖2-12為主程序流程圖。
圖2-12 主程序流程圖
2.2.3 子程序流程圖(定時中斷服務程序)
圖11 子程序流程圖(定時中斷服務程序)
第三章 系統仿真及調試
3.1系統調試
根據硬件電路圖核對了元器件的型號、極性,安裝是否正確,檢查硬件電路連線是否與電路原理圖一致,檢查電路元器件是否都已經連接好。
通電后,用示波器檢測單片機的復位和晶振電路是否有復位信號和振蕩信號。
3.2 系統仿真
3.2.1 proteus軟件仿真
使用proteus原理及仿真如圖3-1所示。
如圖3-1 proteus原理及仿真圖
3.2.2 程序
#include
{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00
};uchar i=0,t=0,Num_Index;//主程序 void main(){ P3=0x80;
Num_Index=0;
//從0開始顯示
TMOD=0x00;
//T0方式0 TH0=(8192-2000)/32;//2ms定時
TL0=(8192-2000)%32;IE=0x82;
//允許T0中斷
TR0=1;
//啟動T0 while(1);}
//T0中斷函數
void LED_Screen_Display()interrupt 1 { TH0=(8192-2000)/32;
//恢復初值
TL0=(8192-2000)%32;P0=0xff;
//輸出位碼和段碼
P0=~Table_of_Digits[Num_Index*8+i];P3=_crol_(P3,1);
//P3循環向左一位 //5 //6 //7
//8 //9
}
if(++i==8)i=0;if(++t==250){
} t=0;
//每屏一個數字由8個字節構成 //每個數字刷新顯示一段時間
if(++Num_Index==10)Num_Index=0;//顯示下一個數字
總結
經過單片機的課程設計,我有了很大的收獲。
首先,就是讓我加深了對單片機的掌握和理解與應用,知道單片機到底是怎樣控制點陣,怎樣應用在生活中的。并且讓我懂得了要善于思考,追求嚴謹,認真解決問題,才會有更多的收獲。
然后,提高了通過查閱資料解決問題的能力。通過查閱大量的相關資料,詳細了解了LED的發光原理和LED顯示屏的原理,了解了LED的現狀,清楚地了解了LED顯示屏與其它顯示屏相比較有那些優點,明確了研究目標。并且通過對單片機資料的查閱和應用,更進一步增加了對單片機知識的理解和運用能力。并證實了自己的思路:“查資料→思考總結→運用→找出差錯,再查資料和向別人詢問→再次運用”的正確性。
最后,本系統能夠完成設計任務,能夠顯示數字0-9,并且顯示也較為穩定清晰。本系統具有硬件少,結構簡單,容易實現,性能穩定可靠,成本低等特點。在本次課程設計中,主要使用了Proteus和Keil等軟件進行硬件電路和控制程序的設計,加深了對這些軟件的了解。感到Proteus對電子專業的同學來說是一個很有用的軟件。總體來說這次的課程設計很成功,達到了預想的目的:學到了知識,提高了能力,完成了任務。
參考文獻
[1] 張靖武,周靈彬 《單片機系統的PROTEUS設計與仿真》北京 電子工業出版社 [2] 吳金戌,沈慶陽,郭庭吉 《8051單片機實踐與應用》北京 清華大學出版社 [3] 李群芳,肖看 《單片機原理、接口及應用》北京 清華大學出版社
[4] 張毅剛,彭喜元等 《新編MCS-51單片機應用設計 》黑龍江 哈爾濱工業大學出版社 [5] 李朝青,劉艷玲編著 《單片機原理及接口技術》北京 航空航天大學出版社
第三篇:單片機課程設計
基于單片機的火災智能報警控制系統的設計
前言
在各種災害中,火災是最經常、最普通地威脅公眾安全和社會發展的災害之一。人類能夠對火進行利用和控制,是文明進步的一個重要標志?;?,給人類帶文明進步、光明和溫暖。但是,失去控制的火,就給人類造成災害。據統計,我國 70 年代火災年平均損失不到 2.5 億元,80 年代火災年平均損失不到
3.2 億元。進入 90 年代,特別是 1993 年以來,火災造成的直接財產損失上升到年均十幾億元,年均死亡 2000 多人。2010年上海靜安區高層住宅著火,導致58人死亡,70余人受傷。2014年1月云南香格里拉大火,燒毀房屋100多棟,直接經濟損失1億多元人民幣。火災事件經常發生,防止火災事故關系到人民群眾的生命財產安全和社會和諧穩定?,F在各種電子產品的普及,再加上人們防火意識的不強,這些都給火災的發生帶來了巨大的安全隱患。
對于火災最關鍵的問題在于預防,目前防火報警系統趨于智能化、自動化,靈敏程度也越來越高。在這種背景下,基于單片機的火災智能報警控制系統能突顯出其巨大的優越性。目前,國內大多數偏重于商場、賓館、高級寫字樓、大型倉庫等大型火災報警系統的研發和設計。本系統側重于小型火災智能報警系統的設計,可在火災發生初期檢測到并且報警,還能夠實時顯示溫度和煙霧濃度。
第四篇:單片機課程設計
《單片機技術》課程設計說明書
音樂盒
院、部:電氣與信息工程學院 學生姓名:劉亮 指導教師:凌云職稱講師 專業:電子信息工程 班級:電子1302班 學
號:1330340220 完成時間: 2016年1月11日
摘要
音樂盒起始于中世紀歐洲,當時為使教會的鐘塔報時,而將大小的鐘表上裝置機械設備,被稱為可發出聲音的組鐘。
本次的課題主要分為數碼管顯示模塊、供電模塊、按鍵模塊、發聲模塊、復位電路和AT89S52單片機。數碼管顯示模塊采用共陽極數碼管,通過P0口控制,實現歌曲序號的顯示;供電模塊采用+5V供電;按鍵通過P3口控制,實現歌曲播放順序的調換和暫停播放功能;揚聲器由P3.1口控制,實現歌曲播放。
主要的工作過程是通過按鍵控制下一首和上一首播放以及暫停和播放,同時有數碼管顯示當前正在播放的歌曲序號,揚聲器播放出音樂。
此次設計主要用到PROTEUS、KEIL編程和AD作圖軟件。用PROTEUS畫出原理圖,用KEIL編寫程序,將程序導入原理圖中進行仿真。最后用AD畫出PCB圖,打印圖紙進行腐蝕焊接。將程序下載到單片機中,利用I/O口產生方波,驅動揚聲器,發出音調,從而演奏樂曲。
關鍵詞:揚聲器;AT89S52單片機;I/0口
目 錄
背景意義、任務要求及設計原理、框圖··························1 1.1 背景意義···············································1 1.2 任務要求···············································1 1.3 設計原理···············································1 1.4 設計框圖···············································1 2 硬件系統····················································3 2.1 數碼管模塊··············································3 2.2 鍵盤模塊················································3 2.3 復位電路················································3 2.4 蜂鳴器模塊··············································4 3 軟件系統·····················································5 3.1 主程序介紹及流程圖······································5 3.2 各個模塊及功能介紹······································6 3.2.1 定時器模塊········································6 3.2.2 延時模塊··········································6 3.2.3 中斷模塊··········································7 3.2.4 數碼管顯示模塊 ···································9 4 電路仿真和程序檢測··········································10 5 實物制作及調試··············································11 結束語 ····························································12 參考文獻 ··························································13 致 謝· ···························································14 附 錄· ···························································15 背景意義、任務要求及設計原理、框圖
1.1 背景意義
音樂盒的起源是中世紀歐洲的教會用來鐘塔報時,后來,隨著工業的發展,逐漸的體積變小,功能變多,不過多數以機械音樂盒為主,這樣的音樂盒大部分體積較大音調單一,容易受到外界的影響,而且,代價昂貴。
此次設計的音樂盒,是基于單片機設計制作的電子音樂盒。與傳統的相比更加小巧,音質更優美而且可以演奏和弦音樂。單片機音樂盒的動力是+5V的電源,制作簡單,可以批量生產,控制功能強大,可以隨時的加減歌曲,使用更加的方便而且不易受到外界的影響而音質變壞,另外,可以根據需要,添加流水彩燈等外設更改外觀,使音樂盒的功能更加豐富。
1.2 任務要求
此次的設計要求為:設計一個具有特定功能的音樂盒,要求包含軟件和硬件兩大模塊,能夠通過按鍵來選擇曲目,切換曲目,顯示器來顯示曲目編號,能夠準確的播放曲目。
1.3 設計原理
本次的設計最主要的在于蜂鳴器的設計,想要蜂鳴器發出不同的音調,通過單片機的定時器產生一定長度的方波,方波脈沖驅動蜂鳴器發聲。要產生音頻脈沖,只需要算出某一音頻的周期,然后取半周期的時間定時。利用定時器計時這半個周期時間,每當計時到之后,就將輸出脈沖的I/O反向,然后在重復計時此周期時間再對I/O口反相,就可在I/O口得到此頻率的脈沖。如中音DO,頻率為523HZ,其周期T=1/523=1912微秒,因此只要令計數器定時1912/2=926。在每計數956次時將I/O口反相,就可以得到中音。
每當有鍵按下時,判斷鍵值,啟動計數器T0,產生一定頻率的脈沖,驅動蜂鳴器,放出曲目。數碼管采用共陽極數碼管,通過單片機P0口控制,實現曲目序號的顯示。功能鍵盤采用按鍵開關,通過P3口控制,實現曲目播放順序的調換和暫停播放功能,蜂鳴器由P3.1口控制,實現音樂播放。
1.4 設計框圖
單片機接+5V電源供電,晶振電路負責產生單片機所需要的時鐘信號,通過功能鍵產生外部中斷,控制音樂盒的上一曲和下一曲。在由I/O口輸出控制蜂鳴器發聲。另外可以用復位電路對程序初始化,在程序出錯時,重啟單片機。具體 的設計框圖如圖1所示。
圖1 總體設計框圖
編程設置好定時時間,通過編程器寫入AT89S52單片機系統中。由AT89S52單片機的定時器每秒通過P1口控制LED數碼管顯示,復位信號由按鍵輸入,沒按一次,系統恢復原始狀態。電源,晶振電路,單片機,功能鍵,和揚聲器部分具體介紹在后面有介紹。硬件系統
2.1 數碼管模塊
歌曲顯示部分用數碼管來顯示,LED顯示器件是通過發光二極管顯示字段的器件,該設計采用的是7段數碼管,原理是由P0口控制數碼管中的7端LED發光二極管,通過單片機給予P0口不同的數值來顯示不同的數字。數碼管分為共陽極和共陰極兩種,共陽極的數碼管,當管腳是低電平有效,而陰極的數碼管,是管腳高電平有效。這樣,單片機給予P0口的數值將會發生差異,也就是說,不同種類的數碼管,對應的ASCII碼就會不同。本次選用的是共陽極數碼管,其引腳如圖2所示。
圖2 數碼管引腳
2.2 鍵盤模塊
本次的鍵盤模塊采用按鍵開關這樣操作簡單,辨別容易的開關。用到4個按鍵開關,分別是復位按鍵,下一首按鍵,上一首按鍵,和暫停按鍵。上一首按鍵和下一首按鍵接單片機的外部中斷0,外部中斷1。暫停按鍵接定時器1,復位按鍵在復位電路中,接單片機RES。
2.3 復位電路
復位電路主要用于初始化程序,當單片機音樂盒發生死機時,用復位電路初始化程序來重啟單片機。兩個電容,兩個電阻和一個復位按鍵組成,當單片機死機時,按下按鍵,即可重啟,其電路原理圖如圖3所示。
圖3 復位電路原理圖
2.4 揚聲器模塊
揚聲器模塊最為重要,當單片機輸出脈沖經過揚聲器時,會是揚聲器發聲,不過因為設計中用到的元件較多,不能保證通過揚聲器的電流足夠大,所以要用三極管放大電路來放大電流,這樣才能讓揚聲器正常工作,具體的原理圖如圖4所示。
圖4 揚聲器原理圖 軟件系統
3.1 主程序介紹及流程圖
一個系統的正常運行不僅需要硬件的運行,還需要軟件系統的支持。同時軟件要根據硬件的連接來設計,來配合硬件的工作,例如,本次的設計用到的是P 0口和P3口。所以,設計的時候就要注意,只能用到P0和P3。本次用到的軟件設計選用課堂學到的匯編語言。另外用KEIL軟件來編寫程序,用課堂上學到的中斷和循環等來編寫程序。
主程序要開始定義音頻輸出端口,歌曲總數以及每首歌的入口地址;然后對定時器初始化,確定工作方式,賦初值,開放中斷啟動定時器工作;對音頻輸出端口初始化;設置音節起始位置和節拍間距,把音節和節拍的入口地址信息存放在固定存儲單元中,查詢音樂的節拍表;當6首歌曲的節拍查詢結束后,音樂播放完畢,程序結束。主程序的清單在附錄中,其流程圖如圖5所示。
圖5 主程序流程圖
3.2 各個模塊及功能介紹 3.2.1 定時器模塊
單片機中有兩個16位的可編程計數器/定時器,他們具有定時和計數的功能,可用于定時控制,延時,對外部的事件檢測和計數。
定時器的核心部件是加一計數器,通過TMOD寄存器可以使定時器工作在定時或者計數,還可以選擇工作方式,工作方式關系到后面音調和節拍的調用,因此,要選擇合適的工作方式。定時器模塊的程序清單見附錄。圖6為定時程序流程圖。
圖6 定時器模塊流程圖
3.2.2 延時模塊
此處的延時模塊并不是固定的延時程序,而是將節拍表中的接拍數存放在固定的單元中,再將固定單元中的內容送給延時程序中,這樣空拍就可以將節拍分開,這樣,圖7為延時程序流程圖。
圖7 延時流程圖
3.2.3 中斷模塊
中斷模塊主要用來進行上一首,下一首和暫停的控制,本次的中斷主要用到INT0,INT1和T1三個I/O口。不同的中斷有不同的程序。因為單片機中只有兩個外部中斷,因此,我決定選用定時器1來改變成中斷,即應定時器1的F0判斷,當F0為1時,為中斷。在此僅具體介紹上一曲的功能。下面為流程圖介紹。
圖8 中斷程序流程圖
3.2.4 數碼管顯示模塊
本次設計采用的是共陽極的數碼管,因此要采用相應的數值來控制數碼管的亮滅。另外還要求通過按鍵在改變曲目順序的時候改變數碼管顯示數字。下面為數碼管顯示模塊的流程圖。
圖9 數碼管顯示模塊流程圖 電路仿真和程序檢測
仿真圖作圖用到的是PROTEUS軟件,對于這個軟件,我們已經相當的熟悉,所以用起來比較順利,首先將各個元件搜索出來,必須要有單片機最小系統,顯示模塊,按鍵模塊,發聲模塊。根據要求,可以畫出仿真圖。如圖10所示。
圖10 設計仿真圖
將KEIL中寫好的程序導入到單片機中,開始檢測,首先檢測是否能夠清晰的播放出音樂,其次通過控制三個按鍵來檢測上一首,下一首和暫停的功能是否實現,觀察數碼管的數字是否隨著按鍵的變化,通過以上檢測,發現程序和仿真完全符合標準,表示仿真和程序檢測通過,可以制作實物。
5實物調試
將程序編譯好產生.hex文件,通過無需驅動程序將編譯好的.hex文件導入到三合一的實驗板中,在外邊接入三個按鍵開關來控制上一首,下一首和暫停,調試過程與仿真圖的調試過程相同,可以通過按鍵來控制歌曲的調換和暫停,而且也可以控制數碼管按曲目的調換來顯示序號。實驗成功,實驗成品如圖11所示。
圖11 實物圖 11
結束語
首先要感謝凌老師平時的耐心教導,才能讓我對單片機這門課程產生興趣,在平時的課堂上都會跟著老師的思路走,下課后,努力的完成老師布置的作業是凌老師讓我學到了很多關于單片機的知識。
其次對這次制作課程設計的感想。本次的課題是音樂盒,最主要的就是程序設計,經過比較分,決定采用51編程語言,因為平時上課接觸最多的就是匯編語言,對于C語言,了解比較少,并不是非常熟練。運用課堂上學到的定時,中斷,循環,以及數碼管顯示和按鍵程序,可以比較完整的制作出這次的課題。不僅可以復習近平時學到的知識,還會有新的能力學到,比如AD繪圖的使用和熟悉。
最后,了解了單片機的方便性,和強大性。這是我們走向崗位的通行證,必須學會單片機,才會在大四畢業的時候找到適合自己的好工作。
參考文獻
[1]李廣弟.單片機基礎[M].第3版.北京:北京航空航天大學出版社,2003.06.[2]李全利.單片機原理及應用(C51編程)[M].北京:高等教育出版社,2012.12.[3]樓然苗.51系列單片機設計實例[M].北京:北京航空航天大學出版社,1999.06.[4]李葉紫.單片機應用教程[M].北京:清華大學出版社,2002.01.[5]李光飛.單片機課程設計實例指導[M].北京:北京航空航天大學出版社,2004.09.致
謝
這次的設計可以說是給了我很多,不僅僅是學習上的,更多的是精神上和生活中的
首先要感謝老師的教育,讓我學到了這么多的知識,在這段制作單片機課設的時候更是有感觸,當聽到設計的音樂盒發出聲音的時候,第一感覺是好舒暢,因為第一次可以看到自己制作出這樣的東西,在這些自豪中,更能感覺到老師對我們的栽培是那么的重要。
還要感謝同學們的幫助,有的時候,自己真的是不懂了,就去問同學,這不僅僅是問問而已,更能加深同學之間的友情,而且還會收獲更多的知識,在這樣的學習氛圍中,收益的是我們大家。所以我要感謝在這次課設里幫助過我的所有同學。
這次的設計給我最大的啟發就是,在學習中馬虎不得。當你馬虎的對待學習,學業也會馬虎的對待你,這樣吃虧的還是自己,學業本來就是自己的,自己不努力,難道就會白白得來嗎?所以以后的學習中不能有一絲的馬虎大意,就算是為了自己也要學下去。
附
錄
附錄A 電路原理圖
附錄B 電路實物圖
附錄C 元器件清單
名
稱
型
號
個
數
芯片
AT89S52 1 數碼管八段2
電容
22μF
電容
33pF
三極管1
電阻
470Ω
電阻
300Ω
電阻
200Ω
電阻
1KΩ LED燈8
下載口
晶振
12MHZ1
按鍵
排阻8位4
排阻
2位1
短路帽
插針
若干
附錄D 程序清單
OUT BIT p3.1
N EQU 6 OUT_NUM EQU P0 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ORG 000BH LJMP F_T0 ORG 0013H AJMP NEXT_SONG ORG 001BH AJMP START_PAUSE ORG 0030H MAIN: MOV SP ,#60H MOV DPTR,#TABLE MOV R0 ,#30H MOV R5 ,#00H MOV R6 ,#1 SET_TAB: MOV A,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A,R5 MOVC A,@A+DPTR MOV @R0 ,A INC R0 INC R5 INC R6 CJNE R6,#N+1,SET_TAB MOV TMOD ,#61H MOV TH1,#0FFH MOV TL1,#0FFH SETB ET1 SETB ET0 CLR PT0 SETB PT1 SETB IT0 SETB PX0 SETB IT1 SETB PX1 SETB EX1 SETB EX0 SETB EA SETB TR1 SETB OUT CLR F0 MOV 22H ,#01H MOV DPTR,#OUT_TAB MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,#00H
START0: MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A NEXT:MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR JZ END0 MOV R1,A ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING CLR TR0 SJMP SING1 SING:DEC A MOV R3,A RL A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0 SING1: LCALL DELAY JB F0,FOR AJMP NEXT FOR:CLR TR0 JB F0,$ AJMP NEXT END0: CLR TR0 MOV A,22H CJNE A,#N,WW MOV 22H,#01H MOV R7,#00H MOV OUT_NUM,#11111001B AJMP WWW WW:MOV A,R7 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A POP DPL POP DPH WWW:SETB EA AJMP START0 F_T0:MOV TH0,21H MOV TL0,20H CPL OUT RETI NEXT_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#N,Q MOV R7,#00H MOV 22H,#01H AJMP BACK Q: INC 22H MOV A,R7 ADD A,#4 MOV R7,A BACK: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B ,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA RETI LAST_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#1,QQ MOV 22H,#N MOV B,#4 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 QQ: DEC 22H MOV A,R7 SUBB A,#4 MOV R7,A BACK2: MOV R4,#00H MOV A,22H MOV DPTR ,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0 ,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H ,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA
RETI START_PAUSE: CPL F0 JB F0,RETURN SETB TR0 RETURN: RETI DELAY: MOV 27H,26H D2: D3:
MOV 28H,#125 MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET OUT_TAB: DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4,SONG5,TABLE5,SONG6,TABLE6 TABLE1: DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524 SONG1: DB 04H DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,4H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32 26
H,52H,54H,32H,34H,31H,21H,12H,24H,34H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB 22H,0D1H,11H,0E2H,0D2H,0C2H,0C4H,0C4H,32H,52H,52H,32H,62H,05H,61H,54H,31H,52H,31H,12H,31H,32H,54H,52H,32H,52H,52H,32H DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52H,32H,62H,51H,61H,54H,31H,12H,32H,12H,32H,12H,32H,32H,54H,52H
DB DB DB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,34H,31H,21H,12H,24H,24H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H TABLE2: DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178 SONG2: DB 02H DB 04H,94H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H
02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H, 27
DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H DB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,0D8H,78H,28H,38H,34H,24H
DB DB DB
58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H, 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H 94H,98H,98H,08H 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H
DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H DB 0C8H,0C8H,0C8H,08H DB 00H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 SONG3: DB 03H DB 28
04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H DB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H DB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54H DB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H DB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04H DB 04H,04H,04H,04H DB 00H TABLE4: DW 64260,64400,64524,64580 ,64684,64777,64280,64898,64968,65030,65058,65110,65157,65178,65217 SONG4: DB 04H
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H 29
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 0C4H,0B4H,04H DB 00H DB 82H,01H,81H,94H,84H TABLE5: DW 64021,64103,64260,64400 ,64524,64580,64684,64777,64820,64898,64968,65030,64934 SONG5:
DB 05H DB 42H,82H,82H,82H,84H,02H,72H DB 62H,72H,62H,52H,48H DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H DB 12H,0A2H,0D2H,92H,88H DB 82H,0B2H,0B2H,0A2H,84H,02H,72H DB 62H,72H,62H,52H,44H,02H,12H DB 12H,62H,62H,52H,44H,02H,82H DB 72H,62H,52H,32H,48H DB 00H TABLE6: 64021,6103,64260,64400,64524,64580,64624,64777,64820,64898,64958,65030,65058,65110,65157 SONG6: DB 06H
DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H DB 0B2H,0A2H,82H,72H,88H DB 72H,82H,0A2H,82H,72H,62H,42H,62H DB 0A4H,02H,0B2H,0A4H,84H DB 72H,82H,72H,62H,72H,84H,72H DB 64H,62H,12H,34H,02H,42H DB 38H,38H DW DB 38H,38H 30
DB 44H,02H,32H,44H,64H DB 72H,74H,82H,0A4H,02H,062H DB 0A8H,0A8H DB 0B2H,0B4H,0A2H,84H,82H,72H DB 62H,72H,82H,0A2H,88H DB 72H,74H,62H,42H,32H,32H,62H DB 78H,78H DB 82H,84H,72H,82H,0A2H,84H DB 72H,82H,72H,62H,48H DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68H DB 0B2H,0B2H,0B2H,0A2H,82H,84H,02H DB 72H,74H,62H,42H,32H,42H,62H DB 78H,78H DB 0A2H,0B2H,0A2H,72H,82H,84H,82H DB 72H,74H,62H,44H,64H DB 0A8H,0A4H,02H,0A2H DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78H DB 84H,72H,62H,44H,02H,62H DB 72H,81H,71H,62H,72H,84H,02H,0A2H DB 0B4H,02H,82H,74H,82H,72H DB 68H,68H DB 00H END DB 72H,82H,72H,62H,72H,84H,0A2H 31
第五篇:單片機課程設計
單片機課程設計_報警器 報警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV R1,A LCALL DISP2 GWPD:CJNE R0,#00H,GWJ1 CJNE R1,#00H,SWJ1 LCALL DISP1 LCALL DISP2 LCALL BJ SWJ1: LCALL YSLMIN MOV R0,#09H LCALL DISP1 DEC R1 LCALL DISP2 GWJ1: LCALL YSLMIN DEC R0 LCALL DISP1 LJMP GWPD DISP1:MOV A,R0 MOVC A,@A+DPTR MOV P2,A RET DISP2:MOV A,R1 MOVC A,@A+DPTR MOV P0,A RET YSLMIN:MOV R7,#60 MOV R6,#10 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#03H SETB TR0 LOOP:JBC TF0,DONE SJMP LOOP DONE:MOV TL0,#0B0H MOV TH0,#03CH CJNE R7,#00H,SIX MOV R7,#60 SIX:DJNZ R6,LOOP DJNZ R7,LOOP RET BJ:MOV TMOD,#11H MOV TH1,0FH MOV TL1,0CH SETB TR1 LOOP1:JBC TF1,LOOP2 SJMP LOOP1 LOOP2:MOV TH1,#0FFH MOV TL1,#0C0H CPL P3.1 SJMP LOOP1 RET TAB:DB 0C0H,0F9H,0A4H DB 0B0H,099H,092H DB 082H,0F8H,080H DB 090H END