基于51单片机的简易电子密码锁毕业设计课程设计内容摘要:
write_1602dat(Error[j])。 } ThreeAlam()。 //错误提示 pass=0。 ReInputEn=0。 //关闭重置功能, ReInputCont=0。 DisplayChar()。 break。 } } if(i==6) { //DisplayListChar(0,1,ResetOK)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(ResetOK[j])。 } TwoAlam()。 //操作成功提示 WrToROM(TempPassword,0,6)。 //将新密码写入 24C02存储 ReInputEn=0。 } ReInputCont=0。 CorrectCont=0。 } else { OneAlam()。 //DisplayListChar(0, 1, again)。 //显示再次输入一次 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(again[j])。 } for(i=0。 i6。 i++) { TempPassword[i]=InputData[i]。 //将第一次输入的数据暂存起来 } } N=0。 //输入数据位数计数器清 零 } } } } //======================= 输入密码错误超过三过,报警并锁死键盘====================== void Alam_KeyUnable(void) { P1=0x00。 { ALAM=~ALAM。 Delay5Ms()。 } } //======================= 取消所有操作============================================ void Cancel(void) { unsigned char i。 unsigned char j。 //DisplayListChar(0, 1, start_line)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(start_line[j])。 } TwoAlam()。 //提示音 for(i=0。 i6。 i++) { InputData[i]=0。 } KEY=1。 //关闭锁 ALAM=1。 //报警 关 operation=0。 //操作标 志位清零 pass=0。 //密码正确标志清零 ReInputEn=0。 //重置输入充许标志清零 ErrorCont=0。 //密码错误输入次数清零 CorrectCont=0。 //密码正确输入次数清零 ReInputCont=0。 //重置密码输入次数清零 open_led=1。 s3_keydown=0。 key_disable=0。 N=0。 //输入位数计数器清零 } //========================== 确认键,并通过相应标志位执行相应功能=============================== void Ensure(void) { unsigned char i,j。 RdFromROM(CurrentPassword,0,6)。 //从 24C02里读出存储密码 if(N==6) { if(ReInputEn==0) //重置密码功能未开启 { for(i=0。 i6。 ) { if(CurrentPassword[i]==InputData[i]) { i++。 } else { ErrorCont++。 if(ErrorCont==3) //错误输入计数达三次时,报警并锁定键盘 { write_1602(er)。 for(i=0。 i16。 i++) { write_1602dat(Error[i])。 } do Alam_KeyUnable()。 while(1)。 } else { TR0=1。 //开启定时 key_disable=1。 //锁定键盘 pass=0。 break。 } } } if(i==6) { CorrectCont++。 if(CorrectCont==1) //正确输入计数,当只有一次正确输入时,开锁, { //DisplayListChar(0,1,LockOpen)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(LockOpen[j])。 } TwoAlam()。 //操作成功提示音 KEY=0。 //开锁 pass=1。 //置正确标志位 TR0=1。 //开启定时 open_led=0。 //开锁指示灯亮 for(j=0。 j6。 j++) //将输入清除 { InputData[i]=0。 } } else //当两次正确输入时,开启重置密码功能 { //DisplayListChar(0,1,SetNew)。 write_1602( er)。 for(j=0。 j16。 j++) { write_1602dat(SetNew[j])。 } TwoAlam()。 //操作成功提示 ReInputEn=1。 //允许重置密码输入 CorrectCont=0。 //正确计数器清零 } } else //=========================当第一次使用或忘记密码时可以用 131420对其密码初始化 ============ { if((InputData[0]==1)amp。 amp。 (InputData[1]==3)amp。 amp。 (InputData[2]==1)amp。 amp。 (InputData[3]==4)amp。 amp。 (InputData[4]==2)amp。 amp。 (InputData[5]==0)) { WrToROM(initpassword,0,6)。 //强制将初始密码写入 24C02存储 //DisplayListChar(0,1,initword)。 //显示初始化密码 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(initword[j])。 } TwoAl am()。 Delay400Ms()。 TwoAlam()。 N=0。 } else { //DisplayListChar(0,1,Error)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Error[j])。 } ThreeAlam()。 // 错误提示音 pass=0。 } } } else //当已经开启重置密码功能时,而按下开锁键, { //DisplayListChar(0,1,Er_try)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Er_try[j])。 } ThreeAlam()。 } } else { //DisplayListChar(0,1,Error)。 write_1602(er)。 for(j=0。 j16。 j++) { write_1602dat(Error[j])。 } ThreeAlam()。 //错误提示音 pass=0。 } N=0。 //将输入数据计数器清零,为下一次输入作准备 operation=1。 } //==============================主函数 =============================== void main(void) { unsigned char KEY,NUM。 unsigned char i,j。 P1=0xFF。 TMOD=0x11。 TL0=0xB0。 TH0=0x3C。 EA=1。 ET0=1。 TR0=0。 Delay400Ms()。 //启动等待,等 LCM讲入工作状态 lcd_init()。 //LCD初始化 write_1602(yi)。 //日历显示固定符号从第一行第 0个位置之后开始显示 for(i=0。 i16。 i++) { write_1602dat(name[i])。 //向液晶屏写日历显示的固定符号部分 } write_1602(er)。 //时间显示固定符号写入位置,从第 2个位置后开始显示 for(i=0。 i16。 i++) { write_1602dat(start_line[i])。 //写显示时间固定符号,两个冒号 } write_1602(er+9)。 //设置光标位置 write_1602(0x0f)。 //设置光标为闪烁 Delay5Ms()。 //延时片刻 (可不要 ) N=0。 //初始化数据输入位数 while(1) { if(key_disable==1) Alam_KeyUnable()。 else ALAM=1。 //关报警 KEY=keynum()。 if(KEY!=0) { if(key_disable==1) { second=0。 } else { NUM=coding(KEY)。 { switch(NUM) { case (39。 A39。 ):。 break。 case (39。 B39。 ):。 break。 case (39。 C39。 ):。 break。 case (39。 D39。 ): ResetPassword()。 break。 //重新设置密码 case (39。 *39。 ): Cancel()。 break。 //取消当前输入 case (39。 39。 ): Ensure()。 break。 // 确认键, default: { //DisplayListChar(0,1,Input)。 write_160。基于51单片机的简易电子密码锁毕业设计课程设计
相关推荐
============= TEMPDIN BIT。 ============================= 中断向量区 ========================= ORG 0000H LJMP START ORG 00BH LJMP T0IT。 =============================系统初始化 ========================== ORG
数字电路或单片机、价格低等优点。 频率 /温度输出式集成湿度传感器。 典型产品为 HTF3223 型。 它除具有 HF3223 的功能以外,还增加了温度信号输出端,利用负温度系数( NTC)热敏电阻作为温度传感器。 当环境温度变化时,其电阻值也相应改变并且从 NTC 端引出,配上二次仪表即可测量出温度值。 系统简介 系统功能简介 本系统实现的功能如下: 对环境 温 、 湿度数据的 采集、 处理
C2440 开发板简介 这里所用的 S3C2440 嵌入式系统开发板功能比较强大 ,配备了完备的硬件资源和开发软件 ,开发板的结构如图 所示。 图 开发板结构图 S3C2440A 是韩国三星公司推出的 16/32 位 RISC 微控制器 ,其 CPU 采 用的是 ARM920T 内核。 电源电路实现了 5v 直流输入到 、 、 输出转换的功能 ,为板上各功能模组的正常工作提供所需电压。
者方便用户对现有事件作出一定的修改或者删除。 ( 3) 课程管理模块:在课程管理模块中需要有星期的标识,在某一天记录课程时,需要对这门课程的时间有一定的显 示,还有作业的情况方面的提醒,其他的增添删除操作基本同日程管理模块类似。 ( 4) 设置界面模块:其中包含了一些对界面的设置以及对日程的设置选项。 ( 5) 关于信息模块:其中包含了一些本软件的设计信息及使用的一些基本信息。
系统硬件电路的设计 为使硬件电路设计尽可能合理,应注意以下几方面: ( 1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。 ( 2)留有设计余地。 在设计硬件电路时,要考虑到将来修改扩展的方便。 因为很少有一锤定音的电路设计,如果现在不留余地
若测量值是负值 { if((temp+temp_d*)=min)//当测量值大于最小值时报警 {w=1。 TR1=1。 } if((temp+temp_d*)min)//当测量值小于最小值时不报警 {w=0。 } } } } if(f_max==1) //若下限值是负值 { if(f_min==1) //若下限值是负值 { if(f==1) //若测量值是负值 {