① 這是一個利用89C52RC單片機蜂鳴器演奏生日快樂歌。請高手幫我解釋一下:整體思想,再在每一步添加註釋。
#include<reg51.h>
sbit speaker=P1^6;
unsigned char timer0h,timer0l,time;
//生日歌,這三個位元組一組,分別定義:旋律(1234567)、高低音(低音、中音、高音)、節奏(長度)
code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4};
// 音階頻率表 高八位,也就是發音對應頻率的高八位
code unsigned char FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;
// 音階頻率表 低八位,也就是發音對應頻率的低八位
code unsigned char FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, };
void delay(unsigned char t) //延時程序
{
unsigned char t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++)
{ ; } }
TR0=0;
}
void t0int() interrupt 1 //定時器0中斷服務程序,控制聲音打頻率
{ TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song() //啟動演奏當前頻率
{ TH0=timer0h; //當前頻率的高八位
TL0=timer0l; //當前頻率的低八位
TR0=1; //啟動定時器0
delay(time); //延時當前頻率的演奏時間
}
void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定時工作方式1 EA=1; ET0=1;//IE=0x82 //CPU開中斷,CT0開中斷
while(1)
{
i=0;
while(i<75)
{ //音樂數組長度 ,唱完從頭再來
k=sszymmh[i]+7*sszymmh[i+1]-1; //取當前節奏的頻率地址
timer0h=FREQH[k]; //取當前頻率高八位
timer0l=FREQL[k]; //取當前頻率低八位
time=sszymmh[i+2]; //取當前頻率的時長
i=i+3; //三個位元組一組
song(); //演奏當前頻率,共75/3,25個曲調。
}
}
}
//程序的設計思路就是將一首樂曲分成三個變數來控制,分別是曲調、所在音區、時長。而控制曲調的因素也就是頻率又分成高八位和第八位兩個表,每演奏一個曲調,就根據該曲調的三個變數來取值。
② 單片機數碼管的段旋和位旋是什麼
段選盯陸是指用單片機哪個IO口輸出數據送顯,
位選是指洞則宏用哪個IO輸出控制信號來選擇由哪個數碼管來顯示。
比如想用P0口輸出要顯示納冊的數據,P2口輸出選擇信息,P0就是段選,P2就是位選。
建議知道原理就行了,沒必要執著這些名詞。
③ 單片機開發中,如何獲取一個旋扭的轉動角度
方案1:旋鈕上裝一個高精度的電位器,電位器兩邊的引腳接上電源,每次開機單片機通過AD值讀取電位器中間腳的電壓值,根據電壓值來判斷角度。優點:成本低。缺點:電位器的精度不高,角度也達不到340度,你要定做電位器。
方案2:旋鈕上裝一個絕對角度感測器。缺點:不知道有沒有解析度這么高的感測器。
④ 單片機音樂程序中DB 0C0H, 0F9H, 0A4H中的0C0H, 0F9H, 0A4H怎樣弄出來的,是什麼意思啊
你說的DB 0C0H, 0F9H, 0A4H是LED顯示控制的段碼,不是音樂旋律和節拍控制碼,旋律的控制碼是根據音高所對應的頻率結合定時器計算出來的。節拍也是根據延時長短計算出來的。
⑤ 單片機中LED顯示電路用三極體驅動電路怎麼連接啊四個數碼管。
//單片機中LED顯示電路用三極體驅動電路四個數碼管。可以參考一下
#include<reg52.h>
sbit led0=P3^2;
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit ledd=P3^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char g,s,b,d,a;
unsigned int num;
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
P1=table[d];
led3=0;
delay(5);
led3=1;
P1=table[b];
led2=0;
delay(5);
led2=1;
P1=table[s];
led1=0;
delay(5);
led1=1;
P1=table[g];
led0=0;
delay(5);
led0=1;
}
void ont()
{
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
ont();
while(1)
{
if(a==20)
{
a=0;
ledd=~ledd;
num++;
d=num/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
display();
if(num==10000)
{
num=0;
}
} }
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}
⑥ 求單片機音樂數組,這樣的
數組th、tl是根據音頻定義的定時器初值。數組tune是音樂旋律。數組beat是音樂的節拍。
⑦ 單片機開發中,如何獲取一個旋扭的轉動角度
旋扭帶動蔽滾一個滑動電阻,使電伏租阻上的電壓隨角度變化,用單片缺並兆機A/D做電壓采樣。
不明白再問我
⑧ 單片機控制直流變交流(220v 50hz)的程序,哪位大哥幫我寫一下,感激啊
逆變器!單片機的工作電壓只能在5V左右。單片機只能實現輸拿攜侍出50HZ的方波信號,用這個信號去控制場效應管的導通和關閉。利用場效應管控制變壓器把直流變成220V的交流電壓。50HZ是指在一秒內變化50次。單片機12MHZ的晶振一微米震盪12次,通過延時函數讓單片機在一秒內輸出高低電平50次,就可以了消吵。用單片機的內部時鍾計數隱數器和中斷可以得到比較精確的方波信號。其實所有的逆變器輸出的都不是50赫茲的正旋波。我個人還是比較傾向於直接使用直流電,因為逆變損耗的能量太多。
⑨ 51單片機555定時器原理
555定時器的電路結構 555定時器的電路結構如圖所示。C1和C2為兩個電壓比較器,其功能是如果「+」輸入端電壓v+大於「-」輸入端電壓v-,即v+>v-時,則比較器輸出vc為高電平(vc=1),反之輸出vc為低電平(vc=0)。比較器C1參考電壓v1+(VREF1)=2/3Vcc,比較器C2的參考電壓v2-(VREF2)=1/3Vcc。如果v1+(VREF1)的外接端vco接固定電壓Vco,則v1+(VREF1)=vco,v2-(VREF2)=1/2Vco。與非門G1和G2構成基本觸發器。其中輸入/R為置0端,低電平有效。比較器C1和比較器C2的輸出vc1、vc2為觸發信號。三極體TD是集電極開路輸出三極體,為外接提供充、放電迴路,稱為泄放三極體。反相器G3為輸出緩沖反相器,起整形和提高帶負載能力的作用。
555定時器的功能表
將高觸發端TH和低觸發端TR連接在一起,上述的555功能表變為如下功能表。
555定時器的應用 由於555定時器使用靈活、方便,所以在波形變換與產生、測量與控制、家用電器、電子玩具等領域得到了廣泛的應用。
(1)構成施密特觸發器,用於TTL系統的介面,整形電路或脈沖鑒幅等;
(2)構成多諧振盪器,組成信號產生電路;
(3)構成單穩態觸發器,用於定時延時整形及一些定時開關中。
555定時器的種類及性能 555定時器產品有TTL型和CMOS型兩類。TTL型產品型號的最後三位都是555,CMOS型產品的最後四位都是7555,它們的邏輯功能和外部引線排列完全相同。
雙極性與CMOS型555定時器性能比較:兩者有相同的引腳排列,互相兼容,功能相同,可以互換,但應注意使用上的差異。
用555定時器構成施密特觸發器 電路結構與工作原理:
當第5腳接直流電壓VI時,則VT+=VI,VT-=1/2VI。因此改變電壓控制端CO(5腳)的電壓可改變回差電壓。一般電壓控制端CO越高,ΔU越大,抗干擾能力越強,但靈敏度相應降低。
不使用5腳時,可懸空;也可接0.01uF的電容,旁路高頻干擾。
形成回差原因:
由於C1與C2的參考電壓不同,因而基本RS-FF的置0信號和置1信號必然發生在輸入信號vi的不同電平。從而形成了電壓傳輸回差。
用555定時器構成單穩態觸發器 單穩態觸發器只有一個穩態狀態。在未加觸發信號之前,觸發器處於穩定狀態,經觸發後,觸發器由穩定狀態翻轉為暫穩狀態,暫穩狀態保持一段時間後,又會自動翻轉回原來的穩定狀態。單穩態觸發器一般用於延時和脈沖整形電路。
單穩態觸發器電路的構成形式很多。圖(a)所示為用555定時器構成的單穩態觸發器,R、C為外接元件,觸發脈沖u1由2端輸入。5端不用時一般通過0.01uF電容接地,以防干擾。下面對照圖(b)進行分析。
(1) 穩態
接通T導通,使電容C放電。此後uc<,若不加觸發信號,即u1>,則u0保持0狀態。電路將一直處於這一穩定狀態。
(2) 暫穩態
在t=t1瞬間,2端輸入一個負脈沖,即u1<,基本RS觸發器置1,輸出為高電平,並使晶體管T截止,電路進入暫穩態。此後,電源又經R向C充電,充電時間常數=RC,電容的電壓 按指數規律上升。
在t=t2時刻,觸發負脈沖消失(u1>),若uc<,則/RD=1,/SD=1,基本RS觸發器保持原狀態,u0仍為高電平。
在t=t3時刻,當uc上升略高於時,/RD=0,/SD=1,基本RS觸發器復位,輸出u0=0,回到初始穩態。同時,晶體管T導通,電容C通過T迅速放電直至uc為0。這時/RD=1,/SD=1,電路為下次翻轉做好了准備。
輸出脈沖寬度tp為暫穩態的持續時間,即電容C的電壓從0充至所需的時間。由得
由上式可知:
① 改變R、C的值,可改變輸出脈沖寬度,從而可以用於定時控制。
② 在R、C的值一定時,輸出脈沖的幅度和寬度是一定的,利用這一特性可對邊沿不陡、幅度不齊的波形進行整形。 大叔為您解答,希望您滿意!!
⑩ 單片機控制可控硅調速電路
可控硅調速電路輸入的是直流電,通過一個濾波電容穩定電壓。然後分成倆兩路,一路是電調的BEC使用,BEC是給接收機與電調自身單片機供電使用的,輸出至接收機的電源線就是信號線上的紅線和黑線,另一路是介入MOS管使用,在這里,電調上電,單片機開始啟動,驅動MOS管震動,使電機發出滴滴滴的聲音。啟動後待命,有些電調帶有油門校準功能,在進入待命前會監測油門位置是在高還是低還是中間,高的話進入電調行程校準,中間的話開始發出報警信號,電機會滴滴的響,低的話會進入正常工作狀態。一切准備就緒後,電調內的單片機會根據PWM信號線上的信號決定輸出電壓的大小和頻率的高低以及驅動方向和進角多少來驅動電機的轉速,轉向。這就是無刷電調原理。在驅動電機運轉的時候,電調內共有組MOS管工作,每組個極,一個控制正極輸出,一個控制負極輸出,當正極輸出時,負極不輸出,負極輸出時,正極不輸出,這樣子也就形成了交流電,同樣,三組都是這樣工作的,它們的頻率是HZ。講到這,無刷電調也相當於一個工廠里電機上使用的變頻器或者調速器。電調的輸入是直流,通常由鋰電池來供電。輸出是交流,可以直接驅動電機。另外航模無刷電子調速器還有三根信號輸入線,輸入PWM信號,用於控制電機的轉速。對於航模,尤其是四軸飛行器,由於其特殊性,需要專門的航模電調。那麼為什麼在四軸飛行器上需要專門的電調呢,其有什麼特別的地方。四軸飛行器有四個槳,兩兩相對呈十字交叉結構。在槳的轉向上分正轉和反轉,這樣可抵消單個槳葉旋轉引起的自旋問題。每個槳的直徑很小,四個槳轉動時的離心力是分散的。不像直機的槳,只有一個能產生集中的離心力形成陀螺性質的慣性離心力,保持機身不容易很快的側翻掉。所以通常用到的舵機控制信號更新頻率很低。