這里是視頻演示:給力隊友彈奏演示(沒有學過音樂,彈得丑了點)
本來這可以幾周內做好的作品,但由于元件的采購,學業的壓力,還有的是那份惰性,導致了它的難產。正好元旦放假,寢室的該找媽的都回去找媽了,找不成媽的也找...(你懂得)。也好一個人在寢室清靜清靜,沒有復雜的氛圍來左右我自戀的給它拍個照了。
完成后效果圖:

只能說激光在平常條件下是難以看到的,所以為了顯示效果故意放了個三角尺高手別介意。

這都是我們組員設計的外包裝,還算可以吧簡單樸素。
好了,開始來干貨了,以下內容可能會讓你感到不適,眩暈,鄙視,請你選擇性略過。 首先要擬好硬件的電路圖,才能確定要采購的元器件。

圖太大了,先看個大概的情況,稍后附件里添加DSN電路圖文件,慢慢仔細看看,這是最小的系統框圖,考慮到我們發的試驗開發板,左邊一列的AN1,AN2,AN3已經連接好了按鍵,就先不動它,PGD1,PGC1為程序代碼燒錄端口寫的程序就通過這個燒錄進單片機的。OSC1和OSC2連接的是外部晶振8MHz,就像心臟一樣維持著單片機的運行。

通過圖片可以看到我們還有4個可用的引腳RB2,RB4,RA4,RB5.本來RB4和RA4是用來接輔助晶振的我們用不到就可以去除了。留下盡可能多的引腳口,畢竟至少要有7根弦吧,對于我們的開發板來說就要手動的做些硬件上的改動了。

好,現在細說我們這塊開發板硬件的改動,非本次賽課計劃的可以忽略以下內容了。
關于輔助晶振的改動已經說了是為了多留出兩個引腳端口。關鍵是左側的四個電阻的去除,這尤為重要,關系到寫入程序后是否能正常運行,兩個電容也是防止按鍵電壓不穩。還有添加芯片左右兩側的排針,背面的上拉電阻,硬件改動就這些了。

可見這個連接口可謂是錯綜復雜,有按鍵的端口引腳還有OC1(PWM1)共用。OC1(PWM1)輸出不同頻率的方波從而通過揚聲器器發出不同的音調,而按鍵是否按下需要單片機時刻檢測電平的變化信號,方波通過電阻R1影響AN1端口的電平,導致無法正常的檢測按鍵的電平。所以要OC1就不能用按鍵1,反之亦然,就必須把中間連接的電阻R1去掉,但是去掉電阻后按鍵的電壓會不穩定,注意R3及以上部分是我后來加上去的上拉電阻,加上上拉電阻后電壓就穩定了。
硬件的背面按鍵上拉電阻:

背面多加了兩個電阻接到高電壓,老師是將左側(正面看)的2,7上拉的電阻,由電路圖可以看出,是選擇的按鍵AN1和按鍵AN4。我個人就直接把AN1,AN2上拉電阻了方便,當然對應老師給的代碼也需要修改小部分。
回歸大眾,我們繼續來看看還有那些端口可用。

圖中已經說了SCLK,SLCK,SDO接數碼管芯片,為了簡單就不用再敘述數碼管的連接方式了(又是一個傷腦筋的東西)。對于我們開發板來說還可以用的引腳有RB10,RB11,RB13.加上之前的四個看7個引腳夠了,如果還嫌少可以把按鍵的引腳也拿來用用。RB7定義為PWM從而輸出波形,通過三極管S8050放大電流由發聲器發出聲音。
已經可用的RB2,RB4,RA4,RB5,RB10,RB11,RB13,七個端口就可以接光敏電阻或者激光接收器(推薦)了,在通過寫入程序檢測七個端口電壓從而發出不同的音調。

看一下實驗的電路圖吧,前方多圖高能預警。

圖中由于是實驗性質的,所以并沒有接光敏電阻這么高級的東西,就是把7個端口引出來,通過電阻與高電平相連,然后引出一條相對地線,依次接觸七個端口就會使接觸的那個端口電壓變低,一樣的效果也會發出對應的聲音。

比對電路原理圖,所引出的7個的端口如圖所示,第幾個可要對清楚,例如1(DO)是左側第6個端口,2(RE)是第11個端口。
接上激光和激光接收器后亂如麻的線路:

以下放送外殼的加工,隊友給力呀,沒什么可多說的了,看圖吧




就此結束了,結果還可以吧,程序(老師給好的)見附件下載吧,有一些注釋,結合我前幾篇的基礎講解應該可以看懂吧,也可以試著修改看看多加幾根弦如何(發現沒我是9根弦)?
難得有心情,再完善一下,更新下最新作品,隔得時間有點久了..... 貼上最新作品制作過程(2015年6月版) 
框架定型


剛開始的棺材板一般的造型,后來淘寶換材料,記得是端午節剛到然后當天加工好,第二天就交作品了(真懸)





- #include "DZQConfig.h"
- //按鍵和顯示
- //顯示:RB8-RB9-RB15
- //按鍵:RA0-RB3
- //說明:RB15-SPI的CLK時鐘信號;RB8-SPI的SDO數據信號;RB9-SPI的LCK數據鎖存信號
- // AN1-RA0;AN4-RB3
- void InitKeyDisp(void)
- {
- SpiOpenFlags oFlags;
- oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;
- SpiChnOpen(2, oFlags, 6);
- PPSOutput(2, RPB8, SDO2);
- PORTSetPinsDigitalOut(IOPORT_B, BIT_9);
- PORTSetPinsDigitalIn(IOPORT_A,BIT_0);
- PORTSetPinsDigitalIn(IOPORT_B,BIT_3);
- }
- // 對定時器1進行初始化
- void InitTimer1(void)
- {
- OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_1, PERIOD);
- INTEnable(INT_T1, INT_ENABLED);
- INTSetVectorPriority(INT_TIMER_1_VECTOR, INT_PRIORITY_LEVEL_2);
- INTSetVectorSubPriority(INT_TIMER_1_VECTOR, INT_SUB_PRIORITY_LEVEL_0);
- }
- // 對蜂鳴器進行初始化
- // PWM1-RB7
- // 說明:48MHZ系統頻率,4分頻為12MHZ,使用定時器2產生
- // 200HZ對應周期值為60000,2KHZ對應6000;
- void InitBeep(void)
- {
- OC1CON = 0x0000;
- RPB7Rbits.RPB7R = 0b0101; // PWM1-RB7
- OC1RS = 0; // 占空比
- PR2 = 60000; // 周期
- OC1CON = 0x0006; // 配置位PWM模式
- OC1CONSET = 0x8000; // 使能PWM1
- T2CONSET = 0x8020; // 使能定時器2和4分頻48MHZ/4 = 12MHZ
- }
- //對激光接收管進行初始化
- void InitInput(void)
- {
- u32 in=0;
- in = in | BIT_2 |BIT_4 |BIT_5 |BIT_10|BIT_11|BIT_13|BIT_14;
- PORTSetPinsDigitalIn(IOPORT_B,in);
- // 其他沒用的引腳配置成輸出,并輸出為低
- PORTSetPinsDigitalOut(IOPORT_A,BIT_1|BIT_4);
- PORTClearBits(IOPORT_A, BIT_1|BIT_4);
- }
- // 系統硬件初始化
- void BSP_Init(void)
- {
- SYSTEMConfig(PERIOD, SYS_CFG_WAIT_STATES |SYS_CFG_PCACHE);
- INTDisableInterrupts();
- INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
- InitKeyDisp();
- InitTimer1();
- InitBeep();
- InitInput();
- INTEnableInterrupts();
- }
復制代碼 關于程序代碼,解壓后用MPLAB打開文件夾工程。
DZQ-1.X.zip
(175.02 KB, 下載次數: 15)
2015-12-25 04:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|