




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机红外密码锁毕业论文目录摘要2Abstract3第一章 绪论61.1 设计思路61.2 设计的意义61.3 课题背景61.4 密码锁发展趋势和特点7第二章 红外遥控系统82.1 红外通信原理82.2 红外线的基本知识92.3 红外遥控系统结构102.3.1 调制102.3.2 解码102.3.3 发射系统112.3.4 红外接收头HS0038 122.4 红外编码格式132.5 密码锁的功能14第三章 红外密码锁硬件设计163.1 系统整体框图163.1.1 最小系统163.2 LCD1602介绍193.2.1 LCD1602引脚名称及功能图193.3 密码锁设计203.4 4*4按键设计和仿真图21第四章 红外密码锁的软件部分194.1 LCD1602软件设计224.2 红外系统软件设计224.3 红外遥控密码锁主程序设计23第五章 系统的调试 225.1 调试仪器255.2 整体调试255.3 硬件调试255.4 软件调试25第六章 结论27致谢28参考文献29附录29第一章 绪论1.1设计思路该设计考虑到实际需要,以单片机为主控器,设计了一套较简易实用系统,实现红外遥控密码锁系统的基本控制功能。该系统的硬件部分包括红外发射和接收、显示输出、按键等部分。红外发射器和接收装置对红外遥控的处理,显示输出部分采用LCD1602显示,系统软件部分用单片机C语言实现了本设计的全部控制功能。效果快速精确,示清晰直观,比较理想的实现了设计要求.它解决了已往机械式的不安全和操作不方便等弊端,而红外遥控应用将更加广泛,实用性更强。1.2设计的意义目前大部分的锁采用的都是机械式的,其最大的缺点是利用简单工具就能很容易地把锁打开。针对这种情况,我们设计了一种红外遥控密码锁,而一般设备都采用专用的遥控编码及解码集成电路,其制作简单、容易,保密性好、安全可靠、成本低廉、连接方便,简单易用,适用范围广等优点。1.3课题背景 进入二十一世纪以来各种电子信息技术进入高速发展阶段,包括信息系统技术微电子、计算机和现代通信技术、传感器技术,这也包括红外线技术,红外线是一种人的肉眼看不见的光线,最近二三十年来,初露头角的红外技术,在各个领域里获得了广泛的应用。开始应用到生产上,并形成了一门崭新的技术红外技术。本设计针对传统机械锁的不足而设计的通过红外来控制的密码锁1.4密码锁的发展趋势与特点密码锁产生也是经历了一些阶段的,有传统的机械密码锁,电子密码锁,数字密码锁等。随着科学技术的发展,一些以芯片特别是单片机为处理核心的新型密码锁开始不断出现。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁等任务。本论文就以AT89C51单片机设计了一个红外遥控密码锁。第二章 红外遥控系统2.1 红外通讯原理红外通信的基本原理是发送端将基带二进制信号调制为一系列的脉冲串信号(载波信号) ,通过红外发射管发射红外信号。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。脉时调制(PPM)是红外数据协会(IrDA)和国际电子电工委员会(IEEE)都推荐的调制方式,本设计采用PPM调制方法,即用两个脉冲串之间的时间间隔来表示二进制信息,数据比特的传送仿照不带奇偶校验的RS232 通信,首先产生一个同步头,然后接着 8 位数据比特。如图 1.1所示如图1.1 PPM调制波形图普通的红外遥控采用面向指令的帧结构,数据帧由同步码,地址码和指令码组成,指令码长度多为 816 个比特,传送多字节遥控协议时效率偏低,而增加指令码的长度不利于接收器同步,为此本设计选用一种面向字节的帧结构,采用类似于异步串行通信的帧结构,每帧由一个起始位(二进制数 0) 、8 个数据位和 2 个停止位(二进制数 1)构成,如图1.2 所示。每帧传送 1 个字节的数据,帧与帧间隔大于 2ms,帧结构不含地址信息,寻址问题由高层协议解决。 如图1.2 数据帧结构示意图由于红外光存在反射,在全双工的方式下发送的信号也可能会被本身接收,因此红外通信应采用异步半双工方式,即通信的某一方发送和接收是交替进行的。2.2 红外线的基本知识 所谓红外线是指波长超过红色可见光的电磁辐射,利用红外辐射实现的无线数据传输,称为红外线技术。红外线波长一般是在750nm至1mm之间,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。 红外通讯一般采用红外波段内的近红外线,波长在0.75um至25um之间。红外数据协会(IRDA)成立后,为了保证不同厂商的红外产品能够获得最佳的通讯效果,红外通讯协议将红外数据通讯所采用的光波波长的范围限定在850nm至900nm之内。 由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通讯的场合,进行点对点的直线数据传输。 红外通信是利用红外技术实现两点间的近距离保密通信和信息转发。它一般由红外发射和接收系统两部分组成。发射系统对一个红外辐射源进行调制后发射红外信号,而接收系统用光学装置和红外探测器进行接收,就构成红外通信系统。 红外通信具有保密性强,息容量大,结构简单等特点,既可以是室内使用,也可以在野外使用,由于它具有良好的方向性,常被用于国防边界哨所与哨所在之间的保密通信, 但红外射束易受尘埃、雨水等物质的吸收,如何在野外环境下克服这些物质的吸收,增强红外射束信号的强度是重要的研究课题。2.3红外遥控系统结构红外遥控系统主要分为调制部分、发射部分、接收部分,如图1.3所示:如图1.3 红外遥控系统2.3.1 调制 红外信号的调制有脉冲宽度调制(PWM),脉冲位置调制(PPM)等方法,本设计采用脉宽调制。二进制的调制由单片机来完成,它把编码后的二进制信号调制成频率为38khz的间断脉冲串,此脉冲串即是用于红外发射二极管发送的信号。如图2-4,A是二进制信号的编码波形,B是频率为38khz(周期约为26us)的连续脉冲串,C是经调制后的间断脉冲串,即是用于发送的信号。图2-4中,待发的二进制数据为101。2.3.2 解码如图1.4 信号调制示意图二进制信号的解调由一体化红外接收头来完成,它把接收到的信号经内部处理并解调复原,输出如图中的波形E。接收头的解调可理解为:在输入脉冲串时输出低电平,否则输出高电平。二进制的解码由单片机来完成,它把红外接收头送来的二进制编码波形通过解码,还原成发送端发送的数据。如图1.5把波形E解码还原成数据信息101。如图1.5 信号解调示意图2.3.3 发射系统目前有很多种芯片可以实现红外发射,可以根据选择发出不同种类的编码。由于发射系统一般用电池供电,这就要求芯片的功耗要很低,芯片大多都设计成可以处于休眠状态,当有按键按下时才工作,这样可以降低功耗,芯片所用的晶振应该有足够的耐物理撞击能力,不能选用普通的石英晶体,一般是选用陶瓷共鸣器,陶瓷共鸣器准确性没有石英晶体高,但通常一点误差可以忽略不计。 红外线通过红外发光二极管(LED)发射出去,红外发光二极管内部材料和普通发光二极管不同,在其两端施加一定电压时,它发出的是红外线而不是可见光。如图1.6 简单驱动电路 如图1.7 发射极输出驱动电路如图1.6和图1.7是LED的驱动电路,图3a是最简单电路, 选用元件时要注意三极管的开关速度要快,还要考虑到LED的正向电流和反向漏电流,一般流过LED的最大正向电流为100mA,电流越大,其发射的波形强度越大。 图2.5电路有一点缺陷,当电池电压下降时,流过LED的电流会降低,发射波形强度降低,遥控距离就会变小。图2.6所示的射极输出电路可以解决这个问题,两个二极管把三级管基极电压钳位在1.2V左右,因此三级管发射极电压固定在0.6V左右,发射极电流IE基本不变,根据IEIC,所以流过LED的电流也基本不变,这样保证了当电池电压降低时还可以保证一定的遥控距离。2.3.4 红外接收头HS0038如图1.8 红外接收头HS0038红外接收头的种类很多,引脚定义也不相同,一般都有三个引脚,包括供电脚,接地和信号输出脚。根据发射端调制载波的不同应选用相应解调频率的接收头,本设计选用如图1.8的红外接收头。红外接收头内部放大器的增益很大,很容易引起干扰,因此在接收头的供电脚上须加上滤波电容,一般在22uf以有的厂家建议在供电脚和电源之间接入330欧电阻,进一步减少电源干扰。2.4红外编码格式遥控发射器专用芯片很多,红外遥控的编码目前广泛使用的是:NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC5 Protocol 的 PPM,本设计基于NEC协议。其编码特征如下: 1)8 位地址和 8 位指令长度; 2)地址和命令 2 次传输(确保可靠性) 3)PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 4)载波频率为 38Khz; 5)位时间为1.125ms 或 2.25ms; 一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us脉冲+1680us低电平),占空比1/4:一个逻辑 0的传输需要 1.125ms(560us 脉冲+560us 低电平),占空比1/2。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。如图1.9所示: 如图1.9 红外脉冲NEC 遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制反码均是8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性,如图2.0所示: 如图2.0 遥控指令数据格式一个命令只发送一次,即使遥控器上的按键一直按着。但是会每110ms发送一次代码,直到遥控器按键释放。如图 2.1 如图 2.1 重复按键数据格式2.5 密码锁的功能a:设定密码在该设计中设定了一组原始密码123456,用户可以通过主机矩形键盘的修改键来修改原始密码。b: 密码输入有效显示为了确信是否有键按下以及防止密码外泄,在电路中设置了数码管显示,即在显示时并不是显示用户按下的数字符号,而是在输入一位时,数码管则显示一个字符“ *”,这样既巧妙地提醒了用户又保护了用户密码。c:错误报警当用户输入的密码连续三次出现密码错误时,系统会长期报警不止,这时必须按复位方可停止。d. 遥控开锁这是本论文设计中的最大特点之处,用户可以不必在主机上输入。密码开锁。只要手执遥控器,键入正确密码,便会自动开锁如果密码错误,同样也会报警第三章 硬件设计3.1 系统整体框图本文所设计的红外遥控密码锁系统由AT89C51单片机及其最小系统、红外接收头、红外发射器、蜂鸣器、电磁锁、LCD1602液晶显示等部分组成。如图2.2所示 如图2.2 系统整体框图3.1.1 最小系统本设计是采用的AT89C51的单片机,它的引脚如图2.3所示,引脚说明如下:1、 信号引脚:P0.0:P0.7、P1.0:P1.7、 P2.0:P2.7、 P3.0:P3.7都是8位双向口线,都由锁存器、输入缓冲器、输出驱动器组成。2、 ALE:地址锁存控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存器锁存起来,以实现低位地址和数据的隔离。3、 PSEN:外部程序存储器读选通信号。以实现外部ROM单元读操作。4、 EA:访问程序存储控制信号。5、 RST:复位信号。6、 XTAL1和XTAL2:外接晶体引线端。当使用芯片内部时钟时,用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。7、 VSS:地线8、 VCC:+5V电源。 如图2.3 AT89C51引脚图本设计采用AT89C51系列单片机。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案其中最小系统包括复位电路、晶振电路。复位电路:此设计采用手动按键复位方式实现系统的复位操作.手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位.其结构如图 中R17和C6及按键.手动按键复位是通过按键将RST与VCC接通来实现.如图2.4所示晶振电路:单片机内部具有一个高增益反相放大器,用于构成振荡器.通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构如图 中Y1,C5,C6.本设计选择12MHz频率的石英晶体,补偿电容采用30pF左右的瓷片电容。如图2.5所示 如图2.4 复位电路接线图如图2.5 晶振电路接线图3.2 LCD1602的介绍LCD1602显示器具有体积小、功耗低、显示内容丰富、超薄轻巧等优点,因此,在袖珍式仪表和低功能应用系统中得到越来越广泛的应用。LCD1602液晶显示是2行*16个字符的字符型显示器,它由32个字符点阵块组成,每个字符点阵块由5*7或5*10个点阵组成,可以显示ASCII码表中的所有可视的字符,采用+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。如图2.6 所示LCD1602及其接口设计图。如图2.6 LCD1602引脚及其接口设计图。3.2.1 LCD1602引脚名称及功能1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.3 密码锁设计电磁锁是用继电器来驱动的,当单片机通过RELAY发信号给了继电器,继电器吸合(接常开触点),使解锁机构通电,打开门锁。如图2.7 密码锁驱动电路图。如图2.7 密码锁驱动电路图。3.4 4*4按键设计及仿真图如图2.8 4*4按键设计及仿真图 第四章 系统的软件设计本系统控制软件采用AT89S52及KEIL调试工具。本系统程序代码使用C语言编写。本设计的软件部分采用模块化设计。LCD1602流程图、红外接收流程图、红外发射流程图等模块组成。4.1 LCD1602软件设计显示程序:开始评定LCD忙状态LCD初始化设定显示位置写指令写显示数据到LCDLCD显示结束Y 图2.9 显示程序4.2 红外系统软件设计红外遥控的工作原理,红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波,红外接收电路将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。发射端一般由指令键、指令编码系统、调制电路、驱动电路、发射电路等几部分组成。当按下指令键时,指令编码电路产生所需的指令编码信号,指令编码信号对载体进行调制,再由驱动电路进行功率放大后由发射电路向外发射经调制定指令编码信号,如图3.1红外遥控的发射程序流程图。 接收端一般由接收电路、放大电路、调制电路、指令译码电路、驱动电路、执行电路(机构)等几部分组成。接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制(机构),如图3.2红外遥控的发射程序流程图。串口初始化开始接受数据数据接受完成?数据正确?不处理返回主程序开始串行口初始化返回数据送完?发送数据到串行口发射数据? N N N Y Y N N Y 执行相应程序 Y 图3.1红外遥控的发射程序流程图 图3.2 红外遥控的发射程序流程图。4.3 红外遥控密码锁主程序设计根据控制要求以及各项程序流程,进行总体设计如下图3.3主程序流程图所示。开始有红外中断?调用中断解码程序红外解码接收码正确否?密码对否?打开密码锁 N Y 报警 Y中断返回图3.3红外遥控密码锁主程序设计第五章 系统调试5.1调试仪器 调试使用的设备如下所示:序号名称数量备注1计算机1有2个串口2直流稳压电源2 5V3万用表14串口调试通信线15Keil c51编译软件6仿真软件7示波器15.2整体调试本设计的调试分为硬件调试和软件调试两部分组成。经分后,在制作硬件电路时候,调试也在进行这样有利于问题的分析和解决,不会造成问题的积累,从而节约了大量时间做之后的工作,软件调试是从单元调试开始。 5.5 硬件调试红外钥匙调试:当按下按键时,系统上电,确保单片机能自锁电子开关,维持开关正常供电。在软件未编写的情况下,首先模拟单片机自锁的操作,发现电子开关能自锁,系统正常供电。软件编好在调试也可以正常工作。5.6 软件调试对于本设计来说软件调试还是挺麻烦的,整个程序用的是C语言。用51单片机下载线将程序下载到单片机内,用串口USB线来检测发送和接收的数据来对照修改。首先要保证每个模块独立能够发送接收的数据符合要求,再来用线连接主机来测试单片机之间的串口通信协议是否正确。之后在加上红外发送和接收模块来统一测试。 红外遥控密码锁主程序设计第六章 结论本课题研究的是具有单片机功能的红外遥控密码锁,通过掌握其原理及控制过程,以及运用编程来解决红外发生的问题,最终目的在于独立查资料和思考来解决问题的能力。巩固自己的专业知识,例如:单片机的编程,单片机的结构,ptotel的使用,掌握一个电子专用软件设计的电路。加强动手能力,学会电路调试方法解决实际出现的问题。在这次设计中我知道由于自己知识领域有限,加之经验不足,本设计仍存在一些设计问题和缺陷,个人水平还有待提高,理论知识还有待加强。 致谢四个月的毕业设计即将结束,回想整个做毕业设计的经历,使我认识到自己在专业知识上的欠缺,由于基础知识掌握得不够扎实,在实际运用中不够得心应手,但做毕业设计本就是一个不断发现问题、解决问题,只有不断的发现自己的不足才能够不断进步。此次毕业设计不仅让我对单片机有了更深一步的了解,同时也增强了自己的动手实践能力,为以后的工作打下了基础。本论文是在我的导师戴俨炯老师的精心指导和悉心关怀下完成的,导师的严谨治学态度、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。在这次设计过程中,自己设计的系统出现了很多错误,戴老师细心指导将自己设计的系统逐渐完善,在方案设计上戴老师也是及时纠正自己犯的低级错误,经过和戴老师交流发现了自己还有很多不足的地方,很多地方仅仅以自己课本上理论学的知识去解决,往往忽略了实际情况,而往往这些东西很容易被忽略,遇到问题不善于变通。戴老师不仅指点系统设计中出现的错误,更多的是教会我们解决问题的方法,教会了我们在拿到一个课题的时候应该如何处理。在这次毕业设计的过程中培养了独自研究问题能力。在多年的学习生活中,还得到了许多学院领导、系领导和老师的热情关心和帮助。最后,向所有关心和帮助过我的领导、老师、同学和朋友表示由衷的谢意! 参考文献1 张俊谟编. 单片机原理中级教程M. 北京:北京航空航天大学出版社.2 周立功编. Keil C51使用手册M. 北京:北京航空航天大学出版社.3 苏长赞编. 红外线与超声波遥控M. 北京:人民邮电出版社.4 牛翌光.单片机原理及接口技术M.北京:电子工业出版社5 天狼星系列 单片机视频教程.6 杨路明.C语言程序设计M.北京:北京邮电大学出版社 附录附录一:LCD显示、按键、延时程序设计:#include #include #include intrins.h#define uchar unsigned char#define uint unsigned int#define key P0void delay(unsigned char t);void delay1(); void key_input(void);void newkeyinput(void);unsigned char lcd_r_start();void busy();void wrc(unsigned char wcom);void wrd(unsigned char wdat);void wrn(unsigned char word);void lcdint();sbit k=P20;sbit RS=P30; /LCD控制位sbit RW=P31; /LCD控制位sbit E=P32; /LCD控制位sbit Scl=P34; /串行时钟sbit Sda=P35; /串行数据unsigned char bdata usyflag;unsigned char n,m,f,dat,datn;unsigned char word116=Please input ; /第1行显示缓存unsigned char word216= the keycode: ; /第2行显示缓存code unsigned char word316=the new code: ; /用于固定显示的数据,固化到ROM中code unsigned char word416=Keycode is right; /用于固定显示的数据,固化到ROM中code unsigned char word516=Sorry KEY ERRO; /用于固定显示的数据,固化到ROM中unsigned char key1=1,2,3,4,5,6; /用于老密码unsigned char key2=8,8,8,8,8,8; /用于按键输入存放密码unsigned char key3=0,0,0,0,0,0; /用于按键输入存放密码void delay(unsigned char t) unsigned char j,i; for(i=0;it;i+) for(j=0;j50;j+); void delay1() _nop_(); _nop_(); _nop_(); _nop_(); _nop_();unsigned char scan_key(void ) unsigned char keyvalue; key=0xf0; if(key!=0xf0) delay(10); if(key!=0xf0) keyvalue=key&0xf0; key=0x0f; keyvalue=(keyvalue|(key&0x0f); key=0xf0; switch(keyvalue) case 0x11: n=0; break; case 0x12: n=1; break; case 0x14: n=2; break; case 0x18: n=3; break; case 0x21: n=4; break; case 0x22: n=5; break; case 0x24: n=6; break; case 0x28: n=7; break; case 0x41: n=8; break; case 0x42: n=9; break; case 0x44: n=10; break; case 0x48: n=11; break; case 0x81: n=12; break; case 0x82: n=13; break; case 0x84: n=14; break; case 0x88: n=15; break; default: n=16;break; return n; void key_input(void) unsigned char j,s; scan_key( ); k=P1; if(n5) m=1; /6位密码输入标志 j=0; else m=0; s=0; /*if(n=10)&(k!=0xf0) /输入错误、10号键后退修改 s=1; n=16; k=P1; if(s=1)&(k=0xf0) j=j-1; s=0; */ void newkeyinput(void) unsigned char j,s,x; if(n=12) wrc(0x80); /显示第1行的第1个字符 wrn(word1); wrc(0xc0); /显示第3行的第1个字符 wrn(word3); scan_key( ); k=P1; x=1; if(x=1)&(n5) j=0; m=1; /6位密码输入标志 x=0; else m=0; s=0; void kaisuo(void) uchar r; scan_key( ); key_input( ); if(m=1)&(key20=key10)&(key21=key11)&(key22=key12)&(key23=key13)&(key24=key14)&(key25=key15) r=1; else r=0; if(r=1)&(n=11) k=0; wrc(0x00); wrn(word4); n=16; if(r=0)&(n=11) k=1; wrc(0x00); wrn(word5); n=16; void Start(void) Sda=1; Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Sda=0; _nop_ (); _nop_ (); _nop_ (); _nop_ ();void Stop(void) /*停止条件*/ Sda=0; Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Sda=1; _nop_ (); _nop_ (); _nop_ (); _nop_ ();void Ack(void) /*应答位*/ Sda=0; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Scl=0;void NoAck(void) /*反向应答位*/ Sda=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Scl=0;void Send(uchar Data) /*发送数据子程序,Data为要求发送的数据*/ uchar BitCounter=8; /*位数控制*/ uchar temp; /*中间变量控制*/ do temp=Data; Scl=0; _nop_ (); _nop_ (); _nop_ (); _nop_ (); if(temp&0x80)=0x80)/* 如果最高位是1*/ Sda=1; else Sda=0; Scl=1; temp=Data1; /*RLC*/ Data=temp; BitCounter-; while(BitCounter); Scl=0;uchar Read(void) /*读一个字节的数据,并返回该字节值*/ uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1; do Scl=0; _nop_ (); _nop_ (); _nop_ (); _nop_ (); Scl=1; _nop_ (); _nop_ (); _nop_ (); _nop_ (); if(Sda) /*如果Sda=1;*/ temp=temp|0x01; /*temp的最低位置1*/ else temp=temp&0xfe; /*否则temp的最低位清0*/ if(BitCounter-1) temp1=temp1; temp=temp1; BitCounter-; while(BitCounter); return(temp);void WrToROM(uchar Data,uchar Address,uchar Num)/写入一组数据到AT24C02中 uchar i=0; uchar *PData; PData=Data; Start(); Send(0xa0); /A0、A1、A2接地,固AT24C02的写地址为0XA0 Ack(); Send(Address); Ack(); for(i=0;iNum;i+) Send(*(PData+i); Ack(); Stop();void RdFromROM(uchar Data,uchar Address,uchar Num) uchar i=0; uchar *PData; PData=Data; for(i=0;iNum;i+) Start(); Send(0xa0); /A0、A1、A2接地,固AT24C02的写地址为0XA0 Ack(); Send(Address+i); Ack(); Start(); Send(0xa1); /A0、A1、A2接地,固AT24C02读地址为0XA1 Ack(); *(PData+i)=Read(); Scl=0; NoAck(); Stop(); unsigned char lcd_r_start() unsigned char s; RW=1; /RW=1,RS=0,读LCD状态 delay1(); RS=0; delay1(); E=1; /E端时序 delay1(); s=P0; /从LCD的数据口读状态 delay1(); E=0; delay1(); / RW=0; /delay1(); return(s); /返回读取的LCD状态字void busy() /查询LCD是否忙碌子程序 unsigned char m; do m=lcd_r_start(); m=m&0x80; while(m!=0);void wrc(unsigned char wcom) /写控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能城市行业智慧城市与城市建设研究报告
- 2025年及未来5年中国徐州市服装行业市场深度分析及投资战略咨询报告
- 2025“才聚齐鲁成就未来”山东文旅集团有限公司权属企业招聘71人笔试题库历年考点版附带答案详解
- 2025年户外运动产业行业户外运动装备市场发展展望报告
- 注射用盐酸伊达比星临床应用考核试题
- 2025湖南益阳市玉潭教育集团艺术部教师招聘27人模拟试卷有答案详解
- 2025年4月广东广州市天河区珠江新城猎德幼儿园第二次编外教辅人员招聘1人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025贵州师范学院高层次人才引进考前自测高频考点模拟试题及参考答案详解
- 2025届中国兵器装备春季校园招聘考前自测高频考点模拟试题(含答案详解)
- 2025江苏省检察官学院招聘高层次人才1人考前自测高频考点模拟试题及答案详解(必刷)
- 人教版五年级数学上册第二单元位置达标测试卷(含答案)
- 国企安全环保培训会课件
- 物联网水表采购方案投标文件(技术方案)
- 炎症与心脑血管疾病
- 2025九省联考试题生物及答案
- UV转印技术简介
- 子宫内膜异位症
- GB/T 45743-2025生物样本细胞运输通用要求
- 劳动人事争议仲裁案例分析与问题探讨课件
- 石油化工设备维护检修规程 化工设备
- 人教版四年级数学上册第二单元过关检测试卷【含答案】
评论
0/150
提交评论