這個程序是開發板中用來產生不同頻率聲音的程序,整體程序較為簡單,主要是兩個定時器的使用,代碼及我的注釋如下。
/*********************************************************
程序功能:用固定頻率的方波驅動蜂鳴器,共16種音調;在蜂鳴器
發出不同音調的同時,LED發光以二進制數字形式指示
當前音調的編號(1~16)
----------------------------------------------------------
撥碼開關設置:將BUZZER位撥至ON,其余位撥至OFF
測試說明:聆聽蜂鳴器發聲的音調變化。同時led也有對應的指示
**********************************************************/
#include typedef unsigned char uchar; uchar step = 0xff; /************************主函數************************/ void main( void ) { uchar i; WDTCTL = WDTPW + WDTHOLD; //關狗 /*下面六行程序關閉所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT2; //關閉電平轉換 /*------選擇系統主時鐘為8MHz-------*/ BCSCTL1 &= ~XT2OFF; //打開XT2高頻晶體振蕩器 do { IFG1 &= ~OFIFG; //清除晶振失敗標志 //IFG1是中斷寄存器 OFIFG是晶振啟動失敗中斷標志位 for (i = 0xFF; i > 0; i--); //等待8MHz晶體起振 } while ((IFG1 & OFIFG)); //晶振失效標志仍然存在? //上面這一步主要是等待晶振正常工作 BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振 TACCTL0 |= CCIE; //使能比較中斷 TACTL |= TASSEL_2 + ID_3 ; //計數時鐘選擇SMLK=8MHz,1/8分頻后為1MHz TBCCR0 = 4096*2 - 1; //周期兩秒 //時間計算:32768/8*2+1注意使用的是手表晶振 TBCCTL0 |= CCIE; TBCTL |= TBSSEL_1 + ID_3 + MC_1; //時鐘源ACLK/8,up mode P6DIR |= BIT7; //蜂鳴器對應IO為6.7設置為輸出 P2DIR = 0xff; //指示對應的狀態 P2OUT = 0xff; _EINT(); LPM1; } /******************************************* 函數名稱:Timer_A 功 能:定時器A的中斷服務函數,在這里驅動 蜂鳴器發聲 參 數:無 返回值 :無 ********************************************/ #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P6OUT ^= BIT7; // Toggle P6.7 } /******************************************* 函數名稱:Timer_B 功 能:定時器B的中斷服務函數,在這里更改 蜂鳴器發聲頻率 參 數:無 返回值 :無 ********************************************/ #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B (void) { if(step == 0xff) //step的初值就是0xff, TACTL |= MC_1;//需要將TimerA設置為增計數模式,可以在初始化的時候設置,不明白為什么放在這個地方。 step++; switch(step) { case 0: TACCR0 = 5000; P2OUT = ~1; break; // 100Hz //P2OUT使用led顯示對應的數值,只是為了便于演示,沒實際意義 case 1: TACCR0 = 2500; P2OUT = ~2; break; // 200Hz case 2: TACCR0 = 1250; P2OUT = ~3; break; // 400Hz case 3: TACCR0 = 625; P2OUT = ~4; break; // 800Hz case 4: TACCR0 = 500; P2OUT = ~5; break; // 1KHz case 5: TACCR0 = 250; P2OUT = ~6; break; // 2KHz case 6: TACCR0 = 167; P2OUT = ~7; break; // 3KHz case 7: TACCR0 = 125; P2OUT = ~8; break; // 4KHz case 8: TACCR0 = 100; P2OUT = ~9; break; // 5KHz case 9: TACCR0 = 83; P2OUT = ~10; break; // 6KHz case 10: TACCR0 = 71; P2OUT = ~11; break; // 7KHz case 11: TACCR0 = 63; P2OUT = ~12; break; // 8KHz case 12: TACCR0 = 56; P2OUT = ~13; break; // 9KHz case 13: TACCR0 = 50; P2OUT = ~14; break; // 10KHz case 14: TACCR0 = 33; P2OUT = ~15; break; // 15KHz case 15: TACCR0 = 25; P2OUT = ~16; break; // 20KHz case 16: step = 0xff; // 接著往上加,和清零的效果一樣,循環播放 } }
上一篇:在msp430上使用S-100
下一篇:MSP430學習小結3-MSP430基本時鐘模塊
推薦閱讀
史海拾趣
全鵬公司一直重視研發和創新。為了不斷滿足市場需求,公司投入大量資源用于新技術和新產品的研發。通過引進高素質、高學歷的研發人員,建立先進的研發實驗室和測試中心,全鵬公司在產品研發方面取得了顯著成果。這些新技術和新產品的推出不僅提升了全鵬公司的市場競爭力,也為客戶帶來了更好的使用體驗。
為了提升國際市場競爭力,全鵬公司一直致力于提高產品質量和管理水平。在2014年,全鵬電子科技有限公司成立,并成功通過了ISO9001國際質量管理體系、ISO14001環境管理體系認證和汽車與醫療器材體系IATF/16949認證。這些認證不僅證明了全鵬公司在質量管理方面的實力,也為其在國際市場上贏得了更多的信任和機會。
為了進一步擴大市場份額,Cynergy 3制定了國際化發展戰略。公司積極參加國際展會和會議,與全球各地的客戶和合作伙伴建立聯系。同時,Cynergy 3還在全球范圍內設立了多個分支機構和服務中心,以便更好地為客戶提供服務。這些努力使得Cynergy 3的產品逐漸進入了國際市場,并贏得了眾多國際客戶的青睞。
1997年,ELESTA繼電器有限公司正式成立,專注于制造符合IEC 61810-3標準的強制導向觸點繼電器。這一戰略舉措進一步鞏固了ELESTA在電子繼電器領域的領先地位,并為公司的長期發展奠定了堅實的基礎。
EUPEC,全稱歐洲電力半導體與電子公司(European Semiconductors and Electronics Company),成立于1990年。它是由西門子和德國另一家大型電器公司AEG生產電力半導體器件的兩個部門合并而成。這次合并標志著EUPEC正式進入電力半導體領域,憑借其強大的技術背景和豐富的行業經驗,EUPEC迅速在市場中占據了一席之地。
在20世紀90年代初,G-Mag Usa公司由一群電子工程師創立,專注于研發高性能的半導體芯片。當時,市場上對于小型化、低功耗的芯片需求日益增長。G-Mag通過不斷的技術創新,成功研發出了一種新型低功耗處理器,該處理器在保持高性能的同時,能耗降低了30%。這一技術突破迅速吸引了眾多智能手機制造商的注意,G-Mag因此迅速崛起,成為半導體行業的佼佼者。隨著智能手機市場的爆發式增長,G-Mag的芯片出貨量也隨之飆升,公司規模迅速擴大。
AVR端口是真正的雙向端口,不像51偽雙向。這也是AVR的一項優勢,只是操作時大家注意DDRn就可以了。真正雙向端口在模擬時序方面不如偽雙向的方便。 DDRn PORTn PINn 解釋:n為端口號:ABCDE DDRn:控制端口是輸入還是輸出 ...… 查看全部問答∨ |
|
WinCE5.0內存映射文件操作的疑惑, 有這么一段程序: // 設定內存映射大小、偏移量等參數 __int64 qwFileSize = 0xD59F80;//文件的最大字節數13.3MB(0xD59F80)/64MB(0x4000000)/128MB(0x8000000) __int64 qwFileOffset = 0; & ...… 查看全部問答∨ |
|
我在vs2008上建個了wince的智能設備,在使用sqlite的時候出現字符轉換問題。 bool MySQLite::sqlite_connect( TCHAR filename) { db=NULL; zE ...… 查看全部問答∨ |
|
:carnation: 設計參考了應用筆記AN1101-1104; 使用串口通信來讀取振蕩頻率,通過讀取沒有按下和按下按鍵的不同頻率來確定閥值。 程序運行中也可讀取每個按鍵通道的沒有觸摸時的1/16平均值,通道的掃描時間為10ms循環。 配置字是 ...… 查看全部問答∨ |
|
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析