1课题任务
本课题主要是设计一个基于51单片机的开发系统平台,开发平台需包括的基础硬件有:12864液晶显示器、8位发光二极管指示器、TLC5616模块、ADC0832数模转换、蜂鸣器电路、DS18B20温度传感器电路、4*4矩阵电路和DS1302时钟模块。然后根据51单片机开发平台自行设计一个基于51单片机电子琴设计。
设计单片机开发硬件平台
单片机硬件开发平台的基础硬件有:蜂鸣器、LED、LCD12864、TLC5615、ADC0832、DS18B20、DS1302、44矩阵按键和USB-TTL。USB-TTL用于下载程序和给主控供电;蜂鸣器、8位LED和LCD12864是作为开发板的指示部分,其中,蜂鸣器可提供声音警报,LED灯提供光显示,LCD12864显示器可提供直观的显示;44矩阵键盘作为系统与人交互的设备;检测模块有:DS1302时钟检测模块、DS18B20温度检测模块、ADC0832数模转换模块以及TLC5615模数转换模块
基于51单片机的电子琴设计
课题要求在单片机开发系统基础上进行功能扩展,根据学号尾数选择扩展的功能。。基础要求有:高低音的选择功能、手动演奏功能、自动演奏功能和完美的图形界面设计。
2单片机硬件电路设计
单片机原理图设计
单片机原理图如图2-1所示,对电路进行了简化,将LCD12864模块通信方式由并行改成串行,将独立按键和矩阵按键进行了整合,利用短接帽实现独立按键和矩阵按键的切换。电路遵循模块化原则,设计上尽量精简,方便后期调试。
2.1.1LCD12864接口电路
12864中文汉字图形点阵液晶显示模块,可显示汉字及图形,内置 8192 个中文汉字(16X16 点阵)、128个字符(8X16 点阵)及 64X256 点阵显示RAM。参考LCD12864的使用手册,常用的电路的并行接口,虽然并行传输数据比较快,但是在这个电路上明显不适用,为了简化电路,我修改了显示器的硬件电路后,改成了串行传输模式。电路接口如下图所示。从图上知道,现在本来需要接近20个接口的显示器变成了只需要5个接口的。大大简化了电路。
**硬件说明:**液晶通信方式有二种选择,并口或串口方式。如果需要串口通信时需把产品PCB后面的S点短接才能正常运行。P点为并口通信,使用并口通信时可短接P点也可不短接,短接时抗干扰效果更加; 液晶自带10K电位器可调电阻( VR1)位置处,不需再加外围电位器,如需要接外围可调的需要把PCB板上的JP1与JP2短接方可进行外围可调电阻。根据LCD12864液晶显示屏的使用手册,作出具体修改如图2-1-2所示。首先,将显示器的背光电源A+和K-直接短接显示器的供电电源,然后短接JP2接口的S,通过硬件修改串行方式。
2.1.2独立按键和矩阵按键电路
如果把独立按键接口和矩阵按键接口分开的话,明显会增加电路设计上的复杂性,所以我将独立按键和矩阵按键进行了整合,通过一个短接帽即可实现独立按键功能和矩阵按键功能的切换。未接短接帽的时候,按键电路是矩阵按键模式,采用行列式扫描方式;接上短接帽是把P2.4引脚接地从而让K1、K5、K9、K13各端接地变成独立按键。具体如图2-5所示。这样电路就省去了部分按键。
2.1.3复位电路
复位电路在单片机最小系统起着重要的作用,单片机在可靠复位后,程序才能从0000h地址开始有序地执行应用程序,但是复位电路很容易受到外部噪声干扰,所以在设计复位电路的时候需要保证系统可靠复位和具备一定的抗干扰能力。复位电路有上电复位和手动复位两个模式,这里采用的是上电只复位,不增加手动复位电路。在51单片机中,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用11.0592MHZ晶振,则一个机器周期约为1.085us,那么复位脉冲宽度最小应为2us。如图2-6所示,利用rc充电原理实现上电复位的电路设计。常用的复位电路是电容和电阻组成RC电路加上按键,把按键复位去掉,形成通电即复位,不需要按键进行复位。
2.1.4AD和DA接口电路
在单片机设计上AD和DA模块是要求单独分开测试的,即选用TLC5615和ADC0832两个模块,在电路设计上,这两个模块都是串行数据传输,即都有三条数据线接口,如果设计上把这两个模块的接口并行起来的话,两个模块6条数据线只需要占用单片机3个接口。即图2-7中H3和H2是并接一起的。
TLC5615模块,即数模转换模块,将数字量转换为模拟量输出。通过查找TLC5615模块的使用手册,了解如下:TLC5615是一个串行1O位DAC芯片,性能比早期电流型输出的DAC要好。只需要通过 3根串行总线就可以完成1O位数据的串行输入,易于和工业标准的微处理器或微控制器 (单片机 )接口。手册上说明该模块的通信时序是:当片选 S为低电平时,串行输人数据才能被移 人 l6位移位寄存器。当S为低电平时,在每一个SCLK时钟的上升沿将DIN的一位数据移人16位移寄存器。
ADC0832模块,即模数转换模块,将模拟量转换成数字量输出。从改模块的使用手册了解:ADC0832是8脚双列直插式双通道A/D转换器,能分别对两路模拟信号实现模—数转换,可以用在单端输入方式和差分方式下工作。ADC0832采用串行通信方式,通过DI数据输入端进行通道选择、数据采集及数据传送。8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。工作原理:正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时使用并与单片机的接口是双向的,所以在I/O口资源紧张时可以将DO和DI并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟(CLK)输入端输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
2.1.5DS1302时钟模块接口
DS1302 模块内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES 复位(2)I/O 数据线(3)SCLK串行时钟。设计电路如图所示。
2.1.6DS18B20温度传感器接口
DS18B20是最常见的数字温度传感器,体积小;精度高(12位时精度可以达到0.625摄氏度,出厂默认12位);接线简单,无需外围短路;封装形式多样,能满足不同应用需求等。常见的电路设计如图2-9所示。选用4.7K电阻上拉。DS18B20单线数据传输,直接将数字量传送到单片机外围接口,单片机可以直接读取温度的数字量。
3.1.1电子琴的硬件电路
根据选做设计的要求,对硬件电路进行了修改,操作更加方便。选做要求如下:按键演奏、自动演奏、高低音选择。根据要求,在原有的要求上进行了扩展,在按键演奏的基础上加上了电脑演奏,即电脑通过串口与单片机进行无线通信后可以实现演奏。如图3-1所示,是基于电子琴修改的PCB布局的。在原有基础上把按键加到扩展板,所以不需要接上芯片。其他模块,如TLC5615、ADC0832等暂时不需要用到,即将其控制的部分删除,无需增加进此布局中。通过PCB直观知道此电路设计的复杂性几乎为零,已经十分简化了,布线少,模块少,布局清晰。电子琴硬件电路设计上也是遵循简化原则。
3.1.2电子琴界面部分
电子琴界面设计是遵循直观化原则,即让人直观看到播放的音频和音阶,利用LCD12864显示器显示,如图所示,为电子琴界面设计图。界面一共显示四行,第一行是音阶显示,有高音、低音和中音,界面显示依次是2、1、0;第二行是音频,一共显示16个,依次是0-15;第三行是电子琴的名称“Little Dome”;
3.1.3电脑演奏原理
电脑演奏是基于两个蓝牙的无线通信,所用的界面是串口通信界面,电脑通过键盘输入数字0-15,电脑通过接在USB-TTL的蓝牙模块将字符依次发送出去,单片机接收到后,串口执行中断程序,中断程序就是将接收到的字符传递到电子琴控制程序,相当于按键功能。两个蓝牙的对接指令设置步骤如下:
(1)AT模式:两个蓝牙模块的PIO11接VCC,上电后即进入AT指令模式,都用USB转TTL模块连接到电脑的USB接口。
(2)打开串口调试助手:开启2个串口调试窗口,一个打开蓝牙A的COM口,一个打开蓝牙B的COM口。设置波特率,一般设置为38400
(3)恢复A默认设置:串口调试助手A,将蓝牙A恢复默认设置:AT+ORGLrn
(4)设置A配对码:串口调试助手A,配置蓝牙A的配对码:AT+PSWD=1212rn。注:蓝牙A与蓝牙B的配对码相同,这样才能成功配对。
(5)设置A主模式:串口调试助手A,将蓝牙A配置为主机模式:AT+ROLE=1rn
(6)恢复B默认设置:串口调试助手B,将蓝牙B恢复默认设置:AT+ORGLrn
(7)设置B配对码:串口调试助手B,配置蓝牙B的配对码与蓝牙A一致:AT+PSWD=1212rn
(8)设置B从模式:串口调试助手B,将蓝牙B配置为从机模式:AT+ROLE=0rn
(9)查询B地址:串口调试助手B,查询蓝牙B的地址:AT+ADDR?rn
(10)蓝牙A绑定蓝牙B:串口调试助手A,蓝牙A绑定蓝牙B地址:AT+BIND=2015,2,120758rn
(11)常规工作模式:2个模块的PIO11引脚都接地,重新上电后进入常规工作模式,自动完成配对。
软件设计与调试
3.2.1电子琴的程序设计
电子琴的程序设计思路如图3-4所示,图3-4为电子琴程序流程图。程序运行时先判断按键是否按下,即通过按键扫描识别按键是否按下,若识别到按键按下就执行模式选择程序,模式选择有四种:音阶设置模式、音频设置模式、自动播放模式和按键播放模式。若检测不到按键按下,即返回扫描程序,一直扫描,等待按键按下。电子琴程序设计上主要是控制PWM调节蜂鸣器的电压脉宽,进而控制蜂鸣器的频率;LCD12864显示器主要是用于显示按键模式,给用户直观的视觉体验;按键扫描采用了行列式扫描法,其中还有状态机法和翻转法。三种按键扫描程序中最好的是状态机法,但是需要用到定时器,电子琴中定时器用于控制中断和PWM设置,与按键中断有冲突,所以采用了行列式扫描法。
电子程序加入了独立按键部分,用于扩展电子琴的功能,采用轮询的方式实现电子琴的功能模式选择。电子琴部分控制程序如下:
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[7Music_Freq+time-1][1],
low=freq[7Music_Freq+time-1][0],TR0=1;
Q(Music_Freq,time);//显示
3.2.2电子琴测试
在设计电子琴的时候,遇到的问题主要有三点:(1)蜂鸣器不响;(2)频率不正确;(3)按键播放有杂音。解决方式如下。
(1)蜂鸣器不响:主要排查两点,第一点:硬件电路问题,蜂鸣器用三极管通过放大电流驱动工作,若蜂鸣器不响,可能是三极管的集电极和发射机接反了,解决方式是对换过来;第二点:软件设置问题,驱动蜂鸣器是用定时器中断驱动,通过调节PWM控制蜂鸣器,解决方式是检查程序中断是否正常进入,检查是否出现中断异常。
(2)频率不正确:蜂鸣器工作的频率不对,无法形成明显地高低音,主要是检查程序,首先设置正确51单片机的时钟频率,这里选用11.0592MHZ,通过MDK5目标选择界面设置,接着排除定时器计数的高位和低位寄存器的计数,装载值设置正确。
(3)播放有杂音:这个问题可以通过软件延迟过滤掉,播放出现杂音是工作时切换过快,导致杂音产生,所以可以通过软件延迟排除。
4总 结
4.1电路调试和程序调试
设计好硬件电路后一般会出现的问题有:
(1)无法烧录程序:这个是十分常见的问题,一般原因有芯片电压过低、复位电路无法复位、晶振无法起振。排查方式有:排查一下芯片是否供电正常,通电后检查芯片VCC和GND两端电压,观察是否是5V左右,如果是3V左右,就说明电路设计有问题,导致芯片电压被分走了;检查复位电路,最小系统要工作必须要复位成功一次,复位不成功很大可能性是复位电路虚焊或者电阻电容选择问题;晶振不起振就检测一下电容的参数,选取过大也会导致起振失败。
(2)显示屏无法显示:显示屏无法显示,检查显示器的使能接口和数据传输接口以及PSB引脚,使能失败显示器不会显示,数据传输传输异常也会出现问题,检查串并行数据传输过程是否出现异常;PSB引脚若被占用也会出现无法显示的问题,可以直接修改显示器的J2硬件电路即可解决。
(3)光敏电阻无法显示:光敏电阻是要求结合ADC0832这个模块进行数模转换的。光敏电阻无法检测,可能是光敏电阻没有串联一个上拉电阻,若光敏电阻一端接地一端直接接到ADC0832,这个是错误的接法,需要加上上拉电阻才能正常检测到光敏电阻;软件问题则是ADC0832模块的SPI通信出现异常。
(4)接在TLC5615的LED指示器无法工作:查找TLC5615手册知道,若要让模块正常输出转换的电压需要在模块的第6引脚接入基准电压,若没有接入2V-3V的基准电压,模块输出的数据是无效的。
(5)蜂鸣器不响:蜂鸣器工作出现异常很大可能性是三极管接反了。对换过来即可。
设计好的驱动程序一般出现的问题有:
(1)SPI通信出现异常:在此课程设计中,很大模块都用到了SPI通信,每个模块的时序不一样,所以驱动程序也稍微区别,模块驱动不成功可以看一下模块的时序图,设置正确的时序即可
(2)中断异常:定时器中断出现问题可以检测定时器是否开启总中断或者是否初始化成功,若有多个中断则要设置好优先级,外部中断,定时中断和串口中断的优先级是不一样的。
(3)引脚占用:这个是程序设计过程中的通病,由于51单片机引脚少,驱动模块有比较多,设计程序过程难免复用了引脚,但是复用时没有设计好复用的优先级,导致无法复用而出现异常。
(4)按键扫描程序:按键是人与系统交互的外部接口设备,在排除硬件设计问题后,检测按键扫描程序是否有轮询,扫描失败一般是按键无法轮询成功,即没有一直循环访问。
附录:实物照片
上一篇:C51单片机数码管动态显示
下一篇:基于51单片机智能红外温控风扇设计
推荐阅读最新更新时间:2024-10-14 07:34
设计资源 培训 开发板 精华推荐
- 使用rejustor和精密仪表放大器支持高增益应用
- CMC1003-2M-55-8,EP4CE55 模块,允许在紧凑型模块中实现通用逻辑功能,Altera Nios II 处理器操作
- LTC3633AIFE-3 双通道 3A、12V 同步降压稳压器的设计示例电路
- AD9231-80EBZ,用于 AD9231BCPZ-80、2 通道、12 位、80 MSPS 模数转换器的评估板
- AD9446、16 位、80-MSPS ADC 用作测试平台,仅更改了背对背二极管的源
- DEMOQE128: MCF51QE128 Demonstration Board
- 【RAE1】磁悬浮玩具
- 使用 Analog Devices 的 LTC3873ETS8-5 的参考设计
- AN0903、TRC103 915MHz 收发器参考设计
- KA431SL 恒流吸收稳压器的典型应用