51單片機(jī)電子琴設(shè)計(可顯示光敏、溫度、日期)
作者:林宏偉 學(xué)校:shaoguandada 時間:2019/11/26
首先,看圖:下面這張圖是基于51單片機(jī)設(shè)計的基礎(chǔ)要求,一共是10個小課題,難度的話,初步認(rèn)為是半顆星,說難不算難,說簡單確實很簡單,這對于那些有基礎(chǔ)的同學(xué)而言輕松,基本幾個小時就搞定了。
編號 | | | | | | 1、電子萬年歷功能;2、可設(shè)置三組以上的鬧鐘;3、溫度檢測功能;4、倒計時功能 | | | | 1、可檢測顯示0~5V的直流電壓;2、可檢測環(huán)境光照功能,將系統(tǒng)工作環(huán)境的光線分為強(qiáng)、中、弱三個等級并在液晶上顯示。 | | | | 1、可輸出0~5V的直流電壓。直流電壓的大小用鍵盤設(shè)置確定,精度為0.1V;2、可輸出正弦波、方波和三角波。波形的頻率不限,但是幅度可在1~5V之間用鍵盤設(shè)置, 精度為0.1V。 | | | 環(huán)境溫度、光照檢測報警系統(tǒng)設(shè)計 | 1、檢測顯示當(dāng)前的環(huán)境溫度和光線強(qiáng)度。2、鍵盤設(shè)置溫度和光強(qiáng)的上限與下限值,如果溫度與光強(qiáng)超出界限值,則蜂鳴器發(fā)出警報。同時液晶顯示警報的類型。 | | | | 1、高、中、低音調(diào)選擇功能;2、手動演奏功能;3、至少能自動演奏一首歌曲;4、完美的中文操作界面。 | | | | 1、基本的加減乘除運(yùn)算功能;2、乘方、開方運(yùn)算;3、三角函數(shù)運(yùn)算;4十進(jìn)制、二進(jìn)制、十六進(jìn)制轉(zhuǎn)換功能。 | | | 基于單片機(jī)的數(shù)字鐘設(shè)計 | file:///C:\Users\LITTLE~1\AppData\Local\Temp\ksohtml84440\wps1.jpg1、時分秒顯示;2、時分秒可以現(xiàn)場鍵盤設(shè)置;3、斷電后下一次通電時,時鐘能在原來的基礎(chǔ)上繼續(xù)運(yùn)行;4、溫度檢測顯示;5、秒表功能 | | | 基于LCD圖像顯示的數(shù)字鐘設(shè)計 | 1、 利用LCD圖型模式,編程實現(xiàn)時鐘功能。顯示模式參考圖如右圖所示。 2、鍵盤實時調(diào)整時鐘數(shù)據(jù) | | | | 1、開機(jī)密碼設(shè)置功能。系統(tǒng)通電后,要輸入6位的密碼才能進(jìn)入系統(tǒng)。3、進(jìn)入系統(tǒng)后,可以輸入英文文章。即系統(tǒng)按鍵具有數(shù)字、標(biāo)點符號、大小寫字母、空格,回車等字符輸入功能。4、附加功能。進(jìn)入系統(tǒng)后,密碼可以用按鍵更改;輸入的文章,液晶界面顯示滿之后,能夠分頁切換,并且具有保存、清楚功能。 | | | | 1、利用單片機(jī)控制DA轉(zhuǎn)換器,變出控制輸出兩路相位相反的PWM信號;2、PWM信號的幅度可在0.1V~5V之間用鍵盤按照0.1V的分辨率任意設(shè)定;3、PWM的展空比,可在1%~99%之間,按照1%的精度,用鍵盤設(shè)定控制;4、PWM的頻率,可在10~100Hz之間,按照1Hz的分辨率,任意設(shè)定。 | |
1.首先,講一下思路,這些基礎(chǔ)要求其實用一塊板就可以實現(xiàn)全部,因為是設(shè)計,設(shè)計要求電路板是自己焊接,不能買現(xiàn)成的,這對很多小可愛來說是一件十分痛苦的事情,下面是我自己的電路圖,遵循簡單化原則,盡量把電路精簡
51hei圖片_20191126210248.jpg (726.56 KB, 下載次數(shù): 29)
下載附件
2019-11-26 21:04 上傳
(1)原理圖
51hei圖片_20191126210254.png (79 KB, 下載次數(shù): 26)
下載附件
2019-11-26 21:04 上傳
(2)PCB圖
51hei圖片_20191126210326.jpg (3.69 MB, 下載次數(shù): 36)
下載附件
2019-11-26 21:05 上傳
(3)實物圖
(1)LCD12864模塊 :這個模塊的通信方式有兩種,一種是并行,一種是串行,并行雖然網(wǎng)上歷程很多,但是焊接電路時候卻很多線,于是我對這個模塊的硬件圖進(jìn)行了修改,把并行改成串行,修改硬件圖,這樣就不用模塊的引腳,下面是這個模塊的部分說明: 我采用短接J2,這樣PSB這個引腳就可以丟掉了,我再短接了背光電源和供電電源,這樣就并行,總體這個模塊就只需要用三條線,供電2條,數(shù)據(jù)線3條。無需多余的線路了,十分精簡。
特色:(1)模組背部自帶 10K 3*3 硬封可調(diào)電位器,可以調(diào)到
理想對比度
(2)LED 背光極性可調(diào),JP4 為液晶背光正負(fù)反接處,此模組
背光為 4 顆 LED 燈,非普通背光
(3)模組自帶原裝三星正品防靜電電容,抗干擾性更強(qiáng) C6 C7
C8
(4)串并口可通過兩種方式調(diào)節(jié) 1 PSB 腳控制 2 JP2 短路到+
為并口 短路到-為串口
(5)自改 3.3V 可通過 JP3 調(diào)節(jié),默認(rèn)接+級為 5V,接-為 3.3V,
C4 C5 加極性電容即可 型號
為 106A 14FH4,背光電阻 33 歐改成 3.3 歐
51hei圖片_20191126210308.jpg (3.59 MB, 下載次數(shù): 31)
下載附件
2019-11-26 21:12 上傳
51hei圖片_20191126210314.jpg (801.34 KB, 下載次數(shù): 25)
下載附件
2019-11-26 21:05 上傳
(4)LCD12864硬件修改和電路板布局
(2)DS18B20模塊,這個模塊是溫度傳感器,這個不需要修改什么,直接使用就行了
(3)DS1302模塊 同上,注意副電源是否需要
(4)其他模塊,不多解釋了,模塊只需要看網(wǎng)上使用手冊就行了
2.如何實現(xiàn)上面的功能?
這塊板可以實現(xiàn)的功能有:顯示溫度、光敏值、時間、獨立按鍵可用、矩陣按鍵可用。
(1)矩陣按鍵驅(qū)動程序:這個采用最最基礎(chǔ)的掃描程序,還有狀態(tài)機(jī)、翻轉(zhuǎn)兩種,比較高階,如果是新手就建議不要采用(怕看不懂)
- #include "DS1302.h"
- /*----------------------DS1302相關(guān)聲明-------------------------*/
- char TAB_1302[]={ 0x00,0x29,0x02, //秒:分:時.
- 0x18,0x06,0x06,0x08}; //日:月:星期:年.
- uchar code TAB_XQ[]={"一二三四五六日"};//把DS1302數(shù)字日期轉(zhuǎn)換為中文字符.
- /*----------------以下為DS1302相關(guān)函數(shù)-------------------------*/
- /**************************************************************
- 函數(shù)名稱:void w_1302byte(uchar date)
- 函數(shù)功能:寫一個字節(jié)(上升沿)
- ***************************************************************/
- void w_1302byte(uchar date)
- {
- uchar i;
- datbyte=date;
- for(i=0;i<8;i++)
- {
- T_IO=datbyte0; //寫最低位
- T_CLK=0;
- T_CLK=1;
- datbyte>>=1;
- }
- }
- /**************************************************************
- 函數(shù)名稱:uchar r_1302byte(void)
- 函數(shù)功能:讀一個字節(jié)(下降沿)
- ***************************************************************/
- uchar r_1302byte(void)
- {
- uchar i;
- datbyte=0;
- for(i=0;i<8;i++)
- {
- datbyte7=T_IO; //讀最低位
- T_CLK=1;
- T_CLK=0;
- datbyte>>=1;
- }
- return(datbyte);
- }
- /***************************************************************
- 函數(shù)名稱:void write_1302(uchar addr,uchar date)
- 函數(shù)功能: 指定位置寫數(shù)據(jù)
- ****************************************************************/
- void write_1302(uchar addr,uchar date)
- {
- T_RST=0;
- T_CLK=0;
- T_RST=1;
- w_1302byte(addr);
- w_1302byte(date);
- T_CLK=0;
- T_RST=0;
- }
- /**************************************************************
- 函數(shù)名稱:uchar read_1302(uchar addr)
- 函數(shù)功能: 指定位置讀數(shù)據(jù)
- ****************************************************************/
- uchar read_1302(uchar addr)
- {
- uchar dat1,dat2,temp;
- T_RST=0;
- T_CLK=0;
- T_RST=1;
- w_1302byte(addr);
- temp=r_1302byte();
- T_RST=0;
- T_CLK=0;
- dat1=temp/16;
- dat2=temp%16;
- temp=dat1*10+dat2;
- return(temp);
- }
- /***************************************************************
- 函數(shù)名稱:void init_1302(void)
- 函數(shù)功能: 初始化
- *****************************************************************/
- void init_1302(void)
- {
- uchar i;
- uchar addr=0x80;
- write_1302(0x8e,0x00);
- for(i=0;i<7;i++)
- {
- write_1302(addr,TAB_1302[i]);
- addr+=2;
- }
- write_1302(0x8e,0x80);
- }
- /****************************************************************
- 函數(shù)名稱:void get_1302(void)
- 功能說明:讀取DS1302時鐘信息.
- *****************************************************************/
- void get_1302(void)
- {
- uchar i,addr=0x81;
- for(i=0;i<7;i++)
- {
- TAB_1302[i]=read_1302(addr);
- addr+=2;
- }
- }
復(fù)制代碼 (4)其他驅(qū)動程序在附件下載
51hei圖片_20191126212617.jpg (3.18 MB, 下載次數(shù): 28)
下載附件
2019-11-26 21:26 上傳
也就是說,上面驅(qū)動搞定,基本是完成50%的要求,是不是很簡單,剩下的就是自己的控制程序了,這個設(shè)計其實難點在驅(qū)動程序,只要搞定驅(qū)動程序,剩下的就是所謂的if啥的,好,下面看看我設(shè)計的電子琴,是在這個基礎(chǔ)上擴(kuò)展的,沒加什么,就是加了一些蜂鳴器的控制程序
3 電子琴的設(shè)計
其實,對于基于51單片機(jī)的電子琴在網(wǎng)上已經(jīng)是爛透的那種了,本人也參考了網(wǎng)上大神的程序,然后修改了一下下,實現(xiàn)了藍(lán)牙控制電子琴,電腦實現(xiàn)遠(yuǎn)程控制電子琴演奏。
51hei圖片_20191126213243.jpg (2.4 MB, 下載次數(shù): 34)
下載附件
2019-11-26 21:33 上傳
51hei圖片_20191126213247.jpg (3.58 MB, 下載次數(shù): 30)
下載附件
2019-11-26 21:33 上傳
(5)電子琴設(shè)計實物圖
藍(lán)牙控制和PC遠(yuǎn)程控制:選用的是HC05,通過修改串口的收發(fā)程序,實現(xiàn)了接收串口數(shù)據(jù)后進(jìn)行演奏,其實原理很簡單,下面是控制程序。利用兩個按鍵掃描程序,實現(xiàn)多功能的控制,多次收發(fā)的控制。基本功能就是按鍵選擇高低音,按鍵演奏,擴(kuò)展功能就是藍(lán)牙控制,電腦演奏
- KeyScan1(); //電子琴功能按鍵
- Keyscan(); //行列式掃描比較慢,耐心長按
- switch(key)
- {
- case 0: time = 1;break;
- case 1: time = 2;break;
- case 2: time = 3;break;
- case 3: time = 4;break;
- case 4: time = 5;break;
- case 5: time = 6;break;
- case 6: time = 7;break;
- case 7: time = 8;break;
- case 8: time = 9;break;
- case 9: time = 10;break;
- case 10: time = 11;break;
- case 11: time = 12;break;
- case 12: time = 13;break;
- case 13: time = 14;break;
- case 14: time = 15;break;
- default: time = 0; break;//無按鍵按下
-
- }
- if(time==0) TR0=0,Beep=1;
- else high=freq[7*Music_Freq+time-1][1],low= freq[7*Music_Freq+time-1][0],TR0=1;
- Q(Music_Freq,time);//顯示
復(fù)制代碼 4 其他選題的實現(xiàn)
如果對其他選題不懂,或者不會修改的可以看看網(wǎng)上的相關(guān)控制歷程,結(jié)合這里的驅(qū)動程序應(yīng)該是很簡單就可以完成的。
|