




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录 TOC o 1-3 h z u HYPERLINK l _Toc345530125 目录 PAGEREF _Toc345530125 h 3 HYPERLINK l _Toc345530127 1设计目的 PAGEREF _Toc345530127 h 1 HYPERLINK l _Toc345530128 2设计的主要内容和要求 PAGEREF _Toc345530128 h 1 HYPERLINK l _Toc345530129 3总体设计方案 PAGEREF _Toc345530129 h 1 HYPERLINK l _Toc345530130 4硬件电路设计 PAGEREF _T
2、oc345530130 h 2 HYPERLINK l _Toc345530131 4.1系统整体电路设计 PAGEREF _Toc345530131 h 2 HYPERLINK l _Toc345530132 4.2 5V直流稳压电源模块 PAGEREF _Toc345530132 h 3 HYPERLINK l _Toc345530133 4.3控制电路设计 PAGEREF _Toc345530133 h 4 HYPERLINK l _Toc345530134 4.4语音模块电路设计 PAGEREF _Toc345530134 h 4 HYPERLINK l _Toc345530135 4
3、.5信号输入电路设计 PAGEREF _Toc345530135 h 5 HYPERLINK l _Toc345530136 4.6密码存储电路设计 PAGEREF _Toc345530136 h 6 HYPERLINK l _Toc345530137 4.7 LCD显示电路设计 PAGEREF _Toc345530137 h 7 HYPERLINK l _Toc345530138 4.8继电器模拟锁定模块和蜂鸣器报警模块 PAGEREF _Toc345530138 h 7 HYPERLINK l _Toc345530139 5软件编程 PAGEREF _Toc345530139 h 8 HY
4、PERLINK l _Toc345530140 6系统仿真 PAGEREF _Toc345530140 h 14 HYPERLINK l _Toc345530141 6.1系统仿真环境及参数设置 PAGEREF _Toc345530141 h 14 HYPERLINK l _Toc345530142 6.2系统仿真结果与分析 PAGEREF _Toc345530142 h 14 HYPERLINK l _Toc345530143 7使用说明 PAGEREF _Toc345530143 h 19 HYPERLINK l _Toc345530144 8设计总结 PAGEREF _Toc345530
5、144 h 19 HYPERLINK l _Toc345530145 参考 PAGEREF _Toc345530145 h 20 HYPERLINK l _Toc345530146 附件 PAGEREF _Toc345530146 h 21语音智能密码锁的设计1 设计目的本文设计的智能密码锁系统以89C52为中央控制器,4*4键盘采集输入信号,24C04芯片保存设置密码。同时配备SX6288组成的语音模块。通过语音模块直观地显示密码锁的状态。用户可以自定义一个六位数的数字密码,并有3次输入密码的机会。当密码输入错误时,密码锁会发出警报。当密码输入错误 3 次时,密码锁会锁定键盘一段时间。2 设
6、计的主要内容及要求LCD可随时间显示密码锁的状态信息。语音模块可以广播密码锁定状态。可设置初始密码,支持密码修改。可以快速准确地收集键盘上的输入信息。使用24C04芯片设置密码并保存。当密码输入错误时,系统会自动报警,如果连续输入错误密码超过3次,键盘将被锁定一段时间。设计一个5V稳定的电源为系统供电。8) 系统定制性强,工作稳定安全。3 整体设计方案本文设计的语音智能密码锁系统框图如图3.1所示。系统主要分为电源模块、控制模块、语音模块、密码存储模块、液晶显示模块、模拟锁和蜂鸣器报警模块。图3. 1 智能密码锁系统框图系统分为写初始密码和密码锁定工作两部分。1)写密码部分:一开始液晶显示初始
7、化状态,进入键盘扫描,按C键后可自定义六位密码,按D键时液晶显示设置密码。2) 密码锁工作部分:开始时液晶显示初始状态,锁处于关闭状态,红色LED亮,键盘等待扫描。按下A键后,蜂鸣器响3声,液晶显示屏提示输入密码进入解锁过程。此时,输入密码的机会为 3 次。如果密码输入正确,蜂鸣器会响四声,液晶显示锁已被打开,红色指示灯熄灭,绿色指示灯亮,表示锁成功开锁。此时,锁处于解锁状态。之后按E键,系统进入初始状态;如果此时按B键,系统将进入重置密码的过程。进入初始状态。如果密码输入错误,蜂鸣器会发出警报。如果连续3次输入错误密码,系统将锁定键盘一段时间。按下 E 键后,系统将进入读取密码的初始状态。4
8、 硬件电路设计4.1 系统整体电路设计本系统原理图如图4.1所示:图 4.1 系统电路原理图在设计本系统的硬件时,主要有以下电路模块:+5V直流稳压电源模块;系统硬件采用AT89C52单片机作为控制部分;SX6288中文语音合成播放模块;使用4*4矩阵键盘作为信号输入模块;24C04芯片作为存储密码模块;LCD显示电路模块;继电器模拟锁定模块和蜂鸣器报警模块。4.2 直流稳压电源模块系统的 5V 直流电源由图 4.2 中的电路供电。其工作过程如下:220V市电经变压器降压至9V,经电容滤波至平滑的10.8V电压,最后经7805三端稳压电路降压,再滤波最后得到5V直流电源。这样就保证了芯片工作在
9、正常的电压范围内,保证了整个电路的正常工作。图 4.2 直流稳压电源电路示意图4.3 控制电路设计本设计系统采用AT89C52单片机作为总控制电路,如图4.3所示。该微控制器有 40 个引脚、6 个中断源和 20 个 I/O 接口。本设计中P0和P2、P3端口作为信号输出端口,P1端口作为信号采集输入端口,由C语言编程控制。本设计利用其集成度高、体积小、开发性能好、控制能力强等特点。 , 可靠性强的特点使智能密码锁工作稳定、安全。图4.3单片机电路图4.4 语音模块电路设计该语音模块包括:控制模块、SX6288A语音合成芯片、数据库芯片spiflash、功放模块和扬声器。主控制器和SX6288
10、A通过UART接口连接。控制器通过通信接口 SX6288A 致控制命令和文本。 SX6288A 将接收到的文本转换为语音信号并输出。输出信号经功放放大后连接到扬声器播放。 . SX6288A具有音质好、自然度高、使用方法简单、合成速度快、价格低廉等特点,支持GB2312、GBK、BIG5和UNICODE码格式的文本,支持多种通信波特率。实物图如图4.4所示:图4.4语音模块物理图从左到右,引脚名称和说明如下:SP+:0.5W 8欧喇叭正级。 SP-:0.5W 8欧喇叭正级。BUSY:语音处理忙信号,busy为高电平,不忙为低电平。TX:模块的串口数据致端,接单片机的P3.0 RXD管脚。RX:
11、模块的串口数据接收端,接单片机的P3.1 TXD管脚。GND:电源地GND。 VCC;电源直流 3.3-5V。4.5 信号输入电路设计本设计采用 4*4 矩阵键盘作为信号电路,其电路图如图4.5 所示:图 4 5 4*4 键盘信号输入电路设计单片机扫描4*4键盘,收集输入指令,使单片机完成相应的数据处理。 4*4矩阵键盘的工作原理如下: 4*4矩阵键盘采用逐行扫描方式,从第一行到最后一行依次发出低电平信号。如果连线的键没有被按下,那么连接到列线的端口得到全“1”信号,如果有键被按下,则得到非全“1”信号。然后,通过从列线读取的信号来识别关闭的列的键。为了防止双键被同时按下,以同样的方式向下扫描
12、直到最后一行。如果只找到一个“1”,则为有效密钥,否则全部无效。在本设计中,P10-P3 被用作行扫描信号,P14-P7 被读取为列线。每个按键都设置了相应的功能,单片机在按键有效时采集信号,然后对采集到的信号进行处理。4.6 密码存储电路设计本设计采用AT24C04芯片作为密码存储模块电路,其引脚图如图4.6.1所示。 AT24C04是典型的I 2 C总线结构,具有512bit容量的EEPROM存储器,是一种采用I 2 C总线接口的串行总线存储器,这种存储器具有体积小、引脚少、功耗低、工作电压范围宽等特点。具有支持I 2 C总线协议,占用单片机I/O口少,芯片扩展方便,读写简单等优点。密码存
13、储电路如图4.6.2 所示:图 4. 6.1 AT24C04 引脚图图 4. 6.2密码存储电路工作原理: AT24C04在传输数据的过程中有三种信号:启动信号、停止信号和响应信号。启动信号:SDA 有下降沿,而 SCL 保持高电平。出现启动信号后,总线被视为“忙碌”。停止信号: SDA 有一个上升沿,而 SCL 保持高电平。在停止信号之后,公交车被认为是“空闲”。响应信号:接收到数据的设备收到8位数据后,向致数据的设备致一个特定的低电平脉冲,表示数据已经收到。主设备产生启动信号后,致的第一个字节是控制字节。前七位是从设备的地址片选信号。最低位为数据传输方向位(高电平表示读从设备,低电平表示写
14、从设备),然后致一个字节选择从设备芯片地址确定起始地址开始读写数据。然后致数据字节,可以是单字节数据,也可以是一组数据,由主设备决定。从设备收到一个字节后,会返回一个确认信号(ASK=0)。主设备在响应时钟周期为高电平时释放 SDA 线,由从设备控制。从设备必须在此时钟周期的高电平期间将 SDA 线拉低并使其稳定为低电平,作为有效的响应信号。本设计中单片机的P3.4和P3.5引脚分别控制AT24C04芯片的SCL和SDA引脚,实现密码数据的读写,从而完成密码的设置和保存。密码。4.7 LCD显示电路设计本设计采用1602液晶作为显示电路,可调节背光对比度,包括复位电路提供各种控制命令,如:清屏
15、、字符闪烁、光标闪烁、显示移位等功能,内置80字节显示数据存储器DDRAM,内置160个5X7点阵字库字符发生器CGROM8、5X7字符发生器CGRAM,可由用户定制。其电路图如图4.7所示。在本系统中,单片机的P0口作为液晶数据接收口,P2.0-P2.2控制液晶的读写和使能端,完成液晶的显示控制。液晶。图 4. 7 LCD 显示电路4.8 继电器模拟锁定模块和蜂鸣器报警模块在本设计系统中,通过继电器的开闭来模拟锁的开锁和上锁状态。继电器的一个端口与单片机的P3.6相连。当P3.6为高电平时,继电器绕组电流经三极管Q2放大,绕组绕制。产生磁效应,衔铁被拉入,这被认为是解锁。其电路图如图4.8.
16、1所示。在报警模块中,通过一个三极管放大电流来完成蜂鸣器的驱动。 P3.7端口为高电平时蜂鸣器响,低电平时不响。这种设计通过控制电平和频率来实现不同的声音。其电路图如 4.8.2 所示。图 4. 8.1模拟锁定电路图图 4.8.2报警电路5 软件编程5.1 系统编程系统程序分为初写密码程序和密码锁工作程序两部分。如图所示,图5.1为初始密码写入流程图,图5.2为密码工作流程图。 密码输入初始化画面显示 键盘扫描按键C是 否按下Y键盘扫描显示设置密码开始结束按键D是否按下YNN图 5.1 初始密码程序设置流程图图 5.2 密码锁工作主程序流程图1)写入初始密码部分:LCD显示初始化状态,系统进入
17、键盘扫描,只有按下C键时,系统进入密码设置阶段,其他按键对系统无影响,进入设置后阶段,您可以自定义设置。找到一个六位数的密码。继续扫描键盘。按下 D 键时,LCD 将显示设置的密码。按 C 键重置密码。按其他键不会影响系统。其设计流程图如图 5.1 所示。2)密码锁的工作部分产生:LCD显示初始状态,系统进入键盘扫描。只有按下A键,蜂鸣器才会响3声,液晶显示屏会提示输入密码进入解锁过程。这时候有3次输入密码的机会。如果密码输入正确,蜂鸣器会响四声,液晶显示锁已打开,红色 LED 熄灭,绿色 LED 亮。如果按E键,系统将进入初始状态;如果此时按B键,系统将进入重设密码过程,可自定义重设六位数字
18、密码。设置完成后按E键,系统进入初始状态。如果密码输入错误,蜂鸣器会发出警报。如果连续3次输入错误密码,系统将锁定键盘一段时间。按下 E 键后,系统将进入读取密码的初始状态。其流程图如图 5.2 所示。5.2 主程序设计1) 初始密码设置程序包括蜂鸣器驱动子功能、延时子功能、4*4键盘扫描功能、开机液晶子功能、写码功能、读码功能、1602驱动头文件功能、AT24C04驱动头文件功能(见附件) .其主要功能如下:无效的主要()uchar我;哔=0;开始:延迟毫秒(10);液晶初始化();I2C_init();lcd_wcmd(0 x00|0 x80);我 = 0;而(line1_datai !=
19、 0)lcd_wdat(line1_datai);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(line2_datai != 0)lcd_wdat(line2_datai);我+;而(1)P1=0 xf0;如果(P1!=0 xf0)矩阵键();if(key=0 x0c)WriteCode();if(key=0 x0d)ReadCode();如果(键= 0 x0e)转到开始;2)密码锁工作功能程序包括蜂鸣器驱动子功能、延时子功能、4*4键盘扫描功能、开机液晶子功能、写密码子功能、读密码子功能、密码输入错误显示子功能、密码输入正确显示子功能子功能、重置密码子功能、报警声子功能、
20、定时中断子功能、1602驱动子头文件功能、AT24C04驱动头文件功能(见附件)。其主要功能如下:无效的主要()TMOD=0 x21;/定时器0模式1定时器1工作在模式2TH0=0 xee; /5ms定时初始值TL0=0 x00;EA=1; /开启总中断ET0=1;/开启定时器0SCON = 0 x50; /串口工作模式为1,内容串口接收TR1 = 1; /内容定时器1工作TH1 = 0 xfd; /波特率 9600bps fosc=11.0592MHzTL1 = 0 xfd;ES = 1; /开启串口中断延迟_毫秒(10);液晶初始化(); /液晶初始化I2C_init(); /I2C初始化
21、START: RELAY=1;/继电器关闭lcd_clr(); /调用清屏函数StartDisp();/开机画面显示read_nbyte (0 xa0,0 x00,code_buf,6); /从24Cxx的0 x00开始的单元中读取6个密码并存入code_buf数组P1=0 xf0;while(P1=0 xf0);/等待按钮被按下SCAN: MatrixKey();/键盘扫描如果(键!= 0 x0a)转到扫描; /如果A键没有按下,跳转到标签SCAN继续扫描/Uart_SendString(shuru); /语音播报密码错误TR0=1; /启动定时器延迟_毫秒(500);嘟();if(flag
22、_2s=1)flag_2s=0;/如果2s到达,清2s标志为0否则转到扫描; /如果2s到达,将2s标志清0传入(); /调用密码输入函数而(1)如果(flag_comp=1)MatrixKey();/键盘扫描if(key=0 x0b)/如果有B按进入密码重置通行证(); /调用密码设置函数矩阵键();如果(键=0 x0e)转到开始; /如果E键被按下,跳转到START标记处重新开始if(key=0 x0e)goto START;/如果E键被按下,跳转到START标记处重新开始if(flag_comp=0)矩阵键();如果(键=0 x0e)转到开始; /如果E键被按下,跳转到START标记处重
23、新开始/*定时中断*/无效 timer0() 中断 1TH0=0 xee;TL0=0 x00;count_5ms+;如果(count_5ms=200)count_5ms=0;秒+;如果(秒=2)flag_2s=1;TR0=0;6 系统仿真6.1 系统仿真环境及参数设置本设计在ISIS 7.0SP2或更高版本Protues的软件环境中打开电路仿真图,然后将设计的程序在Keil C51 Vision3开发集成环境上编译成机器语言生成.hex文件。打开Proteus软件,进入ProteusISIS,先将初始密码设置程序的hex文件导入80C52,点击按钮,按C键选择密码设置,D键为读取密码功能。然后
24、将密码锁工作程序生成的十六进制导入单片机,E键为功能复位键,按A键,系统进入密码输入状态,输入密码后按B键,系统进入密码重置状态。6.2 系统仿真结果与分析6.2.1 系统仿真系统整体仿真电路图如图6.1所示:图6.1 密码锁整体proteus仿真图6.2.2 设置初始密码模拟导入初始密码hex文件后,系统进入初始化状态,仿真结果如图6.2所示。图 6.2 设置密码初始状态仿真图按下扫描键C,系统进入密码设置输入状态,液晶屏提示输入密码。仿真结果如图 6.3 所示。图 6.3 设置初始密码输入模拟图设置密码后,按D键,系统进入读取密码状态,设置的密码显示在LCD上,仿真图如图6.4所示。图 6
25、.4 设置初始密码读取密码模拟图6.2.3 密码锁的工作模拟导入密码锁工作hex文件后,系统进入初始状态,仿真图如图6.1所示。按A键,系统进入密码输入状态,液晶屏提示输入密码。仿真图如图 6.5 所示。图 6.5 密码锁工作输入密码模拟图输入正确密码后,LCD提示密码输入成功,锁打开,绿色LED亮,如图6.6所示。按 E 键,系统处于初始状态,仿真图同图 6.1 所示。图 6.6 正确密码输入的模拟如果连续3次密码输入错误,液晶屏会提示输入密码,如图6.7所示。图 6.7 连续三个密码输入错误的仿真图图 6.8 重置密码输入模拟图图 6.9 密码重置成功模拟图输入正确密码后,按B键,系统进入
26、重置密码状态,液晶屏提示输入密码。仿真图如图6.8所示,密码重置成功如图6.9所示。7 使用说明使用本设计需遵循以下步骤:首先加载设置初始密码的hex文件,按C键进入密码设置输入状态,设置密码后,按D键读取自己设置的密码;然后加载密码锁工作hex文件,进入密码锁工作状态,按A键,输入设置密码,密码正确后,按B键自定义重置密码,按E键进入初始状态。8 设计总结本设计以89C52为中央控制器,采用4*4键盘采集输入信号,采用典型的I 2 C总线结构AT24C04芯片存储密码,通过LCD显示屏和LED直观显示每个密码锁的各种状态灯。继电器模拟锁的状态,用户可设置6位数字密码。该系统还具有报警功能。系
27、统基本可以实现本文提出的功能和要求。这种设计也有不足之处。缺陷之一是单层密码锁不能满足更高的安全要求。第二个缺陷是系统比较依赖电,24C04必须一直保持在供电状态,断电后不能正常工作。缺点3:按键按下时按键声音不够响亮,模拟时响应比较慢。如果可以通过语音模块播放按键按下时的密码状态,密码锁会更加人性化。通过这次智能密码锁的设计,我更多的感觉是自己的能力有限,知识不够丰富,知识点不够扎实,无法按照自己原来的样子完成自己的设计想法,这样设置的密码锁是不够的。所有的。在这个设计中,让我了解了实时控制的原理,以及如何合理使用芯片来发挥其功能。认识到系统的设计必须按照一定的步骤有条不紊地进行,每个步骤的
28、实施都必须有条不紊地进行。总而言之,本次课程设计在电路设计方面受益匪浅。参考1 林莉.军良。徐东。德君。单片机原理与应用:基于Proteus和Keil CM.:电子工业,2009:2-5。2 冯.王巧智。英健。瑞果。 51 MCU应用系统典型模块开发M.:中国铁路,2011:5-20.3 君莫 MCU中级课程M航空航天大学出版,2000:36-45。4 单片机高级语言C51 Windows环境编程与应用M,电子工业,2001:86-95。5 AT89C51 数据绵羊M。飞利浦半导体,1999:15-36。6 康华光.电子技术基础(第五版)M.:高等教育,2006:45-48。7 华林等。数字电
29、子技术M.:大学,2004:45-60。8 金伟祥等。编。电子测试技术M.:大学,2004:26-30。附录AT24C04 头文件“I2C_drive.h”#include #define uchar 无符号字符#define uint 无符号整数位 SDA = P34;位 SCL = P33;位确认;无效延迟NOP();无效 I2C_start();无效 I2C_stop();无效 I2C_init();无效 I2C_Ack();无效 I2C_NAck();无效的 RecByte();飞致字节(飞写数据);fly read_nbyte (fly SLA, fly SUBA, fly *pda
30、t, fly n);fly write_nbyte(fly SLA, fly SUBA, fly *pdat, fly n);无效延迟NOP()_nop_();_nop_();_nop_();_nop_();无效 I2C_start()SDA = 1;SCL = 1;延迟NOP();SDA = 0;延迟NOP();SCL = 0;无效 I2C_stop()SDA = 0;SCL = 1;延迟NOP();SDA = 1;延迟NOP();SCL = 0;无效 I2C_init()SCL = 0;I2C_stop();无效 I2C_Ack()SDA = 0;SCL = 1;延迟NOP();SCL =
31、 0;SDA = 1;无效 I2C_NAck()SDA = 1;SCL = 1;延迟NOP();SCL = 0;SDA = 0;uchar RecByte()uchar i,read_data;读取数据=0 x00;SDA=1;for(i = 0; i 8; i+)SCL = 1;读取数据 = 1;读取数据|= SDA;延迟NOP();SCL = 0;延迟NOP();SCL = 0;延迟NOP();返回(读取数据);飞SendByte(飞write_data)飞行我;for(i = 0; i 8; i+)SDA = (bit)(write_data & 0 x80);_nop_();_nop_
32、();SCL = 1;延迟NOP();SCL = 0;写入数据 = 1;延迟NOP();SDA = 1;SCL = 1;延迟NOP();如果(SDA=1)确认=0;否则 ack=1;SCL = 0;延迟NOP();返回确认;fly write_nbyte(飞 SLA,飞 SUBA,飞 *pdat,飞 n)uchar s;I2C_start();致字节(SLA);如果(确认=0)返回(0);致字节(SUBA);如果(确认=0)返回(0);对于(s=0;sn;s+)致字节(*pdat);如果(确认=0)返回(0);PDA+;I2C_stop();返回(1);uchar read_nbyte (uc
33、har SLA,uchar SUBA,uchar *pdat,uchar n)uchar s;I2C_start();致字节(SLA);如果(确认=0)返回(0);致字节(SUBA);如果(确认=0)返回(0);I2C_start();致字节(SLA+1);如果(确认=0)返回(0);对于(s=0;sn;s+)*pdat=RecByte();I2C_Ack();PDA+;I2C_Nack();I2C_stop();返回(1);1602头文件 LCD_drive.h#include #include #define uchar 无符号字符#define uint 无符号整数位 LCD_RS=P2
34、0;位 LCD_RW=P21 ;位 LCD_EN=P22;void Delay_ms(uint xms) ;位 lcd_busy();无效 lcd_wcmd(uchar cmd);无效 lcd_wdat(uchar dat) ;无效 lcd_clr() ;无效 lcd_init() ;无效延迟_ms(uint xms)uint i,j;for(i=xms;i0;i-)for(j=110;j0;j-);位 lcd_busy()位结果;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();结果 = (位)(P0&0 x80
35、);LCD_EN = 0;返回结果;无效 lcd_wcmd(uchar cmd)而(lcd_busy();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;无效 lcd_wdat(uchar dat)而(lcd_busy();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = 那;_nop_();_nop_();_nop_();_nop
36、_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;无效 lcd_clr()lcd_wcmd(0 x01);延迟_毫秒(5);无效 lcd_init()延迟_毫秒(15);lcd_wcmd(0 x38);延迟_毫秒(5);lcd_wcmd(0 x38);延迟_毫秒(5);lcd_wcmd(0 x38);延迟_毫秒(5);lcd_wcmd(0 x0c);延迟_毫秒(5);lcd_wcmd(0 x06);延迟_毫秒(5);lcd_wcmd(0 x01);延迟_毫秒(5);设定初始密码#include #include I2C_driv
37、e.h#include LCD_drive.h#define uchar 无符号字符#define uint 无符号整数uchar code_buf6=1,2,3,4,5,6;uchar 键;uchar 温度;位 BEEP=P37;无效的哔声()哔=0;延迟_毫秒(100);哔声=1;延迟_毫秒(100);无效矩阵键()P1=0 xff;P1=0 xef;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 xee:key=0;break;案例 0 xed:key=1
38、;break;案例 0 xeb:key=2;break;案例 0 xe7:key=3;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0 xdf;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 xde:key=4;break;案例 0 xdd:key=5;break;案例 0 xdb:key=6;break;案例 0 xd7:key=7;break;温度=P1;嘟();
39、温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0 xbf;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 xbe:key=8;break;案例 0 xbd:key=9;break;案例 0 xbb:key=10;break;案例 0 xb7:key=11;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0
40、x7f;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 x7e:key=12;break;案例 0 x7d:key=13;break;案例 0 x7b:key=14;break;案例 0 x77:key=15;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;uchar 代码 line1_data = WRITE & READ ;uchar 代码 line2_data = PASSWORD ;u
41、char 代码 W_line1_data = 写代码;uchar 代码 W_line2_data = NUM:;uchar 代码 R_line1_data = 读取代码;uchar 代码 R_line2_data = NUM:;无效代码输入()静态uchar lcd_x=0;静态uchar计数=0;做P1=0 xf0;如果(P1!=0 xf0)矩阵键();如果(键=0)&(键=9)code_bufcount=key;lcd_wcmd(0 x44+lcd_x)|0 x80);lcd_wdat(code_bufcount +0 x30);计数+;液晶_x+;while(count=6)计数=0;l
42、cd_x=0;无效的写代码()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(W_line1_datai != 0)lcd_wdat(W_line1_datai);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(W_line2_datai != 0)lcd_wdat(W_line2_datai);我+;代码输入();write_nbyte(0 xa0,0 x00,code_buf,6);无效读取代码()uchar i,j;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(R_line1_datai !
43、= 0)lcd_wdat(R_line1_datai);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(R_line2_datai != 0)lcd_wdat(R_line2_datai);我+;read_nbyte (0 xa0 ,0 x00,code_buf,6);对于(j=0;j6;j+)lcd_wcmd(0 x44+j)|0 x80);lcd_wdat(code_bufj+0 x30);无效的主要()uchar我;哔=0;开始:延迟毫秒(10);液晶初始化();I2C_init();lcd_wcmd(0 x00|0 x80);我 = 0;而(line1_datai !
44、= 0)lcd_wdat(line1_datai);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(line2_datai != 0)lcd_wdat(line2_datai);我+;而(1)P1=0 xf0;如果(P1!=0 xf0)矩阵键();if(key=0 x0c)WriteCode();if(key=0 x0d)ReadCode();如果(键= 0 x0e)转到开始;密码锁工作流程#include #include #include I2C_drive.h#include LCD_drive.h#define uchar 无符号字符#define uint 无符号整
45、数uchar code_buf6;uchar incode_buf6;uchar 键;uchar 温度;sbit BEEP=P37;/蜂鸣器sbit RELAY=P36;/继电器uchar count_5ms,sec;位标志_2s=0;位 flag_comp=0;const uchar shuru= Please enter your password.;/语音提示输入密码const uchar eshuru= 密码错误,请重新输入密码。; /重新输入密码const uchar rshuru=x12; /重新输入密码const uchar chongse= 请输入新密码。; /重设密码/con
46、st uchar suoding= 请稍后再试。;/3次后锁定void beep() / 蜂鸣器声音哔=0;延迟_毫秒(300);哔声=1;延迟_毫秒(300);/*串口致一个字节*/*void Uart_SendChar(unsigned char dat)SBUF = 数据; /将要致的数据写入缓冲区而(!TI); /等待致完成TI = 0; /清除致标志 */*串口致字符串函数*/void Uart_SendString(uchar *trdata)uchar i=0;而(trdatai!=0 x00)SBUF=trdatai;而(!TI);TI=0;我+;void MatrixKey(
47、)/矩阵键盘扫描P1=0 xff;P1=0 xef;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 xee:key=0;break;案例 0 xed:key=1;break;案例 0 xeb:key=2;break;案例 0 xe7:key=3;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0 xdf;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延
48、迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 xde:key=4;break;案例 0 xdd:key=5;break;案例 0 xdb:key=6;break;案例 0 xd7:key=7;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0 xbf;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 x
49、be:key=8;break;案例 0 xbd:key=9;break;案例 0 xbb:key=10;break;案例 0 xb7:key=11;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;P1=0 xff;P1=0 x7f;温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)延迟_毫秒(10);温度=P1;温度=温度和0 x0f;如果(温度!= 0 x0f)温度=P1;开关(温度)案例 0 x7e:key=12;break;案例 0 x7d:key=13;break;案例 0 x7b:key=14;bre
50、ak;案例 0 x77:key=15;break;温度=P1;嘟();温度=温度和0 x0f;而(温度!= 0 x0f)温度=P1;温度=温度和0 x0f;/*开机显示画面*/uchar 代码 line1_data = KEY LOCK;uchar 代码 line2_data = MADE IN TANNING;/*密码输入画面*/uchar 代码 in_line1 = 请输入;uchar 代码 in_line2 = PASSWORD:;/*密码输入正确画面*/uchar 代码 inok_line1 = 输入密码;uchar 代码 inok_line2 = INOPUT OK;/*密码输入错误
51、画面*/uchar 代码 inerr_line1 = 输入密码;uchar 代码 inerr_line2 = INPUT ERR ;/*修改密码画面*/uchar 代码 modify_line1 = 修改密码;uchar 代码 modify_line2 = PASSWORD:;/*密码更改成功画面*/uchar 代码 setok_line1 = 修改密码;uchar 代码 setok_line2 = 修改确定;/*以下是开机画面显示功能*/无效的开始显示()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(line1_datai != 0)lcd_w
52、dat(line1_datai);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(line2_datai != 0)lcd_wdat(line2_datai);我+;/*以下是密码输入画面显示功能*/无效 CodeInDisp()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(in_line1i != 0)lcd_wdat(in_line1i);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(in_line2i != 0)lcd_wdat(in_line2i);我+;/*以下是密码输入错误显示函数*/无效 Cod
53、eInErr()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;while(inerr_line1i != 0)lcd_wdat(inerr_line1i);我+;lcd_wcmd(0 x40|0 x80);我 = 0;while(inerr_line2i != 0)lcd_wdat(inerr_line2i);我+;/*以下是密码输入的正确显示函数*/无效 CodeInOk()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(inok_line1i != 0)lcd_wdat(inok_line1i);我+
54、;lcd_wcmd(0 x40|0 x80);我 = 0;而(inok_line2i != 0)lcd_wdat(inok_line2i);我+;/*下面是密码设置画面显示功能*/无效 CodeSetDisp()uchar我;lcd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(修改_line1 i!= 0)lcd_wdat(修改_line1i);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(修改_line2 i!= 0)lcd_wdat(修改_line2i);我+;/*以下是密码设置成功画面显示功能*/无效 CodeSetOk()uchar我;l
55、cd_clr();lcd_wcmd(0 x00|0 x80);我 = 0;而(setok_line1i != 0)lcd_wdat(setok_line1i);我+;lcd_wcmd(0 x40|0 x80);我 = 0;而(setok_line2i != 0)lcd_wdat(setok_line2i);我+;无效传入()静态uchar lcd_x=0; /显示指针,注意是静态局部变量静态uchar计数=0; /密码计数器,注意是静态局部变量静态uchar code_n=0; /密码输入次数密码: lcd_clr(); /清屏RELAY=1 ;/锁定CodeInDisp(); /密码输入画面做P1=0 xf0;if(P1!=0 xf0)/如果有按键按下MatrixKey();/键盘扫描P1=0 xf0;而(P1!=0 xf0);if(key=0)&(key=9) /0-9有效,其余无效incode_bufcount=key;/key值存入数组lcd_wcmd(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仁爱与教育调查报告范文
- 人事面试报告范文
- 染料打样报告范文
- 汽车限行的报告范文
- MySQL教程(新体系-综合应用实例视频)(第4版) 习题-第07章-答案
- 2025年度绿色建筑项目合作保证金协议书
- 二零二五年度保密性农业科技研发与应用协议
- 二零二五年度厂房买卖定金协议(含设备转让)
- 二零二五年度物流仓储劳务输送与供应链管理合作协议
- 2025年度自愿离婚协议书:共同财产分割协议
- 印刷服务投标方案(技术方案)
- 幼儿游戏活动指导第二版全套教学课件
- 大学生就业指导实用教程:就业权益与法律保障
- 基于主题意义探究的小学英语单元整体作业设计 论文
- 新概念英语第2册课文word版
- 教师教学质量评估表(自评互评生评表)
- 重庆自然博物馆
- 外科护理(高职护理专业)PPT完整全套教学课件
- 输血与创伤性凝血病
- 消化科临床重点专科
- 人工挖孔桩爆破技术方案
评论
0/150
提交评论