基于C语言STC89C52单片机电子密码锁设计与仿真设计_第1页
基于C语言STC89C52单片机电子密码锁设计与仿真设计_第2页
基于C语言STC89C52单片机电子密码锁设计与仿真设计_第3页
基于C语言STC89C52单片机电子密码锁设计与仿真设计_第4页
基于C语言STC89C52单片机电子密码锁设计与仿真设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 . . . 届 别 2010 学 号 3毕业设计基于C语言STC89C52单片机电子密码锁设计与仿真姓 名 系 别、专 业 物电系 导 师 姓 名、职 称 讲师 完 成 时 间 2010-5-1027 / 31目录摘 要IABSTRACTII1 概述11.1电子密码锁的研究现状与前景11.2电子密码锁的基本构件与优点12 系统硬件构成22.1硬件电路主要芯片(MCS-52)22.2 1602液晶显示43 功能分析63.1 中断63.2键盘93.3C总线114 程序分析135 系统电路与Proteus仿真255.1Proteus简介255.2仿真步骤255.3系统仿真电路(如下图)255.4

2、仿真结果266结论26参考文献27致 27摘 要密码锁是现代生活中经常用到的工具之一,常用于各类保险柜、房门、防盗门等。电子密码锁, 克服了传统的机械式密码锁密码量少、安全性能差的缺点。特别是使用微处理器制作的智能电子密码锁, 它除具有电子密码锁的功能外, 还可引入了智能化管理功能, 从而使密码锁具有更高的安全性和可靠性。本文介绍如何使用C语言编写8051单片机程序,制作智能电子密码锁。系统由矩阵键盘、单片机系统、lcd显示器和报警系统组成。该智能电子密码锁主要可由使用者自己设定一个6位数的密码, 将密码锁上锁。只有在按“PUT IN CODES”码后12秒输入和设定的密码一样时, 才能将锁打

3、开,否则报警,报警后只有通过使用钥匙才能打开并停止报警。为了保证密码的更改方便与永久保存, 使用了存储芯片,这样, 在断电条件下, 其部密码数据则可保持100年不丢失。本程序已经在proteus仿真以与开发板用行成功。关键词:电子密码锁;单片机;矩阵键盘;lcd显示器;报警ABSTRACTCode-Lock, one of the tools used in various types of insurance to resist, doors, security doors, is already extensively used in modern life.The electronic

4、lock replacing the traditional mechanical locks overcome the limited password number and the poor security of the mechanical lock. Particularly, the intelligent electronic lock produced by microprocessors, which, in addition with an electronic code lock function, but also introducing a intelligent m

5、anagement feature tolet the code-lock possess a higher security and reliability. This article describes how to use the C language program 8051 to makethe intelligent electronic code-lock. The System consists of matrix keyboard, SCM system, lcd display and alarm system components. The intelligent ele

6、ctronic lock provide the user to set a six-digit password himself and let the password lock locked. Only in accordance with "PUT IN CODES" yards input the right code within 12 seconds you can open the lock, or it will alarm, after which you can open the lock by key only and in the same tim

7、e it stopping alarming. In order to ensure the convenience changing and permanent presevingof the code we use the memory chips, so that when we are under the condition of interruption of power supply, its internal password data can be maintained without loss of 100 years. This program has already be

8、ensuccessful used in proteus-simulation, and development boards. Key words: Electronic Locks; Microcomputer; Matrix Keyboard; Lcd Monitor; Alarm1 概述1.1电子密码锁的研究现状与前景电子密码锁是现代生活中常用的加密工具。它不克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。当今的电子密码锁常使用arm1和单片机控制。单片机相对arm实现

9、较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的密码锁常使用汇编语言编2写程序,显示器多数用数码管3。而本文所介绍的电子密码锁使用移植性与可读性强的高级语言C语言编写,便于修改和增减功能;同时采用显示清楚,功率消耗小而且寿命长的1602液晶显示器,显示更加直观,使用更加方便。从经济实用的角度出发, 采用STC89C524单片机设计一种具有密码设置、报警功能和防止多次试探密码的电子密码锁所需成本很低。1.2电子密码锁的基本构件与优点1.2.1 STC89C52的选择STC89C525 是一种低功耗、高性能CMOS8位微控制器,具有8K可编程Flash存储器。使用高密度非易失性存储器

10、技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具体特点如下:一、加密性强,很难解密或破解,解密费用很高、国能解密的人少.二、超强抗干扰: 三、超低功耗: 四、在系统可编程,无需编程器,可远程升级 。五、STC单片机直接替换ATMEL,PHILIPS,Winbond等产品 。1.2.2液晶显示模块的选择液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器

11、上。具有功耗低,显示信息大,寿命长和抗干扰能力强等优点,在低功耗的单片机系统中得到大量使用。液晶显示模块和键盘输入模块作为便携式仪表的通用器件,在单片机系统的开发过程中也可以作为常用的程序和电路模块进行整体设计。液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就显示黑色,这样即可显示出图形。2 系统硬件构成2.1硬件电路主要芯片(MCS-52)2.1.1 MCS-51的引脚图2.1.2电源与时钟引脚1、电源引脚电源引脚接入单片机的工作电源。(1) Vcc(40脚):接+5V电源;(2) Vss(20脚):接地。2、时钟引脚两个时钟引脚XTAL1、XTLA2外接晶体与片的反

12、向放大器构成了一个晶振器,它为单片机提供了时钟控制信号。2个时钟引脚也可外接晶体振荡器。(1) XTAL1:接外部晶振一个引脚。该引脚是部反向放大器的输入端,这个反向放大器构成了片振荡器。(2) XTAL2:接外部晶振另一端,该引脚是部反向放大器的输出端。采用外部时钟振荡器时,该引脚接收时钟振荡器的信号,即把此信号直接接到部时钟发生器的输入端。2.1.3 控制引脚1、RST/VPDRST该引脚是复位信号输入端,高电平有效。当单片机运行时,若此引脚上的电压持续保持两个机器周期(24个时钟振荡周期)的高电平,单片机就会复位。当单片机正常工作时候应该保持为0.5V低电平。VPD为第9引脚第二功能,为

13、备用电源的输入端。当主电源发生故障的时候,降低到某一规定的低电平时,将+5V电源自动接入RST端,为部RAM提供备用电源,这样可以保证RAM的数据不会丢失,从而当单片机再次开机的时候能继续正常运行。2、ALE/ALE为地址所存允许信号,当单片机正常工作后,ALE引脚不断地输出正脉冲信号。当访问单片机外部存储时,ALE输出信号的负跳沿用作8位地址的锁存信号。即使不访问外部锁存器,ALE仍有正脉冲信号输出,此频率为时钟振荡器频率的1/6.但是,每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。因此,严格来说,用户不宜用ALE作精细的时钟或定时钟或定时信号。ALE端可

14、以驱动8个TTL负载。如果想判断单片机芯片的好坏,可以用示波器查看ALE端是否有正脉冲输出。若有正脉冲输出,那么单片机基本是正常的。为30脚第二功能。在对片EPROM型单片机编程写入时,此引脚作为编程脉冲输入端。3、程序存储器允许输出控制端。在单片机访问外部程序存储器时,此引脚输出的负脉冲作为读外部程序存储器的选通信号。此引脚接外部程序存储器的端。可以驱动8个LS型TTL负载。如果检查一个MCS-51单片机应用系统上电后,CPU能否正常到外部程序存储器读取指令,也可以用示波器查端有无脉冲输出,如果有脉冲输出,那么说明单片机应用系统基本正常工作。4、/VPP、VPP为外程序存储器选择控制端。当端

15、为高电平时,单片机访问部程序存储器,但在PC(程序计数器)值超过4KB,将自动转向执行外部程序存储器的程序。当保持低电平时,则只访问外部程序存储器,不论是否有外部程序存储器。2.1.4 I/O口引脚(1)P0口:双向8位三态I/O口,此口为地址总线(低8位)与数据总线分时复用口,可驱动8个TTL负载。(2) P1口:8位准双向I/O口,可驱动4个TTL负载。(3) P2口:8位准双向I/O口,与地址总线(高8位)复用,可以驱动4个TTL负载(4) P3口:8位准双向I/O口,双功能复用口,可以驱动4个TTL负载。P1口、P2口、P3口线片均有固定的上拉电阻,当这3个准双向I/O口作输入口使用时

16、,要向该口先写“1”,另外准双向I/O口无高阻态。P0口线无固定的上拉电阻,有两个MOS管串接而成,即可以开漏输出,又可以处于高阻态的“浮空”状态,称之为双向三态I/O口。2.2 1602液晶显示液晶6是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器上。它具有体积小、功耗低、显示操作简单等特点。2.2.1 1602接口信号说明如下图 2.2.2 主要技术参数:2.2.3基本操作时序读状态 输入: RS=L,R/W=H,E=H 输出:D0D7=状态字读数据 输入: RS=H,R/W=H,E=H 输出:无写指令 输入: RS=L,R/W=L,E=高脉冲 输

17、出:D0D7=数据写数据 输入: RS=H,R/W=L,E=高脉冲 输出:无2.2.4 RAM地址映射图控制器部带有80B的RAM缓存区,对应关系如下图2.2.5.状态字说明2.2.6.数据指针设置控制器部设有一个数据地址指针,用户可以通过让它们访问部80B的RAM,如下图:2.2.7 其他设置(如下图)2.2.8 初始化设置(1)显示模式设置(2)显示/关与光标设置3 功能分析3.1 中断51单片机部一共有5个中断7源,也就是说,有5种情况发生时,会使单片机去处理中断程序。对于单片机来说,中断时CPU在处理某一件A时,发生了另外一件事B,请求CPU迅速处理(中断发生);CPU暂时停止当前的工

18、作(中断响应),转去处理事情B(中断服务);待CPU处理某一件事B完毕后,再回到原来事情A被中断的地方继续处理事情A(中断返回),这一过程称为中断,其流程图如下图。主程序中断响应执行中断请求中断断点处理程序继续执行程序中断返回单片机中断过程3.1.1 52单片机6个中断源INT0外部中断0,有P3.2端口引入,低电平或下降沿引起。 INT1外部中断1,有P3.3端口引入,低电平或下降沿引起。 T0定时器、计数器0中断,有T0计数满后回零引起。 T1定时器、计数器1中断,有T1计数满后回零引起。T2定时器、计数器2中断,有T2计数满后回零引起。TI/RI串行口中断,串行端口完成一帧字节符号发送、

19、接收后引起。3.1.2 中断允许寄存器IE中断允许寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是AS8HAFH,该寄存器可以进行位寻址,即可以对该寄存器的每一位进行单独操作。单片机复位时全部清零,各位定义见下表:EA-全局中断允许位;EA=1,打开全局中断,在此条件下,由各个中断控制位确定相应中断的打开或关闭。3.1.3中断优先级寄存器IP中断优先级寄存器在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8HBFH,IP用来设定各个中断源属于两级中断的那一级。单片机复位时IP自动清零。各位定义如下表:(-为无效位)

20、3.1.4定时器/计数器工作方式寄存器TMOD 定时器/计数器工作方式寄存器在特殊功能寄存器中,字节地址为89H,不能位寻址,TOMD用来确定定时器的工作方式与其功能选择。单片机复位时TMOD全部被清零。各位定义如下表:TOMD的高四位用于设置定时器1,低四位用于设置定时器0,对应四位的含义如下:GATE-门控制位。GATE=0,定时器/计时器启动与停止仅受TCON寄存器TRX控制。GATE=1,定时器/计时器启动与停止受TCON寄存器TRX和外部中断共同控制。-定时器模式和计数器模式选择位。=1,为计数模式;=0,为定时模式。M1M0-工作方式如下图:定时器/计数器控制寄存器TCOND如下图

21、:3.1.5计算定时器初值:定时器一旦启动,它便在原来的数值上开始叫1计数,若在程序开始时,没有设置TH0和TL0,它们的默认值为0,假设时钟频率为12Mz,12个时钟周期为一个机器周期,那么此时机器周期就是1毫秒,计满TH0和TL0就需要个数,再来一个脉冲计数器溢出,随即向CPU申请中断。因此溢出一次共需要65536毫秒,约等于65.5ms,如果我们要定时50ms的话,那么就需要先给TH0和TL0装一个初值,在这个初值的基础上计50000个数后,定时器溢出,此时刚好就是50ms中断一次,当初值需定时1s时,我们写程序时当产生20次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间了

22、。3.1.6中断服务程序的写法void函数名()interrupt中断号using工作组 中断服务程序容通常定时器初始化过程如下:对TOMD赋值,以确定T0和T1的工作方式。计算初值,并将初值写入TH0、TL0或TH1、HL1。中断方式时,对IE赋值,开放中断。是TR0或TR1位置,启动定时器/计数器定时/或计数。3.2键盘键盘8分为编码键盘和非编码键盘。键盘上闭合的识别有专门的硬件编码器实现,生产编码号或键值的成为编码键盘。靠软件编写程序识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘。3.2.1键盘输入的特点键盘实质是一组按键开关的集合。通常,键盘所用开关为机械弹

23、性开关,均利用了机械触点的合、断作用。一个电压信号通过机械触点的断开、闭合过程,其行线电压输出波形图,如下:图中t1和t3分别为按键的闭合和断开过程的抖动时间(呈现一串负脉冲),抖动的时间长短与按键的机械特性有关,一般为5-10ms,t2为稳定的闭合期,其时间由按键的动作所决定,一般为十分之一秒到几秒,t0、t4为断开期。3.2.2 按键的确定按键的闭合与否,反映在行线输出电压上就是呈现出高电平或低电平,如果为高电平表示断开,低电平表示按键的闭合,所以通过对行线电平的高低状态的检测,便可确定按键是否按下。但是为了确保CPU对一次按键按下只识别一次,必须消除抖动。3.2.3如何消除抖动消除抖动分

24、为硬件消抖和软件消抖,一般的情况下采用软件消抖。在第一次检测到有按键按下时,执行延时程序,延时10ms,再次确定该键是否仍保持闭合状态,如果保持闭合状态确定的确有键按下,从而消除了抖动。3.2.4矩阵键盘工作原理按键设置在行、列线点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V电源上。当无按键按下时,行线处于高电平状态,当有键按下时,行线电平状态将由与此线相连的列线电平决定。列线电平若为低电平,则行线电平为低;列线电平为高,则行线电平也为高。这是识别矩阵键盘是否按下关键。由于矩阵键盘中的行、列线为多键共用,各按键均影响该键所在的行和列的电平。因此各按键彼此将互相发生影响,所以

25、必须将行、列线信号线配合起来并作适当处理,这样才能确定闭合键的具体位置。3.2.5按键的识别如上矩阵按键图。当3好键被按下时,与此相连的行线电平将有与此键相连的列线电平决定,而行线电平在无按键按下时处于高电平状态。如果所有的列线都处于高电平状态,那么按键是否按下,不会引起行线电平状态的变化,行线始终为高电平。所以,让所有的列线处于高电平是没有办法识别按键的。现在反过来,让所有的列线处于低电平,很明显,按键所在行电平将被接成低电平,根据此行电平的变化,便能判断此行一定有键按下。但不能确定按下的键是3,因为,如果是将2、1或0之一按下,也会产生一样的结果。所以,让所有列线处于低电平只能得出某行有键

26、被按下的结论。为了进一步判断到底是哪一列的键被按下,可在某一时刻只让一条列线处于低电平,而其余所有列线都处于高电平状态。当第一列为低电平,其余的各列都为高电平时,因为是3键被按下,所以第1行仍处于高电平状态;当第2列为低电平,其余的各列为高电平时,同样发现第1行仍处于高电平状态。直到让第4列为低电平时因为是3号键被按下,所以第1行的电平将由高电平转换到第4列所处的低电平,因此,确定第1行第4列交叉点处的键即3号键被按下。3.3C总线3.3.1C总线介绍传统的单片机外围电路扩展通常使用并行方式,即单片机与外围电路器件用8根数据线进行数据交换,再加上一些地址、控制线,占用了单片机大量的引脚,这往往

27、不能接受。C总线9是一种用于IC之间连接的总线。它通过SDA和SCL两根线与连接到总线上的器件之间传送信息。总线上每个节点都有一个固定的节点地址,根据地址识别每个器件,可以方便地构成多机系统和外围电路的扩展。它的传输速率为100kb/ s总线的驱动能力为400pF.3.3.2C总线工作原理C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。起始和终止信号 :SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。数据传送格式:

28、每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间没有收到从机的应答信号,则自动认为从机已正确接收到数据。3.3.3 EEPROM AT24C021AT24C02引脚功能AT24C02引脚各引脚功能:1,2,3(A0、A1、A2)可编程地址输入端。4(GND)电源地。5(SDA)串行数据输入/输出端。6(SCL)串行时钟输入端。7(WP)写保护输入端,用于硬件数据保护。该引脚为低电平时,可以对整个存储器进行正常的读和写操作;当为高电平时,存储器只有读操作功能,不能对改存储器进行写操作。8(Vcc)电源正端

29、。2、存储结构与寻址AT24C02的存储器容量为2KB,部分为32页,每页8B,操作时有两种寻址方式:芯片寻址和片子地址寻址。(1) 芯片寻址。AT24C02的芯片地址为1010,其他的控制字格式为1010A2A1A0R/。其中A2,A1,A0为可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码。R/为芯片读写控制位,该位为0,表示对芯片进行写操作;该位为1表示对芯片进行读操作。(2) 片子地址寻址。芯片寻址可对部256B中的任意一个进行读写操作。4 程序分析#include <reg52.h>#define uchar unsigned

30、 char /宏定义#define uint unsigned intuchar code table="WELCOME "uchar data table1="PUT IN CODES " uchar data table3="STE CODES "void write_(uchar); uchar a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5;sbit p1_4=P14;/位声明sbit p1_3=P13;sbit RS=P24; sbit RW=P25; sbit sda=P12;sbit scl=P1

31、1;sbit wp=P10;sbit E=P26;char count1=0;uint numb,i; /定义uchar number, a,j,m,k,time=0;/*函数声明*/void delay(uint); void write_dat(uchar);uchar keyscan(void);int consure();int besure();/*eeprom函数声明*/void delay1();void start();void stop();void respons() ;void init();void write_byte(uchar date);uchar read_b

32、yte();uchar read_add(uchar address);void write_add(uchar address,uchar date);void delay2(uchar x);/*主函数*/ void main() uint key,ket,kot; int i;init();loop:/返回位置/*eeprom读取*/b0=read_add(1);delay2(100);b1=read_add(11);delay2(100);b2=read_add(21);delay2(100);b3=read_add(31);delay2(100);b4=read_add(41);de

33、lay2(100);b5=read_add(51);delay2(100); i=0;P1=0xff;EA=0; /关闭总中断ET0=0;/关闭定时器中断0TR0=0;/关闭定时器0if(time=3) p1_3=0;/*写命令*/ write_(0x38);/设置16*2显示,5*7点阵,8位数据接口 write_(0x09); /开显示并光标闪烁 write_(0x0c);/开显示光标不显示并光标不闪烁 write_(0x01);/清零 write_(0x80+0x05);for(number=0;number<7;number+)write_dat(tablenumber);del

34、ay(10); while(1) key=keyscan();/调用键盘扫描/*密码控制*/ if(key=0xe7) write_(0x80+0x42); for(number=0;number<16;number+) write_dat(table1number);delay(5); delay(3000);key=keyscan();if(key!=0xe7) write_(0x38);/设置16*2显示,5*7点阵 write_(0x09); /开显示并光标闪烁 write_(0x0c);/开显示光标不显示并光标不闪烁 /write_(0x80); write_(0x01);/显

35、示清屏*/ /*初始化中断系统*/ TMOD=0x00;/设置定时器0为工作方式0(00000000)TH0=(8192-4607)/32;TL0=(8192-4607)%32;/赋初值EA=1; /开总中断ET0=1;/开定时器中断0 TR0=1;/启动定时器0 while(1) a0=consure();if(a0=b0)while(1) a1=consure();if(a1=0x10) time=time+1;a1=0xff;goto loop;if(a1=b1)while(1)a2=consure();if(a2=0x10) time=time+1;a2=0xff;goto loop;

36、if(a2=b2) while(1) a3=consure(); if(a3=0x10) time=time+1;a3=0xff;goto loop; if(a3=b3)while(1)a4=consure();if(a4=0x10) time=time+1; a4=0xff;goto loop;if(a4=b4);while(1) a5=consure(); if(a5=0x10) time=time+1;a5=0xff;goto loop; if(a5=b5) kot=keyscan(); if(kot=0xd7) p1_4=0;delay(200); key=keyscan(); if(

37、key=0xed) P1=0xff; write_(0x01);write_(0x80+0x43); for(number=0;number<16;number+) write_dat(table3number);delay(5); delay(3000);write_(0x01);write_(0x80+0x43);while(1)ket=keyscan();if(i>=6)goto loop; m=i*10+1;j=besure();write_add(m,j);if(ket=0xee) i+;delay(500); write_dat('*'); delay(

38、10);if(a0=0x10) time=time+1;a0=0xff;goto loop; /*LCD子函数*/void write_(uchar ) E=0; RS=0; RW=0; P0=; delay(5); E=1; delay(5); E=0;void write_dat(uchar dat) E=0; RW=0;RS=1; P0=dat; delay(5); E=1; delay(5);E=0; /*矩阵键盘*/uchar keyscan(void)/键盘扫描函数,使用行列反转扫描法 uchar cord_h,cord_l;/行列值 P3=0x0f; /行线输出全为0 cord_

39、h=P3&0x0f; /读入列线值 if(cord_h!=0x0f) /先检测有无按键按下 delay(5); /去抖 if(cord_h!=0x0f) cord_h=P3&0x0f; /读入列线值 P3=cord_h|0xf0; /输出当前列线值 cord_l=P3&0xf0; /读入行线值 return(cord_h+cord_l);/键盘最后组合码值 return(0xff); /返回该值/*延时函数*/void delay(uint z) uint a,b; for(a=z;a>0;a-) for(b=110;b>0;b-);/*键盘确定函数*/in

40、t consure() int key; key=keyscan(); if(key=0x7e|0x7d|0x7b|0x77|0xbe|0xbd|0xbb|0xb7|0xde|0xdd) key=keyscan(); switch(key) case 0x7e:write_dat('*');numb=0x00;delay(1000);break;/0 case 0x7d:write_dat('*');numb=0x01;delay(1000);break;/1 case 0x7b:write_dat('*');numb=0x02;delay(10

41、00);break;/2 case 0x77:write_dat('*');numb=0x03;delay(1000);break;/3 case 0xbe:write_dat('*');numb=0x04;delay(1000);break;/4 case 0xbd:write_dat('*');numb=0x05;delay(1000);break;/5 case 0xbb:write_dat('*');numb=0x06;delay(1000);break;/6 case 0xb7:write_dat('*'

42、);numb=0x07;delay(1000);break;/7 case 0xde:write_dat('*');numb=0x08;delay(1000);break;/8 case 0xdd:write_dat('*');numb=0x09;delay(1000);break;/9 case 0xeb:write_dat('b');numb=0x10;break;/e return numb; int besure() int key; key=keyscan(); if(key=0x7e|0x7d|0x7b|0x77|0xbe|0xbd|

43、0xbb|0xb7|0xde|0xdd) key=keyscan(); switch(key) case 0x7e:write_dat('0');numb=0x00;delay(1000);break;/0 case 0x7d:write_dat('1');numb=0x01;delay(1000);break;/1 case 0x7b:write_dat('2');numb=0x02;delay(1000);break;/2 case 0x77:write_dat('3');numb=0x03;delay(1000);break

44、;/3 case 0xbe:write_dat('4');numb=0x04;delay(1000);break;/4 case 0xbd:write_dat('5');numb=0x05;delay(1000);break;/5 case 0xbb:write_dat('6');numb=0x06;delay(1000);break;/6 case 0xb7:write_dat('7');numb=0x07;delay(1000);break;/7 case 0xde:write_dat('8');numb=0x

45、08;delay(1000);break;/8 case 0xdd:write_dat('9');numb=0x09;delay(1000);break;/9 return numb;/*中断系统*/void Timer0() interrupt 1static count1=0; count1+;if(count1>=4000&&p1_4!=0) /定时20秒 p1_3=0;count1=0; TR0=0; TH0=(8192-4607)/32; /重新装初值 TL0=(8192-4607)%32;/*eeprom*/void delay1() ; vo

46、id start() /开始信号sda=1;delay1();scl=1;delay1();sda=0;delay1();void stop() /停止sda=0; delay1();scl=1; delay1();sda=1; delay1();void respons() /应答uchar i;scl=1; delay1();while(sda=1)&&(i<250)i+;scl=0; delay1();/*初始化eeprom*/void init()sda=1;delay1();scl=1; delay1();void write_byte(uchar date)u

47、char i,temp;temp=date;for(i=0;i<8;i+)temp=temp<<1; scl=0; delay1(); sda=CY; delay1();scl=1; delay1();scl=0; delay1();sda=1; delay1();uchar read_byte()uchar i,k;scl=0; delay1();sda=1; delay1();for(i=0;i<8;i+)scl=1; delay1();k=(k<<1)|sda;scl=0; delay1(); return k;void delay2(uchar x)uchar a,b;for(a=x;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论