1樓:匿名使用者
有點不知所云了阿.
_asm
2樓:亓倫
由4x4組成16個按鈕矩陣,設計成16個音。
(2. 可隨意彈奏想要表達的**。
2. 電路原理圖
圖4.22.1
3. 系統板硬體連線
(1. 把「微控制器系統」區域中的p1.0埠用導線連線到「音訊放大模組」區域中的spk in埠上;
(2. 把「微控制器系統「區域中的p3.0-p3.7埠用8芯排線連線到「4x4行列式鍵盤」區域中的c1-c4 r1-r4埠上;
4. 相關程式內容
(1. 4x4行列式鍵盤識別;
(2. **產生的方法;
一首**是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的**了,當然對於微控制器來產生不同的頻率非常方便,我們可以利用微控制器的定時/計數器t0來產生這樣方波頻率訊號,因此,我們只要把一首歌曲的音階對應頻率關係弄正確即可。現在以微控制器12mhz晶振為例,例出高中低音符與微控制器計數t0相關的計數值如下表所示
音符 頻率(hz) 簡譜碼(t值) 音符 頻率(hz) 簡譜碼(t值)
低1 do 262 63628 # 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
低 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 1967 65283
下面我們要為這個音符建立一個**,有助於微控制器通過查表的方式來獲得相應的資料
低音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,65157,65178,65217,65252,65283,0,0
dw 0,65085,65134,0,65198,65235,65268,0,0,0
dw 0
2、**的音拍,一個節拍為單位(c調)
曲調值 delay 曲調值 delay
調4/4 125ms 調4/4 62ms
調3/4 187ms 調3/4 94ms
調2/4 250ms 調2/4 125ms
對於不同的曲調我們也可以用微控制器的另外一個定時/計數器來完成。
下面就用at89s51微控制器產生一首「生日快樂」歌曲來說明微控制器如何產生的。
在這個程式中用到了兩個定時/計數器來完成的。其中t0用來產生音符頻率,t1用來產生音拍。
5. 程式框圖
貼不了.
7. c語言源程式
#include
unsigned char code table=;
unsigned char temp;
unsigned char key;
unsigned char i,j;
unsigned char sth0;
unsigned char stl0;
unsigned int code tab=;
void main(void)
temp=p3;
p1_0=~p1_0;
p0=table[key];
sth0=tab[key]/256;
stl0=tab[key]%256;
tr0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
tr0=0;}}
p3=0xff;
p3_5=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
temp=p3;
p1_0=~p1_0;
p0=table[key];
sth0=tab[key]/256;
stl0=tab[key]%256;
tr0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
tr0=0;}}
p3=0xff;
p3_6=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
temp=p3;
p1_0=~p1_0;
p0=table[key];
sth0=tab[key]/256;
stl0=tab[key]%256;
tr0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
tr0=0;}}
p3=0xff;
p3_7=0;
temp=p3;
temp=temp & 0x0f;
if (temp!=0x0f)
temp=p3;
p1_0=~p1_0;
p0=table[key];
sth0=tab[key]/256;
stl0=tab[key]%256;
tr0=1;
temp=temp & 0x0f;
while(temp!=0x0f)
tr0=0;}}
}}void t0(void) interrupt 1 using 0
3樓:匿名使用者
一樓的答案應該符合要求
**體現了c程式設計技巧,並且
- **中用到了函式,放在單獨的原始檔中
- 用到了指標
- 用到了預處理巨集
- 用到了自己建的標頭檔案
4樓:冒採煒
where is the question?
c語言的題,不會做,高手們幫幫忙,謝啦·~
5樓:匿名使用者
第一題程式:
#include
void main()
printf("他們的最大公約數為:%d\n",sum);
printf("他們的最小公倍數為:%d\n",a/sum*b); //a/sum*b這個就是最小公倍數;
} 第二題:
#include
void main()
printf("個數為:%d\n",sum);
} 第三題:
#include
#define n 20
void main()
printf("%f\n",sum);
} 第四個問題,直接是9!,要是來往和返的票樣不相同就是2*9!
第五題:
#include
#define n 1000
void main() }}
printf("%d\n",sum);}
6樓:匿名使用者
dacab
1.main() }
2.main()
printf("%d",sum);
}後面的,懶的寫;
二.(1).44
(2).0,3,4,5,6,7,8
(1). 8 7 9 5 4 11 2 6(2).x=24,y=36
exchange results
x=24,y=36
把編得軟體都學錯了。
7樓:斷殘風雪
第一個和第四個程式我編過,其他的你自己寫吧,選擇題他們都說了/*水仙花數*/
#include
void main()
while (i<=998);
}/*質數*/
#include
#include
void main ()
if (i>k)
printf(" %d 是質數",m);
} }
8樓:手機使用者
1d2a
3c4d
5b程式懶的寫了,都是一些基本的,自己動手
9樓:橙色飄絮
dacdb
1. }
c語言的題目,C語言的題目
錯誤1 巨集定義最後沒有分號,將 define d 500 改為 define d 500 錯誤2 l不是整數,因此將l定義為int型就錯了 錯誤3 既然規定輸入格式為p 那麼輸入時就不能直接輸入數值,而應在數值之前輸入p 例如輸入p 6000 另外,程式的不妥之處 1 利潤不一定是整數,因此將p定...
求c語言題目,求C語言題目
c語言經典100題 程式1 題目 有1,2,3,4個數字,能組成多少個互不相同且無重複數字的三位數 都是多少 1.程式分析 可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去 掉不滿足條件的排列.2.程式源 main 程式2 題目 企業發放的獎金根據利潤提成.利潤 i 低於或等於1...
c語言以下,C語言 以下do while語句中迴圈體的執行次數是
同文景 先執行第三次後,b值變為6,a值變為 8,然後判斷迴圈條件,此時 8 0,直接不再執行迴圈體了,也就是說根本沒有第四次的開始,在第三次的最後就被pass掉了 金色潛鳥 do 迴圈 是 先執行迴圈體,再判斷決定是否返回再次執行迴圈。第一次 先做 b 2 a a 2 b 10 4 6滿足 a 0...