特色:(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 欧
(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)其他驱动程序在附件下载
也就是说,上面驱动搞定,基本是完成50%的要求,是不是很简单,剩下的就是自己的控制程序了,这个设计其实难点在驱动程序,只要搞定驱动程序,剩下的就是所谓的if啥的,好,下面看看我设计的电子琴,是在这个基础上扩展的,没加什么,就是加了一些蜂鸣器的控制程序
3 电子琴的设计
其实,对于基于51单片机的电子琴在网上已经是烂透的那种了,本人也参考了网上大神的程序,然后修改了一下下,实现了蓝牙控制电子琴,电脑实现远程控制电子琴演奏。
(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 其他选题的实现
如果对其他选题不懂,或者不会修改的可以看看网上的相关控制历程,结合这里的驱动程序应该是很简单就可以完成的。