




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、總 體 概 述本設(shè)計采用AT89S52單片機(jī)作為整個系統(tǒng)的控制核心,具有:音樂琴, 電子鐘, LED陣列掃描顯示, 液晶字符顯示, 循環(huán)彩燈 五個模塊。音樂琴采用4X4矩陣鍵盤為輸入鍵盤,共有十六個基本音, 并與其他功能組合, 具有一定的實用性與趣味性, 較好的完成題目要求。關(guān)鍵詞:單片機(jī) 矩陣鍵盤 頻率 。一、音樂琴系統(tǒng)。1. 電路原理圖 2 系統(tǒng)板硬件連線 1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P1.0 端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的 SPK IN 端口上; 2 把“單片機(jī)系統(tǒng)“區(qū)域中的 P3.0 P3.7 端口用 8 芯排線連
2、接到“ 4X4 行列式鍵盤”區(qū)域中的 C1 C4 R1 R4 端口上; 3 相關(guān)程序內(nèi)容 音樂產(chǎn)生的方法; 一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時 / 計數(shù)器 T0 來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。現(xiàn)在以單片機(jī) 12MHZ 晶振為例,例出高中低音符與單片機(jī)計數(shù) T0 相關(guān)的計數(shù)值如下表所示 音符 頻率( HZ ) 簡譜碼( T 值) 音符 頻率( HZ ) 簡譜碼( T 值) 低 1 DO 262 6
3、3628 # 4 FA# 740 64860 #1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63835 # 5 SO# 831 64934 #2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低
4、6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1
5、967 65283 下面我們要為這個音符建立一個表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù) 低音 0 19 之間,中音在 20 39 之間,高音在 40 59 之間 TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65
6、157,65178,65217,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 2 、音樂的音拍,一個節(jié)拍為單位( C 調(diào)) 曲調(diào)值 DELAY 曲調(diào)值 DELAY 調(diào) 4/4 125ms 調(diào) 4/4 62ms 調(diào) 3/4 187ms 調(diào) 3/4 94ms 調(diào) 2/4 250ms 調(diào) 2/4 125ms 對于不同的曲調(diào)我們也可以用單片機(jī)的另外一個定時 / 計數(shù)器來完成。 下面就用 AT89S51 單片機(jī)產(chǎn)生一首“生日快樂”歌曲來說明單片機(jī)如何產(chǎn)生的。 在這個程序中用到了兩個定時 / 計數(shù)器來完成的。其中 T0 用來
7、產(chǎn)生音符頻率, T1 用來產(chǎn)生音拍。 4 程序框圖 5 匯編源程序 KEYBUF EQU 30H STH0 EQU 31H STL0 EQU 32H TEMP EQU 33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TMOD,#01H SETB ET0 SETB EA WAIT: MOV P3,#0FFH CLR P3.4 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV
8、 A,P3 ANL A,#0FH CJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1 NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1 NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1 NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1 NK4: NOP DK1: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DP
9、TR,#TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1A CLR TR0 NOKEY1: MOV P3,#0FFH CLR P3.5 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3
10、ANL A,#0FH CJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2 NK5: CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2 NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6 LJMP DK2 NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2 NK8: NOP DK2: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TA
11、BLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A CLR TR0 NOKEY2: MOV P3,#0FFH CLR P3.6 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,
12、#0FH CJNE A,#0EH,NK9 MOV KEYBUF,#8 LJMP DK3 NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9 LJMP DK3 NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10 LJMP DK3 NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11 LJMP DK3 NK12: NOP DK3: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#
13、TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK3A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK3A CLR TR0 NOKEY3: MOV P3,#0FFH CLR P3.7 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 MOV A,P3 ANL
14、A,#0FH CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4 NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4 NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4 NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4 NK16: NOP DK4: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV
15、DPTR,#TABLE1 MOVC A,A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK4A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK4A CLR TR0 NOKEY4: LJMP WAIT DELY10MS: MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: MOV TH0,STH0 MOV TL0,STL0 CPL P1.0 RETI TABLE:
16、 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H TABLE1: DW 64021,64103,64260,64400 DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 65058,65110,65157,65178 END 二、時鐘系統(tǒng)1 原理圖2 工作原理利用單片機(jī)89S52作為本系統(tǒng)的中控模塊。電路設(shè)有四個按鍵,一個為功能選擇開關(guān),能夠選擇調(diào)節(jié)時間、日期、第一個鬧鐘、第二個鬧鐘;第二個為“加”按鈕,能夠?qū)崿F(xiàn)數(shù)字的累加;第三
17、個為“減”按鈕,能夠?qū)崿F(xiàn)數(shù)字的遞減;第四個為確定選擇開關(guān)。電路程序取用單片機(jī)內(nèi)部其中一個定時中斷系統(tǒng)作為基準(zhǔn)秒頻,這樣能夠使CPU達(dá)到最大利用。功能調(diào)節(jié)時顯示電路仍然能夠達(dá)到同步顯示。當(dāng)調(diào)節(jié)的鬧鐘時間與時鐘顯示的時間相等時,聲光報警電路動作,取用LM386能夠放大單片機(jī)輸出的音頻信號,推動揚聲器發(fā)出樂耳的音樂,時鐘程序的整體設(shè)計方案是用單片機(jī)驅(qū)動電路控制時鐘顯示,為顯示提供電源,用軟件程序控制時種運行和各種調(diào)節(jié)功能。三、LED列陣掃描顯示系統(tǒng)1. 原理圖2 系統(tǒng)板硬件連線 我們把行列總線接在單片機(jī)的i0口,然后把上面分析到的掃描代碼送入總線, 就可以得到顯示的漢字了。
18、60;在這個例子里,由于一共用到16行,16列, 如果將其全部接入89c51單片機(jī), 一共使用32條io口,這樣造成了io資源的耗盡,系統(tǒng)也再無擴(kuò)充的余地。 實際應(yīng)用中我們使用4-16線譯碼器74ls154來完成列方向的顯示。 而行方向16條線則接在p0口和p2口。3 相關(guān)C程序內(nèi)容 #include <AT89X52.H> unsigned char code tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; unsigned char code graph38=0x12,0x14,0x3c,0x48
19、,0x3c,0x14,0x12,0x00, 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,
20、160; 0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00
21、60; ; unsigned char count; unsigned char cnta; void main(void) unsigned char i,j; TMOD=0x01; TH0=(65536-4000)/256; TL0=(65536-4000)%256; TR0=1; ET0=1; EA=1; while(1)
22、; if(P2_0=0) for(i=5;i>0;i-) for(j=248;j>0;j-); if(P2_0=0)
23、60; count+; if(count=3)
24、0; count=0;
25、0; while(P2_0=0); void t0(void) interrupt 1 using 0 TH0=(65536-4000)/256; TL0=(65536-4000)%256; P3=tabcnta; P1=graphcountcnta;
26、0; cnta+; if(cnta=8) cnta=0; 四:LCD字符顯示1 C程序:#include<reg52.h>#define uchar unsigned charsbit rs=P12;sbit rw=P11;sbit e=P10;delay(uchar time)while(time>0) time-;vo
27、id enrw()rs=0; rw=0; e=0; delay(250); e=1;write_data(uchar c)P2=c; rs=1; rw=0; e=0; delay(250); e=1;init_lcd(void)/初始化P2=0x01;/清屏幕enrw();P2=0x38;/數(shù)據(jù)長度為8位,雙行顯示,5*7字符。enrw();P2=0x0c;/打開顯示開關(guān)enrw();P2=0x06;/地址計數(shù)遞增,顯示屏不移動enrw();write_cmd(uchar m)/寫命令,注意與寫數(shù)據(jù)的區(qū)別
28、 P2=m; enrw();position(uchar row,uchar colum)/寫位置uchar p; if(row=1) p=0x82+colum-1; else p=0xC0+colum-1; write_cmd(p);display(uchar *s)/寫字符串,簡單的指針應(yīng)用for(;*s!='0's+) write_data(*s);void main()unsigned int m,n; m
29、=1; n=2; init_lcd(); position(m,1); display(" wolcome"); position(n,1); display("congratulations"); while(1);2:原理圖3:液晶的顯示1線段的顯示 點陣圖形式液晶由M 行×N 列個顯示單元組成,假設(shè)LCD 顯示屏有64行,每行有128 列,每8 列對應(yīng)1 個字節(jié)的8 個位,即每行由16 字節(jié),共16×8=128個點組成,屏上64×16 個顯示單元和顯
30、示RAM 區(qū)1024 個字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM 區(qū)的000H00FH 的16 個字節(jié)的內(nèi)容決定,當(dāng)(000)=FFH 時,則屏的左上角顯示一條短亮線,長度為8 個點;當(dāng)(3FFH)=FFH 時,則屏的右下角顯示一短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=FFH,(003H)=00H,(00EH)=FFH,(00FH)=00H 時,則在屏的頂部顯示一條由8 段亮線和8 條暗線組成的虛線。這就是LCD 顯示的基本意思。2字符的顯示 當(dāng)用LCD 顯示一個字符時就較復(fù)雜了,因為一個字符由6×8 或8×
31、;8 點陣組成,即要找到和屏上某幾個位置對應(yīng)的顯示RAM區(qū)的8 個字節(jié),并且要使每個字節(jié)的不同的位為1,其它的為0,為1的點亮,為0的點暗,這樣一來就組成某個字符。但對于內(nèi)帶字符發(fā)生器的控制器(如T6963C)來說,顯示字符就比較簡單了,可讓控制器工作在文本方式,根據(jù)在LCD 上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。3漢字的顯示 漢字的顯示一般采用圖形方式,事先從微機(jī)中提取要顯示的漢字的點陣碼,每個漢字占32 字節(jié),分左右兩半部,各占16 字節(jié),左邊為1、3、5,右邊為2、4、6, 根據(jù)在LCD 上開始顯示的行列號及每行的列數(shù)可找出顯示RAM 對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一個字節(jié),光標(biāo)位置加1,送第二字節(jié),換行按列對齊,送第三字節(jié)直到3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 古代表示年齡的詞語從小到大排序
- 公益慈善存在的問題及建議
- 公共直飲水點管理制度
- 公共交通服務(wù)質(zhì)量評估制度
- 工作票安規(guī)流程
- 工業(yè)產(chǎn)品外觀設(shè)計的基本原則
- 2025年養(yǎng)老保險市場分析:參保人數(shù)穩(wěn)步增長 持續(xù)優(yōu)化服務(wù)保障
- 廣東省茂名市2024-2025學(xué)年高三上學(xué)期第一次綜合測試數(shù)學(xué)試題(解析版)
- 湛江降水井施工方案
- 寧波耐堿磚施工方案
- 中醫(yī)理療免責(zé)協(xié)議書
- 精神科病人安全與治療管理制度
- 廚房食材收貨流程
- 品牌服飾行業(yè)快速消費品庫存管理優(yōu)化方案
- 貝雷橋吊裝專項方案(危大工程吊裝方案)
- 昌江縣燕窩嶺水泥用石灰?guī)r礦礦產(chǎn)資源開發(fā)利用與保護(hù)方案
- 2024年《認(rèn)證基礎(chǔ)》真題及答案
- ZHF形勢與政策(2024年秋)-考試題庫
- 淤地壩應(yīng)急處置
- 鸚鵡介紹課件教學(xué)課件
- 汽車檢測技術(shù)課件 任務(wù)一 認(rèn)識汽車檢測站
評論
0/150
提交評論