




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、AVR 單片機(jī)在兒童智能玩具中的應(yīng)用-音樂(lè)玩具利用單片機(jī)開發(fā)兒童智力玩具大有作為,尤其單片機(jī)擴(kuò)展存貯器方便,而大容量存貯器價(jià)格也很低,64KB 的EPROM 可存放300 多首歌曲,8M 位EPROM 可存放5000多首歌曲,幾個(gè)芯片就可組成一個(gè)音樂(lè)庫(kù),這是用其它方法難辦的利用AVR 單片機(jī)產(chǎn)生樂(lè)曲音符,再把樂(lè)譜翻譯成計(jì)算機(jī)音樂(lè)語(yǔ)言,由單片機(jī)進(jìn)行信息處理,再經(jīng)過(guò)信號(hào)放大,由耳機(jī)或喇叭放出樂(lè)曲聲.由于音符和節(jié)拍是由計(jì)算機(jī)產(chǎn)生的,所以發(fā)音音符和節(jié)拍準(zhǔn)確,可見音樂(lè)從娃娃開始抓起,音樂(lè)玩具是兒童笫一個(gè)好老師利用單片機(jī)的中斷,I/O 口控制功能,可以做到電腦放音機(jī)有自動(dòng)連續(xù)放音功能,樂(lè)曲全部放完自動(dòng)從頭
2、開始連續(xù)放音,循環(huán)不斷如何產(chǎn)生音樂(lè)頻率:1.要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間,然后利用計(jì)時(shí)器計(jì)時(shí)此半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖對(duì)I/O 口反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O 口反相,如此就可在I/O 口引腳上得到此頻率的脈沖(程序驅(qū)動(dòng)I/O 口反相,即正負(fù)各半周期為一個(gè)周期,才能使喇叭”吸放”發(fā)聲);2. 利用AVR 單片機(jī)的內(nèi)部計(jì)時(shí)器讓其工作在計(jì)數(shù)模式MODE1(16 位定時(shí)計(jì)數(shù)器)下,改變計(jì)數(shù)值TCNT1H 及TCNT1L 以產(chǎn)生不同的頻率;3. 例如以6MHZ 晶振為例:要產(chǎn)生頻率為523HZ,其周期T=1/523=1
3、912us, 其半周期為1912/2=956us,因此只要令計(jì)數(shù)器計(jì)時(shí)956us/1us=956(為半周期).所以在每計(jì)數(shù)956 次時(shí)將I/O反相,就可得到中音DO(523HZ).計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:N=Fi(6MHz 晶振,CPU 產(chǎn)生的頻率) 2(半周期) FrN:計(jì)數(shù)值Fi:以6MHZ 晶振為例,內(nèi)部計(jì)時(shí)(數(shù))一次需2us, 頻率單位為1 周期/秒,即HZ1 周期/2us=1 周期/2X10-6 秒=500000 次/秒=500000HZ故其頻率為500000HZFr:要產(chǎn)生的頻率4. 其計(jì)數(shù)值的求法如下:T(16 位計(jì)數(shù)器計(jì)多少后溢出)=65536(16 位二進(jìn)制計(jì)數(shù)器,計(jì)
4、滿數(shù)溢出時(shí)的計(jì)數(shù)值為2 的16次方)-N=65536-Fi/2/Fr例如:求低音DO(262HZ),中音DO(523HZ),高音DO(1046HZ) 的計(jì)數(shù)值?設(shè)K=65535 F=500000=Fi=0.5MHZT=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr低音DO 的T=65535-1908=63627(十進(jìn)制數(shù))中音DO 的T=65535-0956=64579(十進(jìn)制數(shù))高音DO 的T=65535-0478=65057(十進(jìn)制數(shù))5. C 調(diào)各音符頻率與計(jì)數(shù)值T 的對(duì)照表:音符頻率HZ 半周期TCNT 值音符頻率HZ 半
5、周期TCNT 值低1DO 262 1908 S 63627 #4FA# 740 0676 S 64859#1DO# 277 1805 63730 中5SO 784 0638 64897低2RE 294 1700 63835 #5SO# 831 0602 64933#2RE# 311 1608 63927 中6LA 880 0568 64967低3M 330 1516 64020 #6LA# 932 0536 64999低4FA 349 1433 64012 中7SI 988 0506 65029#4FA# 370 1350 64185 高1DO 1046 0478 65057低5SO 392
6、1276 64259 #DO# 1109 0451 65084#5SO# 415 1205 64330 高2RE 1175 0426 65109低6LA 440 1136 64399 #2RE# 1245 0402 65133#6LA# 466 1072 64463 高3M 1318 0372 65156低7SI 494 1012 64523 高4FA 1397 0358 65177中1DO 523 0956 64579 #4FA# 1480 0338 65197#1DO# 554 0903 64632 高5SO 1568 0319 65216中2RE 578 0842 64683 #5S0#
7、 1661 0292 65243#2RE# 622 0804 64731 高6LA 1760 0284 65251中3M 659 0759 64776 #6LA# 1865 0268 65267中4FA 698 0716 64819 高7SI 1976 0253 65282"#"表示半音,用于上升或下降半個(gè)音如何產(chǎn)生節(jié)拍:每個(gè)音符使用1 個(gè)字節(jié), 每個(gè)節(jié)拍使用1 個(gè)字節(jié),AVR 程序存儲(chǔ)器可以設(shè)為16 位,即1 個(gè)字,或稱雙字節(jié),所以一個(gè)字的高8 位存放音符碼,低8 位存放節(jié)拍碼如果1 拍節(jié)為0.4 秒則1/4 拍是0.1 秒,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間,我們假設(shè)1
8、/4 拍為1 DELY 單位,則1 拍應(yīng)為4 個(gè)DELY,以此類推,只要求得1/4 拍的DELY單位時(shí)間,其余的節(jié)拍就是它的倍數(shù).1/4 拍的延遲時(shí)間=187 亳秒節(jié)拍與節(jié)拍碼對(duì)照表節(jié)拍碼節(jié)拍數(shù)(拍) 節(jié)拍碼節(jié)拍數(shù)(拍)1 1/4 1 1/82 2/4 2 1/43 3/4 3 3/84 1 4 1/25 1 又1/4 5 5/86 1 又1/2 6 3/48 2 8 110 2 又1/2 10 1 又1/412 3 12 1 又1/216 1 又3/4建立音樂(lè)的步驟:找出樂(lè)曲,然后對(duì)照音符表,翻譯出樂(lè)曲碼,用程序偽指令DB 輸入曲碼和節(jié)拍碼;也可直接在調(diào)試窗口的程序存儲(chǔ)器窗口$0100 地址
9、輸入曲碼和節(jié)拍碼(只適用于在線實(shí)時(shí)仿真器)例:音符表練習(xí),1.把簡(jiǎn)譜翻譯成曲碼代碼;以下音符均設(shè)為一拍, 代碼為41 2 3 4 5 6 7(低八度音)1 2 3 4 5 6 7 (中音) 1(高音) 1(高音) 7 6 5 4 3 2 1(中音) 7 6 5 4 3 2 1(低八度音)曲碼1 3 5 6 8 10 12 13 15 17 18 20 22 24 25簡(jiǎn)碼1 2 3 4 5 6 7 1 2 3 4 5 6 7 1低八度音中音高音曲碼36 34 32 30 29 27 25 24 22 20 18 17 15 13 12簡(jiǎn)碼7 6 5 4 3 2 1 7 6 5 4 3 2 1
10、7高八度音中音低音最后翻譯成樂(lè)曲加節(jié)拍代碼為:01,04,03,04,05,04,06,04,08,04.10,04,12,04,13,04,13,04,15,04,17,04,18,04,20,04,22,04,24,04,25,04,25,04,36,04,34,04,32,04,30,04,30,04,29,04,27,04,25,04,24,04,22,04,20,04,18,04,17,04,15,04,13,04,12,04以上樂(lè)曲數(shù)據(jù)用偽指令DB 方式輸入”樂(lè)曲.ASM”的$0100 地址,再匯編一次就可下載試聽,注意: 音符節(jié)拍間用逗號(hào)隔開,不要不小心鍵入小數(shù)點(diǎn),因?yàn)槎禾?hào)鍵右邊
11、是小數(shù)點(diǎn)鍵,鍵入小數(shù)點(diǎn),程序匯編時(shí)將造成計(jì)算機(jī)死機(jī)!00 00(4 個(gè)零為所有曲結(jié)束標(biāo)志)1. 把樂(lè)曲代碼輸入計(jì)算機(jī)把SL-AVR 實(shí)驗(yàn)器與PC 機(jī)連機(jī),U4 插上AT90S8515 芯片,插上音響器短路塊,開機(jī)通電進(jìn)入AVR 下載窗口,進(jìn)行下載操作,下載結(jié)束應(yīng)能聽到樂(lè)曲聲;* 樂(lè)曲程序SLAVR732.ASM *;* 標(biāo)題:AT90S8515 C 口輸出樂(lè)曲聲電腦放音機(jī);* 版本: 1.0;* 最后更新日期: 2000.08.08;* 支援E-mail: gzsl;* 描述;* 用SL-AVR 萬(wàn)用下載開發(fā)實(shí)驗(yàn)器做樣機(jī),在AT90S8515 的C 口接喇叭發(fā)出樂(lè)曲聲,;* 請(qǐng)你把最喜爰的樂(lè)曲
12、送入單片機(jī)! 起始地址為$0100,也可把曲碼節(jié)拍碼在調(diào)試窗口中的;* 程序存儲(chǔ)器窗口(Program Memory)內(nèi),從$0100 地址,;* 用鍵盤直接輸入樂(lè)曲(僅適合ICE-200 實(shí)時(shí)仿真器);* 作者: SL.;*程序適用于所有單片機(jī);*.include"8515def.inc" ;文件頭AT90S8515 器件配置文件,不同的器件有不同的器件配置文件rjmp RESET ;AVR 重新定位.def TEMPDH =r2 ;寄存器定義.def TEMPDL =r3.def CNT =r10.def SCNN =r11.def KEYN =r12.def SCNK
13、 =r13.def SCNDP =r14.def KSNI =r15.def TEMP =r16 ;數(shù)據(jù)暫存器.def TEMP1 =r17.def TEMP2 =r18.def TEMP3 =r19.def SCNTT =r26 ;.def MUSN =r22 ;輸出樂(lè)曲聲暫存器.def TONL =r21 ;節(jié)拍碼低位.def TONH =r20 ;節(jié)拍碼高位.def PLYTON =r25 ;存樂(lè)曲碼.def TONSET =r24.def TONLNG =r23 ;存節(jié)拍碼. 0x06 ;TIM1_OVF 定時(shí)器1 溢出中斷處理入口地址intt1: RJMP OUTPM
14、 ;轉(zhuǎn)定時(shí)器1 溢出中斷處理,發(fā)音周期到,則跳轉(zhuǎn)到發(fā)音輸出態(tài). 0x010 ; 定時(shí)器1 溢出中斷處理程序,發(fā)音起始地址;發(fā)音周期到重新裝入計(jì)時(shí)值并將輸出到PORTC 口OUTPM: OUT TCNT1H,TONH ;重新將TONH 新計(jì)時(shí)值載入TCNT1H 內(nèi)OUT TCNT1L,TONL ; 重新將TONL 新計(jì)時(shí)值載入TCNT1L 內(nèi)SBIS PORTC,00 ;先檢測(cè)PORTC 口是否為1 而跳轉(zhuǎn)RJMP SETOP1 ;若是PORTC 口為0 則跳到SETOP1 令PORTC 口轉(zhuǎn)為1SETOP0: CBI PORTC,00 ;若PORTC 為1 則令PORTC 轉(zhuǎn)為
15、0LDI MUSN,$00 ;同時(shí)令MUSN 為00 值RETI ;回中斷前主程序并令可再次中斷返回SETOP1: SBI PORTC,00 ;若PORTC 為0 則令PORTC 轉(zhuǎn)為1LDI MUSN,$01 ;同時(shí)令MUSN 為01 值RETI ; 回中斷前主程序并令可再次中斷返回. 0x020 ;主程序起始地址,必須跳過(guò)中斷區(qū)RESET:ldi temp,low(RAMEND) ;RAMEND 為8515def.inc 內(nèi)建值為025FHout SPL,temp ;啟始堆棧指針低位將TEMP=02H 放入SP=3DH;若硬件堆?;蛘咂珹VR 片內(nèi)含SRAM 小于256B
16、時(shí),下列二行程序可省略,ldi temp,high(RAMEND) ;以TEMP=R16<5F 為數(shù)據(jù)裝入緩沖暫存器out SPL+1,temp ;堆棧指針高位將R16=TEMP=5FH 放入SPL+1=3EHwdr ;在使用看門狗計(jì)時(shí)器前需重設(shè)看門狗計(jì)時(shí)器,為;避免在接下來(lái)程序前就因WDT 已快計(jì)時(shí)溢出而重設(shè)ldi temp,$0F ;WDTCR 地址$21 設(shè)定以TEMP 緩沖令WDE=D3=1out WDTCR,temp ;并會(huì)預(yù)除為2048mS 設(shè)定WDE=1=D3 輸出到WDTCR 內(nèi)LDI MUSN,$00 ;令MUSN 為00 值ldi temp,$00 ;令TEMP 暫存
17、器放入00OUT TCCR1A,TEMP ;TEMP=00 內(nèi)含輸出到TCCR1A內(nèi)禁止比較器及PWM動(dòng)作OUT TCCR1B,TEMP ;將TEMP=00 內(nèi)含輸出到TCCR1B 內(nèi)停止TC1 計(jì)時(shí)及捕抓LDI TEMP,$02 ;將02 值預(yù)存入SRAM 的0100H 內(nèi)作TC1 的STS $0100,TEMP ;TCCR1B 控制內(nèi)含令TC1 為計(jì)時(shí)預(yù)除8LEDA: CLI ;中斷總開關(guān)sreg=d7=i=1Ldi r16,0b10000000 ;令toiel=1 觸發(fā)中斷out timsk,r16 ;將R16 的D7=1 令TOIE1=1 觸發(fā)中斷LDI TEMP,$FF ;設(shè)AVR
18、單片機(jī)I/O 口方向宏寄存器為輸出OUT DDRA,TEMP ;A 口為輸出OUT DDRB,TEMP ;B 口為輸出OUT DDRC,TEMP ;C 口為輸出; OUT DDRD,TEMP ;D 口為輸出LDI TEMP,0B11111111 ;關(guān)滅I/O 口的LED 發(fā)光二極管OUT PORTC,TEMP ;C 口輸出樂(lè)曲聲OUT PORTA,TEMP ;關(guān)A 口LED 燈,硬件設(shè)定高電平LED 暗OUT PORTB,TEMP ;關(guān)B 口LED 燈,硬件設(shè)定高電平LED 暗OUT PORTD,TEMP ;關(guān)D 口LED 燈,硬件設(shè)定高電平LED 暗CLR TEMP2 ;暫存器清零CLR T
19、EMP1 ;暫存器清零CLR KSNI ;暫存器清零LDI SCNTT,$02 ;CLR TONLNG ;暫存器清零STARTP: WDR ;關(guān)看門狗LDI ZH,HIGH(PLYTAB*2) ;啟動(dòng)演奏則令數(shù)據(jù)裝入Z 地址LDI ZL,LOW(PLYTAB*2) ;音樂(lè)演奏樂(lè)譜存放在PLYTAB*2 起始地址NEXMUT: LPM ;將Z 所指程序存儲(chǔ)器樂(lè)曲,依次取音符碼及節(jié)拍碼置于R0MOV PLYTON,R0 ;將取出的第一個(gè)音符碼裝入PLYTON 作周期控制LD R0,Z+ ;以LD R0,Z+指令使得Z 間接尋址加1LPM ;將Z 所指程序存儲(chǔ)器樂(lè)曲,依次取節(jié)指碼置于R0MOV TO
20、NLNG,R0 ;將取出的第一個(gè)節(jié)拍碼裝入PLYTON 作節(jié)拍控制OR R0,PLYTON ;將此R0 節(jié)拍碼與音符碼PLYTON 作OR 運(yùn)算LD R0,Z+ ;以LD R0,Z+指令使得Z 間接尋址加1BRNE PLAYM ;若音符碼及節(jié)拍碼非為全00 值,則跳到PLAYM 演奏LDI TEMP,$00 ;若音符碼及節(jié)拍碼全為零(0000),則為樂(lè)曲結(jié)束標(biāo)記OUT TCCR1B,TEMP ;將TEMP=00 內(nèi)含輸出到TCCR1B 內(nèi)停止TC1 計(jì)時(shí)及捕抓CLI ;令中斷總開關(guān)SREG 的I 標(biāo)志清零,而禁止中斷SBI PORTD,00 ;令PINC=1 將喇叭輸出OFFRJMP STAR
21、TP ;循環(huán)演奏PLAYM: PUSH ZH ;進(jìn)棧保存數(shù)據(jù)PUSH ZL ;進(jìn)棧保存數(shù)據(jù)TST PLYTON ;檢測(cè)PLYTON 是否為0BREQ MUSTD ;若為0 則跳至MUSTD 作節(jié)拍等待LDI ZH,HIGH(MUSTAB*2) ;樂(lè)曲碼裝入Z 地址LDI ZL,LOW(MUSTAB*2) ;計(jì)時(shí)器值存放于MUSTAB*2 起始地址MOV TEMP,PLYTON ;將樂(lè)曲碼PLYTON 裝入TEMP 寄存器內(nèi)DEC TEMP ;寄存器TEMP 減1LSL TEMP ;寄存器TEMP 左移即X2ADD ZL,TEMP ;將正確的計(jì)時(shí)器控制樂(lè)曲碼的存表位移且使TEMP 加入ZLLDI
22、 TEMP,$00 ;令TEMP=00 以便讓ZH 與進(jìn)行標(biāo)志位C 相加ADC ZH,TEMP ;將ZH與TEMP=00 以及進(jìn)行標(biāo)志位C 相加得到真正的Z 地址值LPM ;將Z 所指PROM 的預(yù)存樂(lè)曲碼計(jì)時(shí)長(zhǎng)度低位值裝入R0MOV TONL,R0 ;將樂(lè)曲碼計(jì)時(shí)長(zhǎng)度低位值R0 裝入TONL 內(nèi)OUT TCNT1L,R0 ;將樂(lè)曲碼計(jì)時(shí)長(zhǎng)度低位值R0 也裝入TCNT1L 內(nèi)LD R0,Z+ ;以LD R0 Z 指令使Z 間接尋址加1LPM ;將Z 所指PROM 之預(yù)存樂(lè)曲碼之計(jì)時(shí)節(jié)拍碼置于R0MOV TONH,R0 ;將節(jié)拍高位值R0 裝入TONH 內(nèi)OUT TCNT1H,R0 ; 將節(jié)拍高
23、位值R0 裝入TCNT1H 內(nèi)POP ZL ;出棧將ZL,ZH 由堆棧指針依次取回POP ZH ;出棧LDS TEMP,$0100 ;將SRAM 地址0100H 之內(nèi)容裝入TEMP 內(nèi)OUT TCCR1B,TEMP ;將原0100H 的SRAM 內(nèi)容輸出到TCCR1B 控制TC1SEI ;內(nèi)容02 令TC1 為計(jì)時(shí)預(yù)除8,令中斷總開關(guān)I=1 觸發(fā)MUSTD: RCALL PLYDEL ;調(diào)用延時(shí)子程序0.2SDEC TONLNG ;將節(jié)拍碼TONLNG 減1BRNE MUSTD ;若節(jié)拍碼TONLNG 不為0 則轉(zhuǎn)回,再發(fā)音,為0 則順執(zhí)RJMP NEXMUT ;繼續(xù)到NEXMUT 取樂(lè)曲碼和
24、節(jié)拍碼PLYDEL:LDI TEMP,185 ;延時(shí)子程序,185x1mS=185mS,;即PLYDEL=185mS 為十進(jìn)制時(shí)間常數(shù)DT3: LDI TEMP1,04 ; 送時(shí)間常數(shù)4X250 S=1mS,DT3 約為1mSDT2: LDI TEMP2,250 ;250 為十進(jìn)制時(shí)間常數(shù),250X8X125nS=250mS,dt2=250 SDT1: WDR ;1TWDR ;2TWDR ;3TWDR ;4TWDR ;5TDEC TEMP2 ;6T,TEMP-1BRNE DT1 ;8T,TEMP2 不為0(則共執(zhí)行250X8XT=250 S)轉(zhuǎn),;為0 按順序執(zhí)行DEC TEMP1 ;TEMP
25、1-1BRNE DT2 ;TEMP1 不為0(則共執(zhí)行250X4US=1mS)轉(zhuǎn),為0 按順序執(zhí)行DEC TEMP ;TEMP-1BRNE DT3 ;TEMP 不為0(則共執(zhí)行185X1mS=185mS)轉(zhuǎn),為0 按順序執(zhí)行RET ;子程序返回;約定:因?yàn)橛?jì)算機(jī)不能表示簡(jiǎn)譜樂(lè)曲,低音用數(shù)字后一點(diǎn)表示,;高音用數(shù)字前一點(diǎn)表示,;半音用#號(hào),'為隔開音符,;樂(lè)曲節(jié)拍應(yīng)對(duì)照簡(jiǎn)譜查看,音長(zhǎng)為節(jié)拍,;一拍為04,3/4 拍為03,1/2(2/4)拍為02,1/4 拍為01,;00 為表示休止符,;00 00 連續(xù)兩個(gè)字節(jié)為零,表示樂(lè)曲結(jié)束; 樂(lè)曲低八度音曲碼號(hào)1 2 3 4 5 6 7 8 9
26、10 11 12音符號(hào)1 #1 2 #2 3 4 #4 5 #5 6 #6 7;*; 樂(lè)曲中音曲碼號(hào)13 14 15 16 17 18 19 20 21 22 23 24音符代1 #1 2 #2 3 4 #4 5 #5 6 #6 7;*; 樂(lè)曲高八度音曲碼號(hào)25 26 27 28 29 30 31 32 33 34 35 36音符號(hào)1 #1 2 #2 3 4 #4 5 #5 6 #6 7;*.EQU PLYTAB=0X0100 ;樂(lè)曲存放首地址.EQU MUSTAB=0X00A0 ;樂(lè)曲音符表存放首地址.cseg ;實(shí)例.org PLYTAB ;"祝你生日快樂(lè)" 樂(lè)曲1=C
27、 3/4 樂(lè)曲存放起始地址,請(qǐng)查看對(duì)照簡(jiǎn)譜樂(lè)曲; 注意: 曲碼中不能用小數(shù)點(diǎn),只能用逗號(hào)隔開,否則匯編時(shí)造成死機(jī); 5 5, 6 5.DB 20,02,00,01,20,01,22,04,20,04; .1 7 -.DB 25,04,24,04,00,04; 5 5, 6 5.DB 20,02,00,01,20,01,22,04,20,04; .2 .1 -.DB 27,04,25,04,00,04; 5 5, .5 .3.DB 20,02,00,01,20,01,32,04,29,04; .1 7 6.DB 25,04,24,04,22,04; .4 .4 .3 .1.DB 30,02,00
28、,01,30,01,29,04,25,04; .2 .1 -.DB 27,04,25,04,00,04;REAGAIN; 5 5, 6 5.DB 20,02,00,01,20,01,22,04,20,04; .1 7 -.DB 25,04,24,04,00,04; 5 5, 6 5.DB 20,02,00,01,20,01,22,04,20,04; .2 .1 -.DB 27,04,25,04,00,04; 5 5, .5 .3.DB 20,02,00,01,20,01,32,04,29,04; .1 7 6.DB 25,04,24,04,22,04; .4 .4 .3 .1.DB 30,02
29、,00,01,30,01,29,04,25,04; .2 .1 -.DB 27,04,25,04,00,04; 萬(wàn)水千山總是情.db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04 ;.db 13,06,17,02,15,04,13,04,10,12,10,04,8,8,13,04 ;注意:08 應(yīng)寫成8 才能編譯通過(guò).db 15,04,17,04,20,04,22,04,17,04,15,15,15,04,00,04 ;.db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04 ;.db 13,06,
30、17,02,15,04,13,04,10,12,10,04,8,8,13,06 ;.db 17,02,15,06,13,02,13,04,10,04,13,15,13,8,17,04 ;.db 20,04,22,12,25,10,22,04,18,04,20,06,22,02,20,12 ;.db 17,04,20,8,17,04,20,04,22,12,25,04,25,04,22,04 ;.db 20,04,17,04,15,15,15, 8,17,04,18,04,20,06,20,02 ;.db 22,04,20,04,17,12,15,04,13,06,17,02,15,04,13,
31、04 ;.db 10,12,10,04,8,8,13,04,17,04,15,06,13,02,10,04.db 12,04,13,15,13,15 ;.DB 00,00 ;END. MUSTAB ;音符表地址標(biāo)號(hào);約定:低音為數(shù)字后一點(diǎn)表示,高音為數(shù)字前一點(diǎn)表示,; 半音為#號(hào),'為隔開音符;1 2 3 4 5 6 7 8 9;1. '#1. '2. '#2. '3. '4. '#4. '5. '#5.;10 11 12 13 14 15 16 17 18;6. '#6. '7. '
32、;1 '#1 '2 '#2 '3 '4.DW 63627,63730,63835,63927.DW 64020,64102,64185,64259.DW 64330,64399,64463,64523.DW 64579,64632,64683,64731.DW 64776,64819;19 20 21 22 23 24 25 26 27;#4 '5 '#5 '6 '#6 '7 ' 1 '#.1 '.2; 28 29 30 31 32 33 34 35 36; '#.2 '.3
33、 '.4 '#.4 '.5 '#.5 '.6 '#.6 '.7.DW 64859,64897.DW 64933,64967,64999,65029.DW 65057,65084,65109,65133.DW 65156,65177,65197,65216.DW 65243,65251,65267,652827.3.3 鍵盤掃描程序說(shuō)明源程序見SLAVR73A(73B).ASM(其中部分程序,鍵盤掃描程序,可供調(diào)用)SCAN1: PUSH XH ;鍵掃顯示子程序PUSH XL ;將xl 壓入堆棧PUSH TEMP3PUSH TEMP2PUS
34、H TEMP1PUSH TEMPLDI XL,$60SET ;T 標(biāo)志為1 表示未按鍵LDI SCNN,$00 ;按鍵起始掃描碼SCNN 為00LDI SCNDP,0B11011111 ;令6 位七段LED 掃描顯示碼初始為11011111LDI CNT,$06 ;七段LED 共6 位故CNT=6 為位數(shù)計(jì)數(shù)LDI KSNI,0B11110111 ;4*4 鍵盤掃描碼KSNI 初始為11110111COL1: LDI TEMP,$FF ;PORTB 設(shè)定為輸出OUT DDRb,TEMPOUT DDRC,TEMP ;PORTC 設(shè)定為輸出OUT PORTC,TEMPOUT DDRd,TEMP ;PORTD 設(shè)定為輸出OUT PORTd,SCNDP ;6 位七段LED 掃描顯示碼輸出到PORTDLD R1,X+ ;要顯示于七段LED 的間接寄存器X 中的內(nèi)容送入R1 并令X 加1OUT PORTb,R1 ;顯示內(nèi)容輸出到PORTB 以驅(qū)動(dòng)
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ī)療健康信息保密及免責(zé)協(xié)議
- 鄉(xiāng)村合作農(nóng)業(yè)種植技術(shù)推廣協(xié)議
- 高效辦公活動(dòng)策劃方案與組織實(shí)施
- 智能制造解決方案開發(fā)合作協(xié)議
- 外墻防水補(bǔ)漏施工合同
- 教師課堂教學(xué)評(píng)價(jià)量表
- 高中物理力學(xué)概念解析教學(xué)
- 企業(yè)內(nèi)部教育培訓(xùn)范文素材集
- 員工宿舍管理制度(完整版)
- 電纜隱蔽驗(yàn)收記錄文本20種
- 小班健康-阿嚏阿嚏
- 廣東省東莞市重點(diǎn)學(xué)校2024屆中考二模語(yǔ)文試題含解析
- (完整版)小學(xué)生心理健康教育課件
- 戶口遷回原籍申請(qǐng)表
- 人教版因數(shù)和倍數(shù)說(shuō)課
- 小學(xué)語(yǔ)文用好交流平臺(tái)-以五年級(jí)下冊(cè)《語(yǔ)文園地一“交流平臺(tái)”》的教學(xué)設(shè)計(jì)為例
- 鐵路基本建設(shè)工程設(shè)計(jì)概(預(yù))算編制辦法-國(guó)鐵科法(2017)30號(hào)
- 餐飲企業(yè)日管控、周排查、月調(diào)度表格模板
- 辦公用品、耗材采購(gòu)服務(wù)投標(biāo)方案
- GB/T 17640-2023土工合成材料長(zhǎng)絲機(jī)織土工布
評(píng)論
0/150
提交評(píng)論