基于51单片机的音乐盒的设计毕业设计

上传人:无*** 文档编号:74529153 上传时间:2022-04-14 格式:DOC 页数:38 大小:899.11KB
返回 下载 相关 举报
基于51单片机的音乐盒的设计毕业设计_第1页
第1页 / 共38页
基于51单片机的音乐盒的设计毕业设计_第2页
第2页 / 共38页
基于51单片机的音乐盒的设计毕业设计_第3页
第3页 / 共38页
点击查看更多>>
资源描述
摘 要: 随着人类社会的不断繁荣与发展,人们对自身生活品质的要求也变得越来越高,在听觉方面传统的音乐盒能带给人们的更多的只是美好的回忆,而由于单片机具有的体积小、成本低、运算快和功耗小等特点得到了人们越来越广泛的运用。本设计是一个基于STC89C52系列单片机的音乐盒,依据单片机技术及原理,通过硬件电路的制作以及软件编译,设计制作出一个插卡式音乐盒。该音乐盒主要是由按键电路、继电器电路、LCD显示电路以及扬声器组成。使用五个按键控制音乐盒,分别用来控制音乐盒的播放/暂停,复位,切换上一曲/下一曲,本音乐盒利用优盘共存有五首歌曲。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,之后下载进51单片机中使用。关键词:单片机 音乐盒 LCD Abstract With the continuous development of human society, peoples quality of life demands are increasingly high, the traditional music box in the auditory aspectto bring people more good memories, but due to the microcomputer has the advantages of small volume, low cost, low power consumption and fast operation has been more and more extensive use. The design is based on the music box STC89C52 Series MCU, based on single chip microcomputer principle, the hardware circuit and software compilation, designed to produce aplug-in music box. The music box is composed of a key circuit, a relay circuit,LCD display circuit and a loudspeaker. The use of four buttons control themusic boxes, music boxes were used to control the play / pause, switch on a /the next song, the music box using the USB coexist with five songs. The design of programming on the music box and debug source code using KEIL programming software, then download into 51 single chip processor.Keywords: SCM Music Box LCD 目 次目 次31 引言41.1 音乐盒的意义41.2 研究内容52.1系统总体框架图62.2音乐盒的设计原理62.3 单片机芯片概述73 硬件电路设计83.1 单片机最小系统原理图83.1.1 复位电路83.1.2 晶振电路93.1.3时钟电路93.2 LCD显示模块93.3 继电器模块113.3.1电磁继电器的工作原理和特性123.3.2 固态继电器的工作原理和特性123.3.3 继电器主要产品技术参数123.4 按键模块133.5 其它134 软件设计144.1 软件总体流程图144.2播放/暂停子程序154.3 LCD显示模块软件设计174.3.1 LCD的初始化函数174.3.2 LCD与继电器的函数185 系统实现195.1 硬件调试205.1.1 按键控制的实现205.1.2 LCD显示215.1.3 其他21总 结22致谢23参考文献24附录A 元器件清单25附录B 源程序261 引言在进入21世纪后,单片机产品的发展正朝着高性能和多品种方向,并且发展趋势是进一步朝着CMOS化、小体积、低功耗、大容量、高性能、低价格以及外围的电路内装化等几个方面去发展。单片机的应用的重要意义还是在于它是从根本上改变了传统的控制系统设计思想和设计方法。过去必须要由模拟电路或者数字电路才可以实现的大部分的功能,现在已能完全可以用单片机通过软件的方法来实现了。这种由软件去代替硬件的控制技术也称之为微控制技术,这是传统控制技术的一次革命。单片机可以说渗透到了我们生活的各个方面,几乎难以找到哪个领域里没有单片机的踪迹。导弹中的导航装置,飞机里安装的各种仪表的控制,计算机里的网络通讯与数据传输方面,工业自动化过程中实时控制和数据处理方面,生活中被广泛使用的各种智能IC卡,民用的高档轿车的安全保障系统,摄像机、录像机、全自动洗衣机所涉及的控制方面,以及远程控制的玩具、电子宠物等等,这些全都是离不开单片机的。而伴随着科学技术的不断进步和社会的持续发展,人类所接触的更种信息也在不断增加并且信息变得越来越复杂。面对着浩如烟海的繁杂信息,人们目前已经能利用计算机等工具快速、精准地对其进行快速处理,但要想将其处理完毕的信息及时、清晰地传递给其他人,还必须要寻找更加卓越的显示技术去实现它。而单片机技术与液晶显示技术的结合,恰恰使得信息的传输交流向着智能化可视化方向进行快速发展。1.1 音乐盒的意义音乐盒的起源,可以追溯到中世纪欧洲文艺复兴时期。当时为了使教会的钟塔报时,而将大小的钟表装上了机械装置,被称之为“可发出声音的组钟”。音乐盒已有着300多年的发展历史,是人类文明发展的历史见证。传统的音乐盒大多是机械音乐盒,其工作的原理是通过齿轮来带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击用铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积较大,比较笨重,并且发音单调。水和灰尘等外在因素,容易使得内部金属发音条变形,从而会造成发音跑调。此外,机械音乐盒放音时为了能让音色稳定,必须要放平不能动摇,而且价格昂贵,不能够实现大批量生产。1.2 研究内容 利用STC89C52单片机,结合LCD显示模块、继电器驱动模块、音频解码电路 ,完成音乐盒的播放;具体设计实现的功能如下(1)通过按键控制多首音乐播放,并可通过按键选择一个开始,一个暂停,一个翻上首,一个翻下首;(2)通过显示电路显示播放歌曲名或编号; 2 系统总体设计2.1系统总体框架图 音乐盒的系统结构是以STC89C52单片机位控制核心,加上5个按键、继电器、扬声器、LCD显示模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和LCD显示屏显示歌曲名以及扬声器发音。系统组成框图如图2.1所示。 扬声器 继电器 显示模块 音频解码 STC89C52 单片机 按键 图2-1 系统总体框架图 2.2音乐盒的设计原理 利用KEIL软件编音乐盒写程序,将编写好的程序下载进51单片机内,利用单片机控制LCD显示歌曲名,之后将所需要播放的歌曲放入U盘,利用由继电器控制音频解码电路来实现音乐的播放,再通过按键实现上一首和下一首及暂停播放。2.3 单片机芯片概述STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。原理图如下 图 2-2 单片机引脚图3 硬件电路设计3.1 单片机最小系统原理图 图 3-1 单片机最小系统原理图3.1.1 复位电路 复位电路:由两个电容串联电阻构成,由图3.1并结合电容电压不能够突变的性质,可以知道,当系统一上电时,RST脚将会出现高电平,并且,这个高电平持续的时间是由电路中的RC值来决定的.典型的51单片机中当RST脚的高电平持续两个机器周期以上时就将复位,所以,适当的组合RC的取值就可以保证可靠的复位.一般教科书中推荐C 取10u,R取8.2K.当然也还是有其他取法的,但原则就是要让RC的组合可以在RST脚上产生至少2个机械周期的高电平.至于如何具体得定量计算,可以参考实际电路分析相关书籍.a.复位操作复位是单片机里的初始化操作。其主要的功能是把PC初始化为0000H,使得单片机从0000H单元开始来执行程序。除了在进入系统的正常初始化之外,当由于程序运行时出错或是操作错误使系统处于死锁状态时,为了摆脱困境,也需要按复位键重新启动。b.复位信号RST引脚是复位信号的输入端。复位信号是高电平时有效,其有效时间是应持续24个振荡周期(即二个机器周期)以上。若是使用频率为6MHz的晶振,则其复位信号持续时间要超过4us才能够完成复位操作。3.1.2 晶振电路晶振电路:典型的晶振取11.0592MHz(因为是可以准确的得到9600波特率和19200波特率,用在有串口通讯的场合)/12MHz(产生精确的uS级时歇,来方便定时操作)单片机:一片STC89C52/S51或其他51系列兼容单片机3.1.3时钟电路 STC89C52内部有一个可用于构成振荡器的高增益反相放大器,而引脚RXD与TXD分别是这个放大器的输入端和输出端。时钟可由内部方式产生或外部方式产生。内部方式的时钟电路在RXD和TXD引脚上可外接定时元件,而内部振荡器就能产生自激振荡。定时元件通常是采用石英晶体及电容组成的并联谐振回路。晶体的振荡频率可以在1.212MHz之间选择,一般电容值在530pF之间选择,电容值的大小可以对频率起到微调的作用。3.2 LCD显示模块LCD原理图如下图图 3-2 LCD原理图 LCD(Liquid Crystal Display)是利用液晶分子的物理结构以及光学特性来进行显示的一种技术。液晶分子的特性:液晶分子是一种介于固体和液体之间的棒状结构的大分子物质;并且在自然形态下,具有光学各向异性的特点,在电(磁)场的作用下,呈各向同性特点:下面以直视型的简单多路TN/STN LCD Panel(液晶显示面板)的基本结构来介绍LCD的基本显示原理,示意图如图 图 3-3 LCD的基本显示原理 3.2.1 LCD显示屏的特点a、显示质量高 由于液晶显示器中每一个点在收到信号之后就会一直保持那种色彩和亮度,且恒定发光,而不会像阴极射线管显示器(CRT)那样要去不断刷新亮点。因此,液晶显示器不仅显示画质高而且绝对不会闪烁,可以把眼睛疲劳降到最低。 b、没有电磁辐射 传统的显示器的显示材料是荧光粉,是通过电子束撞击荧光粉来实现显示,当电子束在打到荧光粉上的一刹那间是会产生强大的电磁辐射的,尽管目前有许多的显示器产品在处理辐射问题上进行了很多比较有效的处理,尽可能的把辐射量降到最低水平,但是要彻底消除是十分困难的。相对来讲,液晶显示器在防止辐射方面是具有先天优势的,因为它根本就不存在任何辐射。在电磁波的防范方面,液晶显示器也是有自己独特的优势,它采用了十分严格的密封技术将来自驱动电路里的少量电磁波封闭在了显示器中,然而普通显示器为了散发热量的需求,必须要尽可能地让内部的电路与空气相接触,这样内部电路所产生的电磁波也就大量地向外“泄漏”了。 c、可视面积大对于尺寸相同的显示器来讲,液晶显示器的可视面积是要更大一些。液晶显示器的可视面积和它的对角线尺寸是相同的。而阴极射线管显示器显像管前面板四周是有一英寸左右的边框不能用于显示的。 d、应用范围广 最初的液晶显示器因为无法用来显示细腻的字符,所以通常应用在电子表、计算器上。但随着液晶显示技术的不断发展和进步,字符显示开始变得越来越细腻起来,同时也开始支持基本的彩色显示,并逐步被用于液晶电视、摄像机的液晶显示器上、掌上游戏机上。3.3 继电器模块继电器是一种由电子控制的器件,它具有控制系统(又称之输入回路)和被控制系统(又称之输出回路),通常被应用于自动控制电路中,它实际上就是用较小的电流去控制较大电流的一种“自动开关”。所以在电路中起着自动调节、安全保护、转换电路等作用。3.3.1电磁继电器的工作原理和特性电磁式继电器大都是由铁芯、线圈、衔铁、触点簧片等组成的。只需要在线圈两端加上一定的电压,线圈中就会有一定的电流经过,从而产生了电磁效应,而衔铁就将会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,之后带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电之后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力下返回原来的位置,使动触点与原来的静触点(常闭触点)相吸合。这样通过吸合、释放,从而达到了在电路之中的导通、切断的目的。而对于继电器中的“常开、常闭”两触点,可以这样来区分:继电器线圈未通电时候处于断开状态的静触点,称为“常开触点”;反之处于接通状态的静触点称为“常闭触点”。 3.3.2 固态继电器的工作原理和特性固态继电器是一种由两个接线端为输入端,另两个接线端作为输出端的四端器件,中间是采用隔离器件实现输入输出的电隔离。固态继电器按负载电源类型可分为交流型和直流型。按开关型式可将其分为常开型和常闭型。按隔离型式可将其分为混合型、变压器隔离型和光电隔离型,而以光电隔离型为最多。3.3.3 继电器主要产品技术参数1、额定工作电压 其是指继电器正常工作时候线圈所需要的电压。根据继电器的型号的不同,可以是交流电压,也能够是直流电压。2、直流电阻 其是指继电器中线圈的直流电阻,能够通过万能表测量。3、吸合电流 其是指继电器能够产生吸合动作的最小电流。当在正常使用时,给定的电流必须要略大于吸合电流,这样继电器才能够稳定地工作。而对于线圈所加的工作电压,一般是不要超过额定工作电压的1.5倍,否则会产生较大的电流而把线圈烧毁。4、释放电流 其是指继电器产生释放动作的最大电流。当继电器吸合状态的电流减小到一定程度时,继电器就会恢复到未通电的释放状态。这时的电流远远小于吸合电流。 5、触点切换电压和电流 其是指继电器所允许加载的电压和电流。它决定了继电器能够控制电压和电流的大小,使用时不能超过此值,否则就会很容易损坏继电器的触点。3.4 按键模块按键模块原理图如下:3-4 按键原理图按键初步设计是由五个按键来完成所有的操作,它们的功能分别是:上一曲、下一曲、暂停、复位和控制复位。3.5 其它 扬声器是一种将电信号转变为声信号的换能器件,扬声器的性能优劣对音质造成的影响很大。扬声器在音响设备中是一个最为薄弱的器件,而相对于音响效果而言,它又是一个最为重要的部件。扬声器的种类繁多,而且价格相差也很大。音频电能通过电磁,压电或者静电效应,使其纸盆或膜片振动并和周围的空气产生共振(共鸣)从而发出声音。低档的塑料音箱因其箱体单薄而无法克服谐振,无音质可言(但也有部分设计好的塑料音箱要远远好于劣质的木质音箱);木制音箱降低了箱体谐振时所造成的音染,音质要普遍好于塑料音箱,通常多媒体音箱都是双单元二分频设计的,一个较小的扬声器用来负责中高音的输出,而另一个较大的扬声器则负责中低音的输出。 4 软件设计4.1 软件总体流程图软件程序主要实现LCD显示模块、控制扬声器模块、按键模块等。LCD显示模块:用来显示播放的歌曲名;扬声器模块:用来播放歌曲;按键模块:就是用来控制歌曲播放和暂停,以及切换上一曲下一曲。主模块流程图如图4.1所示: 开始 初始化 上一曲/下 一曲 歌曲查询 LCD显示播放/暂停 等待播放 播放歌曲判断是否继续 图 4-1 软件总体流程图总体流程图主程序:void main() unsigned char num; char gequ111=QiJiShiJie; /写入歌曲名 char gequ27=QiuHua; char gequ311=ShenShenAi; char gequ411=TianLanLan; char gequ517=WoCongCaoYuanLai; char gequ615=ZhongGuoWeiDao; char gequ711=ZiYouZiZai; char gequ86=gequ8; 单片机中写入的歌曲名4.2播放/暂停子程序播放/暂停在程序利用内部中断T0口。将T0口设为计数中断并工作在方式2下。标识符初值赋值为R1=00H,计数初值设为TH0=0FFH,TL0=0FFH。当按键第一次产生中断信号时,播放/暂停子程序改变标志符R1,将其赋值为01H。此时播放器由暂停状态进入播放状态。当按键第二次产生中断信号时,播放/暂停子程序判断R1是否为02H后,将R1再次赋值为00H。此时,播放器由播放状态进入暂停状态。 开始 标识符R0=00HR0是否为 00H 暂停播放播放/暂停 将R0赋值00H将R0赋值01HR0是否为02H 图4-2 播放流程代码实现如下: POP DPL ;恢复现场 POP DPH POP ACC SETB EA RETI ;中断返回START_PAUSE:CPL F0 ;开始/暂停中断处理程序,将标置位取反 JB F0,RETURN ;为1返回 SETB TR0 ;为0则播放RETURN: RETI ;中断返回DELAY: MOV 27H,26H ;音乐演奏控制D2: MOV 28H,#125D3: MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET4.3 LCD显示模块软件设计4.3.1 LCD的初始化函数 void LCD_Init(void) LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/4.3.2 LCD与继电器的函数 LCD_Write_String(5,0,YinYueHe); while (1) if(key0=0) DelayMs(20); /延时 if(key0=0) /条件选择 while(!key0); JiDianQi=0; / LCD的显示和继电器控制扬声器的同步 if(key1=0) DelayMs(20); if(key1=0) while(!key1); JiDianQi=1;5 系统实现本设计实现的是音乐盒的播放以及用LCD显示屏显示播放曲目,系统的硬件实现如下图所示: 图5-1 歌曲切换 图 5-2 歌曲切换5.1 硬件调试5.1.1 按键控制的实现本设计中通过按键实现控制上一曲、下一曲、音乐暂停和音乐开始,如下图: 图5-3 显示电路的实现5.1.2 LCD显示本设计中利用LCD显示实现歌曲曲目的显示,如下图: 图 5-4 LCD显示5.1.3 其他 软件部分主要是利用KEIL软件编写的音乐盒单片机程序的运行成功。如图 图 5-5软件实现总 结单片机音乐盒的设计在经历了近两个月后终于基本完成了,在当时选择这个题目时觉得一点思路都没有,之后在和老师讨论以及向其他同学请教之后确定了以STC89C52单片机为基础的数字音乐盒。音乐盒的主要组成部分有LCD显示、单片机最小系统、继电器电路、扬声器组成;经过不断的修改与完善音乐盒可以实现使用LCD显示播放的歌曲名、用按键控制音乐的播放/暂停和切换上一曲/下一曲,通过这次的毕业设计我了解了如何使用keil软件来编写所需要的程序,怎么去合理的设计一个电路,更收获了单独做一个设计所需要的经验;这些都是在本次设计中我所学到的,让我受益匪浅。然而,伴随着收获的往往还有遗憾,在这次的设计中我所做的音乐盒还有一些瑕疵和还未实现的功能;音乐盒是将放在U盘内的歌曲通过音频解码后使用由继电器控制的扬声器播放的,但是,如果U盘内的歌曲更换时,LCD的显示必须要再次通过Keil软件来添加新的歌曲曲名,否则就无法显示着一点是十分麻烦的。而且在原来的计划中,音乐盒播放时是想使用跑马灯来渲染的,但是由于程序编写存在问题使得跑马灯设计失败。 参考文献1罗亚非.凌阳16位单片机应用基础M,北京:北京航空航天大学出版社,2003.2 雷思孝.凌阳单片机原理及实用技术M,西安电子科技大学,2004.3 黄智伟.凌阳单片机课程设计指导M,北京:北京航空航天大学出版社,2006.11.4 李广弟,朱月秀,王秀山.单片机基础M,北京:北京航空航天大学出版社,2001.7.5 赵曙光,郭万有,杨颂华.可编程逻辑器件原理开发与应用M,西安:西安电子科技大学, 2000.6 李建忠.单片机原理及应用M,西安电子科技大学出版社,2008.2. 7 康华光. 模拟电子技术基础(第四版)M, 武汉:华中理工大学出版社,1999.8 谭浩强.C语言程序设计(第二版)M,北京:清华大学出版社,1991.9 陈小忠,黄宁. 单片机接口技术实用子程序M,北京:北京人民邮电出版社, 2005.10 黄智伟.全国大学生电子设计竞赛系统设计M,北京:北京航空航天大学出版社,2006.6.11 贾立新,王涌.电子系统设计与实践M,北京:清华大学出版社,2007.附录A 元器件清单 表1 元器件清单STC89C52 1个LCD显示屏 1个扬声器 1个继电器 1个按键 5个电源线 1根附录B 源程序#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define _Nop() _nop_() /定义空指令#define DataPort P0sbit RS = P24; /定义端口 sbit RW = P25;sbit EN = P26;sbit SDA=P21; /模拟I2C数据传送位sbit SCL=P20; /模拟I2C时钟控制位sbit key0=P10;sbit key1=P11;sbit key2=P12;sbit key3=P13;sbit JiDianQi=P14; bit ack; /应答标志位void DelayUs2x(unsigned char t);/函数声明 void DelayMs(unsigned char t);/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 启动总线-*/void Start_I2c() SDA=1; /发送起始条件的数据信号 _Nop(); SCL=1; _Nop(); /起始条件建立时间大于4.7us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SDA=0; /发送起始信号 _Nop(); /起始条件锁定时间大于4 _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /钳住I2C总线,准备发送或接收数据 _Nop(); _Nop();/*- 结束总线-*/void Stop_I2c() SDA=0; /发送结束条件的数据信号 _Nop(); /发送结束条件的时钟信号 SCL=1; /结束条件建立时间大于4 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /发送I2C总线结束信号 _Nop(); _Nop(); _Nop(); _Nop();/*- 字节数据传送函数 函数原型: void SendByte(unsigned char c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对 此状态位进行操作.(不应答或非应答都使ack=0 假) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。-*/void SendByte(unsigned char c) unsigned char BitCnt; for(BitCnt=0;BitCnt8;BitCnt+) /要传送的数据长度为8位 if(cBitCnt)&0x80)SDA=1; /判断发送位 else SDA=0; _Nop(); SCL=1; /置时钟线为高,通知被控器开始接收数据位 _Nop(); _Nop(); /保证时钟高电平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=1; /8位发送完后释放数据线,准备接收应答位 _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /判断是否接收到应答信号 SCL=0; _Nop(); _Nop();/*- 字节数据传送函数 函数原型: unsigned char RcvByte();功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号), 发完后请用应答函数。 -*/unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; /置数据线为输入方式 for(BitCnt=0;BitCnt8;BitCnt+) _Nop(); SCL=0; /置时钟线为低,准备接收数据位 _Nop(); _Nop(); /时钟低电平周期大于4.7us _Nop(); _Nop(); _Nop(); SCL=1; /置时钟线为高使数据线上数据有效 _Nop(); _Nop(); retc=retc1; if(SDA=1)retc=retc+1; /读数据位,接收的数据位放入retc中 _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);/*- 应答子函数原型: void Ack_I2c(void); -*/void Ack_I2c(void) SDA=0; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); /时钟低电平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; /清时钟线,钳住I2C总线以便继续接收 _Nop(); _Nop(); /*- 非应答子函数原型: void NoAck_I2c(void); -*/void NoAck_I2c(void) SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); /时钟低电平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; /清时钟线,钳住I2C总线以便继续接收 _Nop(); _Nop(); /*- 向无子地址器件发送字节数据函数 函数原型: bit ISendByte(unsigned char sla,ucahr c); 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla. 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/*bit ISendByte(unsigned char sla,unsigned char c) Start_I2c(); /启动总线 SendByte(sla); /发送器件地址 if(ack=0)return(0); SendByte(c); /发送数据 if(ack=0)return(0); Stop_I2c(); /结束总线 return(1);*/*- 向有子地址器件发送多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no); 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no) unsigned char i; Start_I2c(); /启动总线 SendByte(sla); /发送器件地址 if(ack=0)return(0); SendByte(suba); /发送器件子地址 if(ack=0)return(0); for(i=0;ino;i+) SendByte(*s); /发送数据 DelayMs(1); if(ack=0)return(0); s+; Stop_I2c(); /结束总线 return(1);/*- 向无子地址器件读字节数据函数 函数原型: bit IRcvByte(unsigned char sla,ucahr *c); 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地 址sla,返回值在c. 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/*bit IRcvByte(unsigned char sla,unsigned char *c) Start_I2c(); /启动总线 SendByte(sla+1); /发送器件地址 if(ack=0)return(0); *c=RcvByte(); /读取数据 NoAck_I2c(); /发送非就答位 Stop_I2c(); /结束总线 return(1);*/*- 向有子地址器件读取多字节数据函数 函数原型: bit ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no); 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。 如果返回1表示操作成功,否则操作有误。注意: 使用前必须已结束总线。-*/bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no) unsigned char i; Start_I2c(); /启动总线 SendByte(sla); /发送器件地址 if(ack=0)return(0); SendByte(suba); /发送器件子地址 if(ack=0)return(0); Start_I2c(); SendByte(sla+1); if(ack=0)return(0); for(i=0;ino-1;i+) *s=RcvByte(); /发送数据 Ack_I2c(); /发送就答位 s+; *s=RcvByte(); NoAck_I2c(); /发送非应位 Stop_I2c(); /结束总线 return(1);/*- 判忙函数-*/ bit LCD_Check_Busy(void) DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); /*- 写入命令函数-*/ void LCD_Write_Com(unsigned char com) / while(LCD_Check_Busy(); /忙则等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _n
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!