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

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

這都是我們組員設(shè)計(jì)的外包裝,還算可以吧簡(jiǎn)單樸素。
好了,開始來(lái)干貨了,以下內(nèi)容可能會(huì)讓你感到不適,眩暈,鄙視,請(qǐng)你選擇性略過(guò)。 首先要擬好硬件的電路圖,才能確定要采購(gòu)的元器件。

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

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

好,現(xiàn)在細(xì)說(shuō)我們這塊開發(fā)板硬件的改動(dòng),非本次賽課計(jì)劃的可以忽略以下內(nèi)容了。
關(guān)于輔助晶振的改動(dòng)已經(jīng)說(shuō)了是為了多留出兩個(gè)引腳端口。關(guān)鍵是左側(cè)的四個(gè)電阻的去除,這尤為重要,關(guān)系到寫入程序后是否能正常運(yùn)行,兩個(gè)電容也是防止按鍵電壓不穩(wěn)。還有添加芯片左右兩側(cè)的排針,背面的上拉電阻,硬件改動(dòng)就這些了。

可見這個(gè)連接口可謂是錯(cuò)綜復(fù)雜,有按鍵的端口引腳還有OC1(PWM1)共用。OC1(PWM1)輸出不同頻率的方波從而通過(guò)揚(yáng)聲器器發(fā)出不同的音調(diào),而按鍵是否按下需要單片機(jī)時(shí)刻檢測(cè)電平的變化信號(hào),方波通過(guò)電阻R1影響AN1端口的電平,導(dǎo)致無(wú)法正常的檢測(cè)按鍵的電平。所以要OC1就不能用按鍵1,反之亦然,就必須把中間連接的電阻R1去掉,但是去掉電阻后按鍵的電壓會(huì)不穩(wěn)定,注意R3及以上部分是我后來(lái)加上去的上拉電阻,加上上拉電阻后電壓就穩(wěn)定了。
硬件的背面按鍵上拉電阻:

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

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

看一下實(shí)驗(yàn)的電路圖吧,前方多圖高能預(yù)警。

圖中由于是實(shí)驗(yàn)性質(zhì)的,所以并沒有接光敏電阻這么高級(jí)的東西,就是把7個(gè)端口引出來(lái),通過(guò)電阻與高電平相連,然后引出一條相對(duì)地線,依次接觸七個(gè)端口就會(huì)使接觸的那個(gè)端口電壓變低,一樣的效果也會(huì)發(fā)出對(duì)應(yīng)的聲音。

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

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




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


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





- #include "DZQConfig.h"
- //按鍵和顯示
- //顯示:RB8-RB9-RB15
- //按鍵:RA0-RB3
- //說(shuō)明:RB15-SPI的CLK時(shí)鐘信號(hào);RB8-SPI的SDO數(shù)據(jù)信號(hào);RB9-SPI的LCK數(shù)據(jù)鎖存信號(hào)
- // 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);
- }
- // 對(duì)定時(shí)器1進(jìn)行初始化
- 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);
- }
- // 對(duì)蜂鳴器進(jìn)行初始化
- // PWM1-RB7
- // 說(shuō)明:48MHZ系統(tǒng)頻率,4分頻為12MHZ,使用定時(shí)器2產(chǎn)生
- // 200HZ對(duì)應(yīng)周期值為60000,2KHZ對(duì)應(yīng)6000;
- void InitBeep(void)
- {
- OC1CON = 0x0000;
- RPB7Rbits.RPB7R = 0b0101; // PWM1-RB7
- OC1RS = 0; // 占空比
- PR2 = 60000; // 周期
- OC1CON = 0x0006; // 配置位PWM模式
- OC1CONSET = 0x8000; // 使能PWM1
- T2CONSET = 0x8020; // 使能定時(shí)器2和4分頻48MHZ/4 = 12MHZ
- }
- //對(duì)激光接收管進(jìn)行初始化
- 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);
- }
- // 系統(tǒng)硬件初始化
- 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();
- }
復(fù)制代碼 關(guān)于程序代碼,解壓后用MPLAB打開文件夾工程。
DZQ-1.X.zip
(175.02 KB, 下載次數(shù): 15)
2015-12-25 04:28 上傳
點(diǎn)擊文件名下載附件
|