This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;------------------------------------------ | |
; =================================== | |
; == 喇叭與七段應用控制 == | |
; == 2014/12/29 == | |
; == 蘇偉諺 4a037052 == | |
; =================================== | |
;------------------------------------------ | |
;控制喇叭及七段顯示器 | |
; | |
spk equ p1.7; 定義spk等於p1.7 | |
seg equ p1; 定義seg等於p1,p1等於7段顯示器 | |
temp_h equ 30h;定義temp_h等於30h | |
temp_l equ 31h;定義temp_l等於31h | |
mov sp,#5fh;把5fh內的資料複製到sp | |
main: mov r0,#8;把8的值複製到r0 | |
mov dptr,#table_seg_tone;把table_seg的值複製到dptr,dptr=16位元暫存 | |
loop: clr a | |
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a | |
mov seg,a;把a的值複製到seg,使7段顯示器顯示功能 | |
inc dptr | |
clr a | |
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a | |
mov temp_h,a;把a的值複製到temp_h | |
inc dptr | |
clr a | |
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a | |
mov temp_l,a;把a的值複製到temp_l | |
call music;呼叫music副程式 | |
mov r7,#100;把100的值複製到r7 | |
call delay;呼叫delay副程式 | |
inc dptr;將r1加1 | |
djnz r0,loop;將r0減1,若r0不為0就跳到loop | |
jmp main;程式結束 | |
music: mov tmod,#00010001b;將timer1跟timer0都設定成mode1:16位元 計時/計數器 | |
mov r3,#160;把160的值複製到r3 | |
lpmusic1: | |
mov th1,temp_h;把temp_h的值複製到th1 | |
mov tl1,temp_l;把temp_l的值複製到tl1 | |
setb tr1;將tr1設定成1 | |
wait1: jnb tf1,wait1;若tf1不為1就跳到wait1 | |
clr tr1;清除tr1 | |
clr tf1;清除tf1 | |
cpl p1.7;清除p1.7 | |
djnz r3,lpmusic1;把r3減1,若r3不為0就跳到lpmusic1 | |
ret | |
delay: mov th0,#high(65536-10000);將(65536-10000)的值放到th0,為了延遲0.01ms | |
mov tl0,#low(65536-10000);將(65536-10000)的值放到tl0,為了延遲0.01ms | |
setb tr0;將tr0設定成1 | |
wait0: jnb tf0,wait0;若tf0不為1就跳到wait0 | |
clr tf0;清除tf0 | |
clr tr0;清除tr0 | |
djnz r7,delay;把r7減1,若r7不為0就跳到delay | |
ret | |
table_seg_tone: | |
db 0xf9;7段顯示器顯示1 ,0 | |
dw 0fc44h ;do:a=0 1 | |
db 0xa4;7段顯示器顯示2 ,1 | |
dw 0fcadh ;re:a=2 3 | |
db 0xb0;7段顯示器顯示3 ,2 | |
dw 0fd0ah ;mi:a=4 5 | |
db 0x99;7段顯示器顯示4 ,3 | |
dw 0fd34h ;fa:a=6 7 | |
db 0x92;7段顯示器顯示5 ,4 | |
dw 0fd84h ;so:a=8 9 | |
db 0x82;7段顯示器顯示6 ,5 | |
dw 0fdc8h ;la:a=10 11 | |
db 0xd8;7段顯示器顯示7 ,6 | |
dw 0fe0bh ;si:a=12 13 | |
db 0x80;7段顯示器顯示8 ,7 | |
dw 0fe23h ;do:a=14 15 | |
end | |
沒有留言:
張貼留言
文章有誤或有問題麻煩您留言告知! 謝謝您~~