版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机及dsp课程设计报告智能数字音乐盒专 业: 电子信息工程 班 级: 姓 名: 学 号: 指导教师: 时 间:2014-06-162014-06-27通信与电子工程学院摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种。本课程设计是基于mcs51系列单片机所设计的,用stc89c52芯片控制的智能数字音乐盒,整个系统可以由电路硬件控制,也可由android手机客户端软件进行控制。本系统包括stc89c52单片机最小系统、按键电路、蜂鸣器及lcd1602显示电路、蓝牙模块、安卓手机客户端组成
2、,共可以播放6首歌曲,按键电路可以实现进入蓝牙控制、播放、暂停、下一首等功能,手机客户端可以实现释放蓝牙控制、上一首、下一首、播放等功能;lcd1602可以显示正在播放的歌曲和时间,蜂鸣器播放音乐。其中手机客户端是由谷歌公司开发的手机编程软件appinventor开发的。关键词:stc89c52、智能数字音乐盒、蜂鸣器、lcd1602、appinventor、蓝牙目 录内容-1一、 设计题目:智能数字音乐盒-1二、 设计目的和要求-1三、 方案论证-1四、 总体设计(硬件部分)-14.1、框图设计-14.2、电路原理图-24.3、主要模块功能说明-24.3.1、 stc89c52单片机-24.
3、3.2、 lcd1602液晶显示屏-44.3.3 、hc-05蓝牙模块-4五、 总体设计(软件部分)-45.1、程序流程图-45.1.1、stc89c52单片机部分-45.1.2、appinventor手机客户端部分-55.2、主要模块程序说明-65.2.1、蜂鸣器唱歌子程序-6(1)、音调的产生-6(2)、节拍的确定-7(3)、音符的编码-75.2.2、lcd1602显示子程序-85.2.3、串口初始化及串口中断服务子程序-8六、 仿真过程综述-8七、 调试中遇到的难点及解决办法-97.1、硬件焊接部分-97.2、软件调试部分-10八、 课设结果及实物展示-108.1、实物展示-108.2、
4、心得体会-11九、 参考文献-11附录-12源程序-12内 容一、 设计题目:智能数字音乐盒二、 设计目的和要求目的:为了进一步巩固学习的理论知识,增强对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,通过设计在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。通过本设计,能综合运用单片机技术原理与应用、dsp原理与应用c语言程序设计以及数字电路、模拟电路等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。学会使用keil c和proteus等软件,用c语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。并且了解单片机接口应用开发的
5、全过程:分析需求、设计原理图、选用元器件、布线、编程、调试等。基本要求:用单片机设计一音乐播放器可以通过按键播放多首音乐;扩展部分:用手机控制音乐播放器播放音乐。三、 方案论证方案1:用8个矩阵按键控制音乐的播放。6个按键选择6首不同的音乐播放,其余两个按键,一个控制音乐的停止,一个控制进入手机控制模式。按下前六个键中的一个,便开始播放音乐。在显示方面,用数码管显示正在播放的音乐个数。方案2:用4个独立按键来实现音乐的选择播放,第一个按键实现手机控制,第二个按键播放音乐,第三个按键暂停播放,第四个按键切换歌曲进入下一首。用lcd1602显示歌曲信息。为使电路简单,能显示更多的信息,并方便以后扩
6、展,可能播放更多的音乐,选择方案2。四、 总体设计(硬件部分)4.1、框图设计框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。同时罗列出需要主要使用到的各个器件,以方面系统开发中器件的选取。通过框图设计,让设计者从整体上把握系统的开发。本系统设计的框图如下图4-1所示。stc89c52最小系统lcd1602显示电路按键电路手机客户端蜂鸣器蓝牙模块图4-1 系统结构框图4.2、电路原理图本系统由stc89c52最小系统、四个按键电路、lcd1602显示电路、蜂鸣器等组成。由于proteus仿真软件没有蓝牙,所以在仿真时省略了此部分电路,但在程序调试时,根据实物测试通过。电
7、路原理图如图4-2所示图4-2 电路原理图4.3、主要模块功能说明4.3.1、 stc89c52单片机 stc89c52是stc公司生产的一种低功耗、高性能cmos8位微控制器,具有 8k在系统可编程flash存储器。stc89c52使用经典的mcs-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位cpu 和在系统可编程flash,使得stc89c52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能: 8k字节flash,512字节ram, 32 位i/o 口线,看门狗定时器,内置4kb eeprom,max810复位电路,3个
8、16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。 另外 stc89c52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu 停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。4.3.2、 lcd1602液晶显示屏 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5x7或者5x11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距
9、的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602lcd是指显示的内容16x2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。(1) 引脚功能第1脚:vss为地电源。第2脚:vdd接5v正电源。第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w共同为低电平时可以写入指令或者显示地址
10、,当rs为低电平r/w为高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极(2) 操作时序 rsr/w操作说明00写入指令码d0d701读取输出的d0d7状态字10写入数据d0d711从d0d7读取数据注:关于e=h脉冲开始时初始化e为0,然后置e为1,再清0。读取状态字时,注意d7位,d7=1,禁止读写操作;d7=0,允许读写操作;所以对控制器每次进行读写操作前,必须进行读写检测。(3) 指令集:0x38:设置16*2显示,5*
11、7点阵,8位数据接口0x01:清屏0x0f:开显示,显示光标,光标闪烁0x08:只开显示0x0e:开显示,显示光标,光标不闪烁0x0c:开显示,不显示光标0x06:地址加1,当写入数据的时候光标右移0x02:地址计数器ac=0;此时地址为0x80,光标归原点,但是ddram中断内容不变0x18:光标和显示一起向左移动(4) lcd1602读写时序图如图4-3、4-4所示(第一个为读时序,第二个为写时序)图4-3读时序图4-4写时序4.3.3 、hc-05蓝牙模块hc-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作 模式和自动连接工作模式,在自动连接工作模式下模块又可
12、分为主(master)、从(slave) 和回环(loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定 的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 at 命令,用户可向模块发送各种 at 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚(pio11)输入电平,可以实现模块工作状态的动态转换。(1)、串口模块用到的引脚定义:、pio8 连接 led,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。、pio9 连接 led,指示模块连接成功,蓝牙串口匹配连接成功后,led 长亮。 、pio11 模块状态切换脚,高电平-at 命
13、令响应工作状态,低电平或悬空-蓝牙常规工作状态。、模块上已带有复位电路,重新上电即完成复位。(2)、常用at指令集、测试指令:(34脚至高一次)指令 响应 参数at ok 无、模块复位:(34脚至高一次)指令 响应 参数at+reset ok 无、获取软件版本号:(34脚一直至高,再给模块上电,波特率为38400)指令 响应 参数at+version? ok param:软件版本号+version:、恢复默认状态:(34脚至高一次)指令 响应 参数at+orgl ok 无、设置/查询串口参数:(34脚至高一次或一直至高)指令响应 参数 at+uart=, ok param1:波特率(bits/
14、s)at+ uart?+ uart=,ok 取值如下(十进制):(4800、9600、19200、38400、57600、115200、23400、460800、921600、1382400)param2:停止位01 位,12 位param3:校验位0none,1odd,2even。默认设置:9600,0,0五、 总体设计(软件部分)5.1、程序流程图5.1.1、stc89c52单片机部分 单片机主程序可以分为两部分,一是按键控制播放音乐部分,而是接受蓝牙数据串口中断部分:当按下bluetoothmusic键时,串口初始化,等待串口中断,在串口中断里,根据接收的数据控制释放蓝牙连接、播放、下一
15、首、上一首并在lcd1602上显示歌曲信息;当bluetoothmusic键没按下时,进入按键扫描,根据获得的键值控制播放、暂停、下一首,并在lcd1602上显示歌曲信息。单片机总程序流程图如图5-1所示。开始系统初始化显示欢迎界面while(1)循环键盘扫描flag_blue=1?是 否键盘扫描串口初始化按键控制播放串口中断控制播放lcd1602显示歌曲信息图5-1 单片机总程序流程图5.1.2、appinventor手机客户端部分对于这部分程序,由于appinventor是基于安卓的开发工具,这里不做详细介绍,只将工程最终界面截图加在报告中此处,如图5-2和5-3所示。图5-2 appin
16、ventor designer版面图5-3 appinventor blocks版面5.2、主要模块程序说明5.2.1、蜂鸣器唱歌子程序(1)、音调的产生频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1和高音1)之间的频率相差一倍。在两个八度音之间又分为十二个半音。另外,音名a(简谱中的低音6)的频率为440hz,音名b到c之间、e到f之间为半音,其余为全音。由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。、要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用
17、定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。、利用at89c52的内部定时器使其工作在计数器模式方式1下,改变计数值th0及tl0以产生不同频率的方法。此外结束符和休止符可以分别用代码00h和ffh来表示,若查表结果为00h,则表示曲子终了;若查表结果为ffh,则产生相应的停顿效果。、例如频率为523hz,其周期t=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将i/o反相,就可得到中音do(523hz)。计数脉冲值与频率的关系公式如下:n=fi/2/f
18、rn:计算值;fi:内部计时一次为1us,故其频率为1mhz;、其计数值的求法如下:初值t=65536-n=65536-fi/2/fr例如:设k=65536,f=1000000=fi=1mhz,求低音do(261hz)、中音do(523hz)、高音的do(1046hz)的计算值t=65536-n=65536-fi/2/fr=65536-1000000/2/fr=65536-500000/fr低音do的t=65536-500000/262=63628,中音do的t=65536-500000/523=64580,低音do的t=65536-500000/1047=65058。c调各音符频率与计数值t
19、的对照表如图5-4所示。5-4 c调各音符频率与计数值t的对照表(2)、节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的
20、延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。节拍与节拍码对照如5-5所示。5-5 节拍与节拍码对照图每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5-5为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒。(3)、音符的编码do、re、mi、fa、so、la、si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位,一拍即四分音
21、符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18;举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22;歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用定时器延时。5.2.2、lcd1602显示子程序 在
22、lcd1602的驱动程序设计中,主要有读忙、写指令、写数据、初始化四种。具体程序见附录。(1)、读忙子程序在向lcd中写入数据时,为了保证lcd能够响应单片机,最好在向lcd中写入数据或者指令之前先判断lcd是否处于空闲状态。lcd忙的标志是向lcd中随便写入一个指令,如果lcd数据口的最高位被lcd拉为低电平,则lcd已经处于空闲状态。(2)、初始化在lcd初次工作时,需要将lcd初始化。主要有系统功能设置、显示和光标设置、模式设置等。(3)、写指令写指令和写数据是整个lcd的驱动基础。如初始化设置就是通过调用这个子函数来实现的。在向lcd中写入指令之前,需要先选定指令寄存器(rs=0),然
23、后向lcd的8位数据口写入指令,接着使能lcd。该指令就被写入了lcd中。(4)、写数据写数据与写指令相同,其唯一的区别是寄存器的选择。如果将数据口中的数据写入指令寄存器,就是写指令;如果将写入数据寄存器(rs1=1),就是写数据。5.2.3、串口初始化及串口中断服务子程序(1)、串口初始化设置串口工作方式1,1个起始位,1个停止位,8位数据,波特率9600。波特率由定时器t1产生。(2)、串口中断服务子程序在此子程序中,若接受到蓝牙的数据为0x00,则上一首;若为0x01,则下一首;若为0x02,则播放;若为0x03,则断开蓝牙连接,进入按键模式。六、 仿真过程综述图6-1 proteus仿
24、真图如图6-1为proteus仿真图,此时正在按键模式下,播放第六首歌曲,为庞龙的两只蝴蝶,可以通过按键stop停止播放,也可以按复位键使整个系统复位。暂停播放时,按键next可以进入下一首歌曲,按键start时可以播放第六首。暂停时,也可按键bluetooth进入手机控制模式,但由于此处不支持串口通信,无法仿真,因此在实物上调试程序时可以实现蓝牙控制音乐的播放。另外,在仿真时蜂鸣器发出的声音噪音很大,但在实物上,声音很悦耳。七、 调试中遇到的难点及解决办法7.1、硬件焊接部分在proteus仿真成功后,用altiumdesigner10电路设计软件进行电路原理图设计及pcb绘制,为了使整个系
25、统占用的电路板资源最少,其中有的走线用的导线连接,在电路板打孔,这样可以减少pcb的复杂程度,大大简化电路设计过程,更有效地完成设计。此处设计了八个矩阵按键,既可以满足本系统四个独立按键的需求,也方便以后扩展使用。altiumdesigner10电路原理图及pcb图如图7-1及7-2所示。7-1 altiumdesigner10电路原理图7-2 altiumdesigner10 pcb设计图在实物焊接过程中,依次焊接单片机最小系统电路、按键电路、蜂鸣器电路、lcd1602液晶显示电路,并且每焊完一部分,就用万用表测试其电路的连通性及稳定性,以确保整个系统设计的成功率。(注:蓝牙模块可即插即用,
26、此处不需要设计电路) 7.2、软件调试部分在软件设计过程中,依次设计了lcd1602驱动子程序、播放音乐子程序、键盘扫描子程序、定时器初始化定时器中断子程序、串口初始化及串口中断服务子程序,在子程序里逐步调试仿真并在实物上加以修正。其中lcd1602驱动子程序的设计过程参考了lcd1602数据手册及参考例程,设计出了忙检测、写指令、写数据、1602初始化、设置显示坐标、指定位置写字符、指定位置写字符串等子程序;音乐播放函数的设计,查阅了单片机蜂鸣器播放音乐的原理及音乐乐谱的组成要素,这部分设计较为复杂,但在查阅了相关例程后,终于设计成功,两个定时器t0、t1分别存放音符和音长;串口中断子程序的
27、设计参考了单片机课本上对相应寄存器的介绍和设置及相关例程;而手机客户端程序的设计比较简单,因为appinventor提供了各个子程序块,开发者只需排积木似的傻瓜式变成即可,程序见图5-3,在这里不再赘述。八、 课设结果及实物展示8.1、实物展示图8-1 智能音乐盒实物展示本次课设最后的实物图如图8-1所示。其由智能音乐盒、蓝牙模块(由于需要3.3v电压,所以增加了之前做过的电源模块)、安卓手机客户端组成。整个系统通过usb线由电脑供电,避免了调试过程使用电池供电的消耗。在实物调试过程中,由于串口部分没有进行仿真,故遇到了一些困难,蓝牙接收不到数据,串口无法正确接收等,在仔细查阅了hc-05数据
28、手册后,利用at指令修改了蓝牙波特率参数为9600baud(初始值为38400baud,无法用单片机产生38400baud);并且了解到了手机蓝牙发送的是十六进制数,因此在客户端设计时应用了bluetoothclient1的send1bytenumber,即发送一字节数字(0,1,2,3),首先用串口助手查看是否能正确接收,在串口助手尚能正确接收显示时,再连接单片机看串口中断是否发生,最后一步步调试成功。8.2、心得体会通过本次课程设计,再一次复习了单片机的内容,掌握了单片机定时器、串口、中断等部分的c语言编程和复位电路的设计,掌握了波特率的设置;并学会了lcd1602字符型液晶的显示原理及软
29、件编程,学会了独立键盘的使用(扫描法),并掌握了单片机通过蜂鸣器播放音乐的原理和软件编程。同时,还学到了一些课外知识,了解了hc-05蓝牙模块的使用及at指令修改蓝牙设置;学会了利用手机蓝牙发送数据控制单片机的知识,这部分应用了单片机的串口通信;并进一步熟悉了appinventor安卓软件开发工具的变成及应用。虽然,在此过程中遇到很多困难,但我从没放弃,不断地发现问题,查阅资料,认真思考,解决问题,最后成功的完成了本次课设数字音乐盒的基础要求部分设计,并自由扩展了手机蓝牙控制部分,使本系统实现了智能化。因为手机外围电路的设计一直是我感兴趣的,所以整个系统设计过程都很认真。最后,我总结的一句话是
30、:要相信你永远不会是第一个遇到这种问题的人,遇到问题不是问题,在网络发达的今天,我们应该学会搜索知识,学习课外知识,有想法就有动力,就要想办发去实现,我们应该享受解决问题的过程和成功解决后的喜悦。九、 参考文献1 张毅刚. 单片机原理及应用m. 北京:高等教育出版社,2010.2 张敏霞. c语言程序设计教程m. 北京:电子工业出版社,2011.3 郭天祥. 新概念51单片机c语言教程m. 北京:电子工业出版社,2009.4 阎石. 数字电子技术基础m. 北京:高等教育出版社,2006.5 童诗白. 模拟电子技术基础m. 北京:高等教育出版社,2006.6 david wolber. app
31、inventor create your own android apps,2011.附录源程序#include#define uint unsigned int#define uchar unsigned char#define lcd1602_data p0 /1602液晶数据口sbit lcd1602_rs=p20; /1602液晶写命令/数据sbit lcd1602_rw=p21; /1602液晶读/写控制 sbit lcd1602_en=p22; /1602液晶使能控制sbit beepio = p30 ; /蜂鸣器3.0sbit blue=p10; /蓝牙按键sbit play=p
32、11;sbit esc=p12; /取消播放音乐sbit down=p13; /下一首sbit gnd=p14; /改为四个独立键盘char number; /歌曲编号bit flag; /播放标志bit flag_blue=0; /蓝牙连接与释放:flag_blue=1,连接;flag_blue=0,释放char t;char count,sec,min; /歌曲时间显示uchar buf; /串口接收数据uchar code fairy_tale;uchar code love_transfer;uchar code girl_with_wing;uchar code the_same_s
33、ong;uchar code two_butterfly;uchar code coral_sea;char music=1,2,3,4,5,6; /歌曲编号char code song17= 1.fairy tale ,2.love transfer ,3.girl with wing, 4.the same song ,5.two butterfly ,6.coral sea ;char code singer12= guang liang,chen yixun ,rong zuer , liu chang ,pang long ,zhou jielun;uchar code lamp=0
34、xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/以下为播放音乐的设置#define system_osc 12000000#define sound_space 4/5uint code fretab12 = 262,277,294,311,330,349,369,392,415,440,466,494 ; /c调歌曲12个半音的原始频率表uchar code signtab7 = 0,2,4,5,7,9,11 ; /17在频率表中的位置uchar code lengthtab7= 1,2,4,8,16,32,64 ; uchar sound_temp_th0,
35、sound_temp_tl0; /音符定时器初值暂存 uchar sound_temp_th1,sound_temp_tl1; /音长定时器初值暂存bit stop; /播放暂停标志bit stop_blue=0;/暂停标志/*延时函数(单位ms)*/ void delay(uint z) uint x; uchar y; for(x=z;x0;x-) for(y=112;y0;y-);/* *lcd1602驱动程序*/*忙检测*/ void lcd1602_check_busy() lcd1602_data = 0xff; lcd1602_rs = 0 ; lcd1602_rw = 1 ;
36、lcd1602_en = 0 ; delay(1); lcd1602_en = 1 ; while(lcd1602_data & 0x80) ; lcd1602_en = 0 ; /*写指令 */ void lcd1602_write_cmd(uchar cmd) lcd1602_check_busy(); lcd1602_rs = 0 ; lcd1602_rw = 0 ; lcd1602_data = cmd ; lcd1602_en = 1 ; delay(5); lcd1602_en = 0 ;/*写数据*/ void lcd1602_write_data(uchar dat) lcd1
37、602_check_busy(); lcd1602_rs = 1 ; lcd1602_rw = 0 ; lcd1602_data = dat ; lcd1602_en = 1 ; delay(5); lcd1602_en = 0 ;/*1602初始化*/ void lcd1602_init() lcd1602_write_cmd(0x01); /清屏 delay(20); lcd1602_write_cmd(0x38); /8位数据,双列显示,5*7字形 delay(20); lcd1602_write_cmd(0x0c); /开显示,关光标,光标不闪烁 delay(20);/*设置显示坐标*
38、/ void lcd1602_set_postion(uchar x , uchar y)if(!y)lcd1602_write_cmd(0x80+x) ;else if(y)lcd1602_write_cmd(0xc0+x) ;/*指定位置写字符*/ void lcd1602_write_char(uchar x , uchar y , uchar chardata) lcd1602_set_postion(x,y) ; lcd1602_write_data(chardata) ;/*指定位置写字符串*/ void lcd1602_write_string(uchar x , uchar y
39、 , uchar *string) lcd1602_set_postion(x,y) ; while(*string) != 0) lcd1602_write_data(*string) ; string+ ; /* *播放音乐函数*/void initialsound() beepio = 0; sound_temp_th1 = (65535-(1/1200)*system_osc)/256; / 计算tl1应装入的初值 音长 (10ms的初装值) sound_temp_tl1 = (65535-(1/1200)*system_osc)%256; / 计算th1应装入的初值 th1 = so
40、und_temp_th1; /音长初值装入定时器t1 tl1 = sound_temp_tl1; tmod = 0x11; /工作方式1 et0 = 1; /允许定时器t0中断 et1 = 0; tr0 = 0; tr1 = 0; ea = 1;void beeptimer0() interrupt 1 /音符发生中断,按键 if(esc=0) delay(5); if(esc=0) stop=1;/停止播放 while(!esc); / beepio = !beepio; th0 = sound_temp_th0; /定时器0重装初值 tl0 = sound_temp_tl0;/*void
41、play(unsigned char *sound,unsigned char signature,unsigned octachord,unsigned int speed) /sound为演奏歌曲歌名,signature是指乐曲升多少个半音演奏, /octachord:降八度, 2:不升不降, 3:升八度,speed歌曲演奏速度 unsigned int newfretab12; /新的频率表 unsigned char i,j; unsigned int point,ldiv,ldiv0,ldiv1,ldiv2,ldiv4,currentfre,temp_t,soundlength; /
42、point 指针索引值,ldiv音符演奏的长度(多少个10ms),currentfre 查出对应音符的频率 /soundlength歌曲长度,temp_t计算计数器初值 unsigned char tone,length,sl,sh,sm,slen,xg,fd;/tone音调,length音长, for(i=0;i 11) /进入高音音域 j = j-12; newfretabi = fretabj*2; /频率翻倍速 else newfretabi = fretabj; if(octachord = 1) /需要降八度 newfretabi=2; else if(octachord = 3) /需要升八度 newfretabi=2; /否则不用改! soundlength = 0; while(soundsoundleng
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙西南革命根据地纪念馆讲解员招聘1人笔试备考题库及答案解析
- 2026江苏省卫生健康委员会所属事业单位长期招聘101人(一)笔试备考题库及答案解析
- 2026富民村镇银行春季招募笔试备考试题及答案解析
- 2026四川乐山市犍为县第一批就业见习岗位及招募见习人员58人笔试备考题库及答案解析
- 4.6.3 神经系统支配下的运动(第一课时)教学设计-2025-2026学年人教版(2024)生物八年级上册
- 2026重庆医科大学附属第二医院第9批援巴巴多斯医疗队厨师(编外)岗位招聘1人笔试备考试题及答案解析
- 2026广西防城港市海洋与渔业执法支队招聘编外聘用人员3人笔试备考试题及答案解析
- 2026年上半年甘肃省水利厅所属事业单位招聘39人笔试备考题库及答案解析
- 2026年临川经开区公开引进高层次人才笔试备考试题及答案解析
- 2026春季海南海口市琼山区龙塘镇中心幼儿园外聘人员招聘2人笔试备考试题及答案解析
- DB37∕T 4985-2025 农村公路交通安全设施设置规范
- 探究中国气候特征及其对人类活动的影响-基于八年级地理学科的深度教学设计
- 职业教育人工智能应用发展报告(2024-2025)
- 2025华北水利水电工程集团有限公司应届高校毕业生招聘(公共基础知识)测试题附答案解析
- GB/T 43556.3-2025光纤光缆线路维护技术第3部分:基于光传感技术的光缆识别
- 地理中国的气候第三课时课件-2025-2026学年八年级地理上学期(湘教版2024)
- 家用药箱劳动课件
- 西安民宿管理制度规定
- 产业链韧性理论研究新进展与提升路径
- 2024年个人居间保密协议3篇
- (正式版)SHT 3551-2024 石油化工仪表工程施工及验收规范
评论
0/150
提交评论