特色:(1)模組背部自帶 10K 3*3 硬封可調電位器,可以調到
理想對比度
(2)LED 背光極性可調,JP4 為液晶背光正負反接處,此模組
背光為 4 顆 LED 燈,非普通背光
(3)模組自帶原裝三星正品防靜電電容,抗干擾性更強 C6 C7
C8
(4)串并口可通過兩種方式調節 1 PSB 腳控制 2 JP2 短路到+
為并口 短路到-為串口
(5)自改 3.3V 可通過 JP3 調節,默認接+級為 5V,接-為 3.3V,
C4 C5 加極性電容即可 型號
為 106A 14FH4,背光電阻 33 歐改成 3.3 歐
51hei圖片_20191126210308.jpg (3.59 MB, 下載次數: 31)
下載附件
2019-11-26 21:12 上傳
51hei圖片_20191126210314.jpg (801.34 KB, 下載次數: 25)
下載附件
2019-11-26 21:05 上傳
(4)LCD12864硬件修改和電路板布局
(2)DS18B20模塊,這個模塊是溫度傳感器,這個不需要修改什么,直接使用就行了
(3)DS1302模塊 同上,注意副電源是否需要
(4)其他模塊,不多解釋了,模塊只需要看網上使用手冊就行了
2.如何實現上面的功能?
這塊板可以實現的功能有:顯示溫度、光敏值、時間、獨立按鍵可用、矩陣按鍵可用。
(1)矩陣按鍵驅動程序:這個采用最最基礎的掃描程序,還有狀態機、翻轉兩種,比較高階,如果是新手就建議不要采用(怕看不懂)
- #include "DS1302.h"
- /*----------------------DS1302相關聲明-------------------------*/
- char TAB_1302[]={ 0x00,0x29,0x02, //秒:分:時.
- 0x18,0x06,0x06,0x08}; //日:月:星期:年.
- uchar code TAB_XQ[]={"一二三四五六日"};//把DS1302數字日期轉換為中文字符.
- /*----------------以下為DS1302相關函數-------------------------*/
- /**************************************************************
- 函數名稱:void w_1302byte(uchar date)
- 函數功能:寫一個字節(上升沿)
- ***************************************************************/
- 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;
- }
- }
- /**************************************************************
- 函數名稱:uchar r_1302byte(void)
- 函數功能:讀一個字節(下降沿)
- ***************************************************************/
- 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);
- }
- /***************************************************************
- 函數名稱:void write_1302(uchar addr,uchar date)
- 函數功能: 指定位置寫數據
- ****************************************************************/
- 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;
- }
- /**************************************************************
- 函數名稱:uchar read_1302(uchar addr)
- 函數功能: 指定位置讀數據
- ****************************************************************/
- 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);
- }
- /***************************************************************
- 函數名稱:void init_1302(void)
- 函數功能: 初始化
- *****************************************************************/
- 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);
- }
- /****************************************************************
- 函數名稱: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;
- }
- }
復制代碼 (4)其他驅動程序在附件下載
51hei圖片_20191126212617.jpg (3.18 MB, 下載次數: 28)
下載附件
2019-11-26 21:26 上傳
也就是說,上面驅動搞定,基本是完成50%的要求,是不是很簡單,剩下的就是自己的控制程序了,這個設計其實難點在驅動程序,只要搞定驅動程序,剩下的就是所謂的if啥的,好,下面看看我設計的電子琴,是在這個基礎上擴展的,沒加什么,就是加了一些蜂鳴器的控制程序
3 電子琴的設計
其實,對于基于51單片機的電子琴在網上已經是爛透的那種了,本人也參考了網上大神的程序,然后修改了一下下,實現了藍牙控制電子琴,電腦實現遠程控制電子琴演奏。
51hei圖片_20191126213243.jpg (2.4 MB, 下載次數: 34)
下載附件
2019-11-26 21:33 上傳
51hei圖片_20191126213247.jpg (3.58 MB, 下載次數: 30)
下載附件
2019-11-26 21:33 上傳
(5)電子琴設計實物圖
藍牙控制和PC遠程控制:選用的是HC05,通過修改串口的收發程序,實現了接收串口數據后進行演奏,其實原理很簡單,下面是控制程序。利用兩個按鍵掃描程序,實現多功能的控制,多次收發的控制。基本功能就是按鍵選擇高低音,按鍵演奏,擴展功能就是藍牙控制,電腦演奏
- 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);//顯示
復制代碼 4 其他選題的實現
如果對其他選題不懂,或者不會修改的可以看看網上的相關控制歷程,結合這里的驅動程序應該是很簡單就可以完成的。