《基于单片机的语音电子门锁毕业论文.doc》由会员分享,可在线阅读,更多相关《基于单片机的语音电子门锁毕业论文.doc(44页珍藏版)》请在三一办公上搜索。
1、摘要现今社会,随着生活的进步电子业的蓬勃发展,单片机应用已经成为电子产品研制以及开发中首选的微控制器。随着人们的生活水平不断提高,怎样实现家庭的防盗这一问题也就变的尤为突出,采用传统的机械锁结构由于其构造简单,安全性能又低,已经无法满足人们的日常需要。本文从实用、可靠的角度出发,采用宏晶科技有限公司的单片机STC89C52与STC11L08XE作为主控芯片,其中STC11L08XE单片机主要负责语音识别处理功能,STC89C52单片机主要负责键盘、显示及密码处理等功能,最终控制门的打开或者关闭由STC11L08XE单片机最终输出。通过这两款的单片机结合外围的键盘输入、报警、显示等电路,本文的单
2、片机程序都用C语言编写,硬件电路设计使用protel 99se设计。设计的语音电子门锁可以多次的更改密码,并且具有报警功能。经实验证明,该密码锁具有设计方法合理,安全可靠,成本低,实用等特点,符合住宅、办公室用锁要求,具有推广价值。 关键词:密码锁 语音识别 单片机 报警1 引言1.1 语音电子门锁简介 语音电子密码锁是一种可以通过密码输入或者语音识别来控制外扩电路工作,从而控制门锁机械开关的打开、闭合,完成开锁或者闭锁任务的电子设备。现在应用比较多的电子密码锁是以芯片为核心,通过编程来实现即单片机控制外围电路的语音电子密码锁。其安全性及可靠性已大大超过了普通的机械锁。其特点如下: 1) 保密
3、性好,可靠性高,远远大于机械锁。随机开锁成功的几率几乎不可能。 2) 密码随意可变,用户可以随时根据需要更改密码,防止固定密码被盗,同时也可以避免因为人员的更替等原因而使锁的保密功能下降。 3) 错误密码输入保护功能,如果输入的密码错误超过三次时时,报警系统自动启动。4) 无活动机械零件,不会有磨损,这样使用的寿命就变长了。 5) 使用的灵活性好,不像机械锁那样需要必须佩带钥匙才可以开锁。 6) 语音电子密码锁操作非常简单,一用即会。1.2 语音电子门锁的发展趋势在日常的生活与工作当中,住宅、公司、单位等的安全防范以及单位的文件档案和财务报表等一些涉密资料的保存大多是以加锁的方式来解决。目前来
4、看,门锁主要还是用的弹子锁,这种方式的锁的钥匙很容易丢失;保险箱一般主要用的是机械密码锁,这种的结构较为复杂,制造的精度要求很高,成本也就很高,并且容易出现故障,人们常常需要随身携带多把钥匙,这样使用起来极不方便。如果钥匙丢失了那么安全性就会大打折扣。针对这些不同类型的锁具的缺点本设计用密码或者语音口令的方式代替传统的钥匙锁。它的出现给人们的生活提供了极大的方便,有非常广阔的市场前景。由于电子器件的限制,以前开发的一些电子密码门锁,其种类不多而且保密性又差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,其硬件电路结构繁杂,分立元件较多,也有一些是使用早的2051系列的单片
5、机来做的,这种的也是密码相对简单,很容易被破解。随着各种锁的出现,功能上日益强大,使用方面更加简便,安全性更强,从以前的单密码输入发展到现在的语音和电子密码双重的门锁,实现了真正的电子加密,用户只有通过密码或者是语音密钥才能打开锁具,如果用其他的办法是不能打开锁的。针对方便、安全等方面的需要许多的电子类型密码锁已经相继问世。但是这类产品一般都是针对特定的有效卡、指纹或者是声音等有效,并且不能实现通过远程来控制,只能适用在保密要求高而且只供个人使用的箱子、衣柜、房间等方面。由于字符、数字、人体生物特征、图形图像和时间等要素都可以成为钥匙的信息,那么将这些信息组合使用就能够使电子锁具有高度的安全保
6、密性,比如防范严密的金库,需要使用各种复合信息密码的电子锁,这样对盗贼来说是“道高一尺、魔高一丈”。这些组合信息的使用使电子锁得到无穷的扩展,也能让产品多样化,对于用户来说是“千挑百选、自得其所”。由此可以看出组合使用各种信息是电子锁以后发展的必然趋势。1.3 本设计实现的目标 本设计采用单片机STC89C52与STC11L08XE为主控芯片,结合一些外围电路,组成语音电子门锁,用户如果想要打开门锁,必需要先通过提供的键盘输入正确的密码才能将门锁打开,或者通过二级语音口令识别开门。如果密码输入错误蜂鸣器会有提示,为了提高实际安全性,设计当密码输入错误超过三次后将报警并且封锁键盘。密码可以由用户
7、登陆后由自己随意修改设定,设定密码长度为4位。修改密码只有门锁打开后才能修改密码。修改密码时要前后两次输入的新密码一致才能修改成功,修改成功后会有指示灯提示。语音识别开门时要首先说出一级加密的口令,其次再说出二级加密口令才能将门打开。1.4 设计方案的设计由于现在市面上的单片机种类很多,每种单片机都具有一定的优缺点,因此在选用时做了很多比较,最后比较合理的选择了STC单片机,以期获得最高的性价比。通常情况来说在选取单片机时要从以下几个方面考虑:存储器、性能、运行速度、定时/计数器、I/O口、模拟电路功能、串行接口、功耗、工作电压、抗干扰性、封装形式、保密性等,除了以上方面还有一些最基本参数比如
8、:中断源的优先级和数量、有没有低电压检测功能、工作温度范围、有无上电复位功能、单片机内有无时钟振荡器等。在开发过程中项目的开发还受到:编程器、开发工具、开发人员的适应性、开发成本、技术服务和支持等等因素。基于以上一些因素本设计选用单片机STC89C52与STC11L08XE两个单片机作为主控单片机。其中STC89C52单片机主要负责的功能是四位数码管的显示、按键设置密码、蜂鸣器报警。一些操作时的指示状态等;单片机STC11L08XE主要负责语音部分识别,及门锁控制的输出。本设计之所以选择用两个芯片是因为如果用一个芯片来完成,就需要用一个比较高端的芯片,而且管脚资源要足够多,Flash等要足够大
9、,这样处理起来才更容易,但是如果选择了这种芯片成本就会提高很多。而向本设计这样采用两个简单的单片机来做就既能照顾到成本,又能保证硬件资源够用。性价比还是很高的。当用户开锁时,先按键盘的开锁键,之后再按键盘的确定键来调整要设置密码的位,再通过增加键或者减小键来调整密码,当调整好后按下确定键,继续调整下一位,直到四位密码都输入完,按确定键瑞出键盘输入程序。如果密码输入正确则开锁,不正确蜂鸣器会发出短暂的一生响动要重新输入密码,如果连续输入三次密码错误那么就会发出报警。如果用户需要修改密码时,需要在输入密码正确后,继续输入两次新密码,只有这两次新密码一致时,新密码才修改成功。密码修改成功时会有绿色的
10、LED指示。2 单片机介绍2.1单片机STC89C52STC89C52RC这个单片机是宏晶科技公司推出的新一代的低功耗、高速并且有很强抗干扰的能力,它的指令代码兼容传统的老8051单片机,可以12 时钟/机器周期或者是6时钟/机器周期的任意选择。2.1.1单片机STC89C52的主要特性1. 这是一款增强型的8051单片机,6时钟/机器周期或者是12时钟/机器周期可以任意选择,其指令代码完全兼容传统8051单片机的指令代码。2. 这种单片机的工作电压范围:5.5V3.3V(5V单片机)或者3.8V2.0V(3V单片机)。3. 它的工作频率范围:040MHz,相对于普通8051的080MHz,实
11、际上其工作频率可达48MHz。4. 用户的应用程序存储空间为8K字节(Flash)。 片上集成了512字节数据存数区(RAM)。6. 通用I/O口有32个,复位后为:P1/P2/P3/P4是准双向口/弱上拉的,P0口是漏极开路输出口,当在作为总线扩展用时是不用加上拉电阻的,当作为I/O口用时,需加若上拉电阻。7. ISP(在系统可编程)/IAP(在应用可编程),不需要专用的编程器和专用仿真器,就可以通过串口(RxD/P3.0,TxD/P3.1)将用户程序直接下载到单片机里,数秒即可完成一片数据的写入操作。8. 新增了EEPROM功能。9. 具有看门狗功能。10.片上共有3个16位定时器/计数器
12、。即定时器T0、T1、T2定时器。11.有4路外部中断,包括低电平触发电路或下降沿中断,Power Down 模式可以由外部的中断低电平方式触发进行中断唤醒。12. 片上有通用的异步通信串行口(UART),它还可以用定时器实现多个UART工作。13. 单片机的工作温度范围:-40+85(工业级)/075(商业级)2.1.2 STC89C52RC单片机的工作模式模式1.典型功耗0.1A,可以由外部的中断来唤醒,中断执行并且返回后,继续执行原来的用户程序。2.空闲模式:此种模式的典型功耗2mA 。3.正常工作模式:此种模式的典型功耗4mA7mA 。4.掉电模式可以通过外部中断来唤醒,这适用气表、水
13、表等一些电池供电的设备及一些便携的设备。STC89C52RC单片机引脚功能说明。引脚图如图2-1所示。图2-1 STC89C52RC引脚图VCC(40引脚):接电源电压。VSS(20引脚):接地。P0 端口(P0.0P0.7对应3932 引脚)。P0端口是一个漏极开路的8 位双向的I/O口。当作为输出端口用时,每个引脚可以驱动8 个TTL的负载;当对P0端口写入“1”时,它又可以作为高阻抗输入。在访问外部程序和数据存储器时,P0端口也可以提供低8 位地址和8位数据的复用总线。此时,P0端口内部的若上拉电阻有效。当在Flash ROM编程时,由P0端口接收指令字节;在校验程序时,则输出指令字节。
14、在验证时,要求要外接上拉电阻。P1 端口(P1.0P1.7对应于18引脚)。P1端口是一个带内部上拉电阻的8位的双向I/O端口。P1的输出缓冲器可以驱动4 个TTL的输入。当对端口写入1 时,内部的上拉电阻会把端口拉到高电平,这时端口可以当做输出使用。当P1端口作输入口使用时,因为内部有上拉电阻,那些被外部拉低的引脚会输出一个电流(IIL)。P2 端口(P2.0P2.7,2128 引脚):P2 口是一个带内部上拉电阻的8 位双向I/O 端口。P2 的输出缓冲器可以驱动(吸收或输出电流方式)4 个TTL 输入。对端口写入1 时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2端口作为输
15、入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。P3端口(P3.0P3.7对应于1017 引脚)。P3端口是一个带有内部上拉电阻的8 位的双向I/O端口。P3端口的输出缓冲器可以驱动(吸收或输出电流方式)4 个TTL输入的信号。当对端口写入“1”时,它内部的上拉电阻会把端口拉到高电平,此时P3端口可用作输出口。当P3端口做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(IIL)。当在对Flash ROM编程或程序校验时,P3端口还接收一些控制信号。P3口除作为一般I/O 口外,还有其他一些复用功能,如下表所示:引脚号复用功能P3.
16、0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)表2-1 P3 口引脚复用功能复用功能RST(9 引脚):复位引脚。当通过此引脚给单片机连续输入两个机器周期以上的高电平信号时为有效,此引脚的功能为用来完成单片机的复位初始化操作。当看门狗计时完成后,RST复位引脚输出96个晶振周期的高电平信号。特殊寄存器AUXR(地址8EH)上的DISRTO 位可以让此功能无效。DISRTO在默认状态下,复位高电平有效。ALE/ ROG
17、(30引脚):地址锁存控制功能:(ALE)引脚是当访问外部程序存储器的时候,锁存低8位地址的输出脉冲。当在Flash 编程时,此引脚(ROG)也可以用作编程输入脉冲。(29引脚):()是外部程序存储器的选通信号。当单片机从外部程序存储器执行外部代码时,会在每个机器周期被激活两次,而访问外部数据存储器的时候,将不被激活。EA/VPP (31引脚):访问外部程序存储器的控制信号。:为了使能从0000H到FFFFH的外部程序存储器的读取指令,EA必须接地(GND)。注意加密方式为1时,EA将内部锁定为RESET。为了执行内部程序指令,EA应该接VCC。在Flash 编程期间,A也接收12伏特的VPP
18、电压。XTAL1(19引脚):振荡器的反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器的反相放大器的输入端2.2单片机STC11L08XESTC11L08XE的主要性能:1.高速,1个时钟/机器周期,增强型8051内核,速度比普通8051快8-12倍2.宽电压,5.5-4.1/3.7,3.6-2.4/2.13.低功耗设计,空闲模式4.低功耗模式,掉电模式和远程唤醒模式5.工作频率,0-35MHz,相当于普通8051的0-420MHz6.时钟,外部晶振或内部晶振磕训啊7.片内EEPROM功能,擦写次数10万次以上8.2个16位定时器9.1个独立波特率发生器10.可编程时钟输出
19、功能11.硬件看门狗12.全双工异步串行口13.先进的指令集结构14.通用I/O口(36/40个)管脚图如图2-2-所示:图2-2 STC11L08XE单片机引脚图3语音识别模块介绍语音识别模块实物如图3-1所示。本模块的主要芯片是LD3320语音识别芯片。LD3320 是一颗基于非特定人语音识别(SI-ASR:Speaker-IndependentAutomatic Speech Recognition)技术的语音识别/声控芯片。提供了真正的单芯片语音识别解决方案。LD3320 芯片上集成了高精度的A/D 和D/A 接口,不再需要外接辅助的Flash 和RAM,即可以实现语音识别/声控/人机
20、对话功能。并且,识别的关键词语列表是可以动态编辑的。基于LD3320,可以在任何的电子产品中,甚至包括最简单的51 作为主控芯片的系统中,轻松实现语音识别/声控/人机对话功能。为所有的电子产品增加VUI(Voice User Interface)语音用户操作界面。图3-1语音识别模块实物图主要特色功能:非特定人语音识别技术:不需要用户进行录音训练可动态编辑的识别关键词语列表:只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效。比如,用户在51 等MCU 的编程中,简单地通过设置芯片的寄存器,把诸如“你好”这样的识别关键词的内容动态地传入芯片中,芯片就可以识别这样设定的关
21、键词语了。真正单芯片解决方案:不需要任何外接的辅助 Flash 和 RAM,真正降低系统成本。内置高精度A/D和 D/A通道:不需要外接 AD 芯片,只需要把麦克风接在芯片的AD 引脚上;可以播放声音文件,并提供550mW 的内置放大器。高准确度和实用的语音识别效果支持用户自由编辑50条关键词语 在同一时刻,最多在 50 条关键词语中进行识别,终端用户可以根据场景需要,随时编辑和更新这50 条关键词语的内容。模块上集成了MIC音频输入设备及串口通信接口,论文模块还预留了16个I/O给用户使用。本设计中只有用到了模块的P1.0与P1.1口。其功能及使用方法见后面介绍,这里不再多叙述。4 硬件设计
22、硬件设计部分电路主要包括复位电路、晶振电路、电源部分、报警部分、数码管显示部分、按键部分、指示灯部分、语音识别模块接口部分等。4.1复位电路部分复位电路如图4-1所示。图中C103为滤波电容,S1为复位按键,电阻R101为下拉电阻。单片机正常运行时复位管脚RST被下拉电阻R101拉到低电位,当按键S1按下时,单片机管脚RST被拉倒高电平,此时单片机复位。图4-1 复位电路4.2晶振电路晶振电路如图4-2所示。图中选用的是外接无源的12MHz晶振,根据单片机的数据手册,选择晶振电容为瓷片的33pF电容。晶振电路在系统中虽然看起来很简单,但是在整个系统中是最重要的一部分,因为如果晶振电路不能正常运
23、行,那么单片机的用户程序就不能呗有效的执行。图4-2 晶振电路4.3电源部分电源部分如图4-3所示。图中D201是电源指示灯,当电源有电时D201点亮,当电源没电或者电压不够足时,D201熄灭。R201为限流电阻,其功能是限制流过D201的电流过大烧坏二极管D201。电容C201与C202为滤波电容,作用是滤除电源的杂波,保证单片机尽量小的收到外界文波带你呀的干扰。图4-3电源部分电路4.4报警部分电路报警部分电路如图4-4所示。图中R401为限流电阻,三极管Q5起到扩流的作用,因为51的单片机驱动能力都很有限,因此要用三极管扩流。U3为报警用的蜂鸣器,当有报警时,蜂鸣器会发出声响,当无任何报
24、警产生时,蜂鸣器静音。图4-4 报警部分电路4.5数码管显示电路数码管显示电路如图4-5所示。图中Q1、Q2、Q3、Q4为起到扩流作用。R306-R312,R301-R304起到限流的作用。RP1为排阻,是P0口上啦电阻。加这个上拉电阻是因为51单片机的P0口都是准双向口,即做输出时如果不加上拉电阻是不可以的。数码管LG5641BH是共阳的数码管。此部分电路的工作原理是,比如单片机的P0口都输出低电平,P2.4输出高电平,那么此时三极管Q1导通数码管第一位被点亮,显示的数据因为P0都为低电平,故现实的数据是8.其他数码管的点亮及显示的数据原理如此一样。图4-5 数码管显示电路4.6按键部分电路
25、按键电路如图4-6所示。图中R401-R404为上拉电阻,当按键未被按下时,单片机的相应管脚为高电平,当按键按下时单片机的相应管脚变为低电平,当单片机检测到低电平时,说明按键按下。在本设计中P1.0口的功能定义为菜单键,P1.1口的功能定义为确定键,P1.2口的功能定义为增加键,P1.3口的功能定义为减小键。图4-6 按键部分电路4.7指示灯部分电路指示灯部分电路如图4-7所示。图中D402为密码输入指示灯,R403为密码输入指示灯的限流电阻。D403为密码修改正确指示灯,R404为密码修改指示灯的限流电阻。在系统运行时,当用户按下菜单键后准备输入密码的过程中D402指示灯亮。如果用户密码修改
26、正确时,用D403指示密码修改成功与否,如果修改正确,D403亮,如果修改不成功,则D403保持灭的状态。图4-7指示灯电路4.8语音识别接口语音识别接口电路如图4-8所示。因为语音识别模块的用电电压是3.3V,故如果要让两个单片机通过I/O口连接就需要将电平信号做一些转变。途中的R201与稳压管D1就是将5V电压转变到3.3V的电路。图中语音识别模块部分的R402与D401为最终的门控制输出指示灯。当D401亮时表示门锁打开,当D401灭时表示门锁关闭。图4-8语音识别接口电路5 软件部分软件部分的程序包括两个方面,STC89C52单片机的程序和STC11L08XE单片机程序。其中STC89
27、C52单片机主要负责按键处理及密码显示、报警与一些操作状态的处理,而STC11L08XE单片机负责语音的识别及处理和检测STC89C52单片机的I/O开关门命令以及门锁控制的最终输出。5.1 STC89C52单片机的程序STC89C52的单片机程序包括宏定义、初始化、按键处理、显示、主函数等部分。线距离来说明程序部分。5.1.1单片机程序的宏定义及一些申明程序代码及注视如下:#include /包含单片机头文件#include /宏#define GPIO_DIG P0 /定义P0口为数码管显示接口用sbit LS1=P24; /定义P2.4口为数码管第一位控制sbit LS2=P25; /定
28、义P2.5口为数码管第二位控制sbit LS3=P26; /定义P2.6口为数码管第三位控制sbit LS4=P27; /定义P2.7口为数码管第四位控制sbit in_led=P23; /定义P2.3口为输入密码指示灯sbit password_led=P22; /定义P2.2口为密码设置成功指示灯sbit door_out=P20; /定义P2.0口为门锁输出sbit alarm=P14; /定义报警输出unsigned char Trg=0; /按键触发标志unsigned char Cont=0; /长按键标志unsigned char key_menu=0; /菜单标志unsigne
29、d char key_enteradd=0; /按键设置位变量unsigned char key_datadd=0; /按键设置位变量unsigned char key_lock=0; /键盘锁标志unsigned char code DIG_CODE10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /0、1、2、3、4、5、6、7、8、9的显示码int ge,shi,bai,qian;unsigned char key_password=0; /密码设置标志unsigned int result=1234; /默认密码为1234uns
30、igned int result1=0; /输入密码unsigned int result2=0; /验证密码unsigned int result3=0; /验证密码unsigned int password_count=0; /验证密码计数unsigned int count=0; /输入密码错误计数unsigned int t1_count=0; /定时器1定时计数void Delay(); /延时 void Init(); /初始化函数void data_change(); /数据转换void key_read(); /按键函数void key_set(); /按键设置函数void D
31、igDisplay(unsigned char x); /动态显示函数 5.1.2初始化函数/* 函数名 : Init()* 函数功能 : 初始化函数* 输入 : 无* 输出 : 无*/void Init()alarm=1; /初始化报警关闭 in_led=1;/初始化,输入密码指示灯door_out=0; /门锁输出默认为0,关闭状态password_led=1; /关闭 /以下为定时器初始化/ EA=1; /开全局中断 ET0=1; /开定时中断0 IT0=0; /外部中断0电平触发 IT1=0; /外部中断1电平触发 PT0=1; /定时中断0高 TMOD = 0x28; /T0T1方式
32、控制 TH0= 0x0c; / T0高8位 TL0= 0x78; / T0低8位 /初始化完成.5.1.3主程序/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void) / unsigned char i; Init(); /初始化函数 while(1)if(key_lock=0) /只有键盘未锁定时,才可以操作键盘 key_set(); /按键设置函数 5.1.4按键处理函数/* 函数名 : key_set()* 函数功能 : 按键设置函数* 输入 : 无* 输出 : 无*/void key_set() /按键设置函数uns
33、igned int i; key_read(); /按键函数 if (Trg=1) TR0=1; /启动T0 t1_count=0; in_led=0; /输入密码指示灯亮 data_change(); /调用数据变换子程序 key_menu=1; while (key_menu=1) /菜单键按下时 key_read(); /按键函数 if (Trg=2) /如果确定键按下 t1_count=0; key_datadd+; if (key_datadd=5) /如果超过合法值,则清零,(合法值为0-4) if (key_password=0) /密码设置标志 result1=qian*100
34、0+bai*100+shi*10+ge; /保存设置结果 if (result=result1) /如果输入密码与设置密码相同 in_led=1; /关闭密码输入指示灯 result1=0; /输入密码清零 t1_count=0; key_password=1; /设置密码标志 password_count=0; /验证密码计数清零 count=0; /密码错误计数清零 door_out=1; /打开门锁 else count+; /密码输入错误计数加一 result1=0; /输入密码清零 alarm=0; /短时间报警提示密码错误 Delay(); Delay(); Delay(); De
35、lay(); Delay(); Delay(); Delay(); Delay(); alarm=1; if(count=3)/如果密码输出错误次数超过三次,则报警并锁定键盘 in_led=1; /关闭密码输入指示灯 key_lock=1; /键盘锁定 alarm=0; /报警产生 else /设置密码 password_count+; if (password_count=1) result2=qian*1000+bai*100+shi*10+ge; /设置密码else if(password_count=2) result3=qian*1000+bai*100+shi*10+ge; /设置
36、密码 if (result2=result3) in_led=1; /关闭密码输入指示灯 password_led=0; /打开密码设置成功指示灯 result=result2; /设置密码成功 password_count=0; key_menu=0; /设置完毕,跳出设置循环key_datadd=0; else if (Trg=4) /如果增加键按下 t1_count=0; if (key_datadd=4) /调整个位 ge+; if (ge9) /如果超过范围,清零 ge=0; else if(key_datadd=3) /调整十位 shi+; if (shi9) /如果超过范围,清零
37、 shi=0; else if(key_datadd=2) /调整白位 bai+; if (bai9) /如果超过范围,清零 bai=0; else if(key_datadd=1) /调整千位 qian+; if (qian9) /如果超过范围,清零 qian=0; else if (Trg=8) /如果减小键按下 t1_count=0; if (key_datadd=4) /调整个位 ge-; if (ge0) /如果超过范围, ge=9; else if(key_datadd=3) /调整十位 shi-; if (shi0) /如果超过范围, shi=9; else if(key_datadd=2) /调整白位 bai-; if (bai0) /如果超过范围,