课程设计论文-基于单片机的遥控密码锁内容摘要:
case 0x5a: return(6)。 case 0x42: return(7)。 case 0x4a: return(8)。 case 0x52: return(9)。 case 0x98: return(10)。 case 0xb0: return(11)。 case 0xe0: return(12)。 case 0xa8: return(13)。 case 0x90: return(14)。 case 0x22: return(15)。 case 0x02: return(16)。 case 0xc2: return(17)。 case 0xa2: return(18)。 case 0x62: return(19)。 case 0xe2: return(20)。 default : return(99)。 } } 密码 判断、 报警及修改程序 电子密码锁的 软件编程主要分为两方面,分别是 接收密码后判断及报警 部分和密码修改 控制部分。 首先 介绍 密码判断及报警程序。 显示收到的键码并保存到接收缓存 receive_code[8],直到 8 位键码接收完毕。 然后和原密码缓存 origin_code[8]比较,判断密码是否正确。 若密码正确则将标志位 code_right=1 ;若不正确则报警并使 密码输入错误次数wrong_num++,再判断错误次数是否已达 3 次,若是则程序进入死循环锁定。 程序流程图 如图 16 所示。 13 图 16 密码判断及报警流程图 接着介绍密码修改控制程序。 当密码输入正确以后用户按下 “密码修改 键 ” 就会进入密码修改操作,单片机也就会运行密码修改程序。 程序流程图 如图 17 所示。 图 17 密码修改流程图 code_right=1 修改密码。 保存新密码 新密码接收完毕。 返回 N N N N Y Y Y Y 新密码确认完毕。 两次密码相同。 显示错误 输入密码 接收了 8 位键码。 code_right=1 密码是否正确 wrong_num++ wrong_num=3? 错误警告 报警锁定 N N N Y Y Y 14 进入密码修改程序首先等待新密码的第一次输入。 第一次输入的新密码放在 接收 缓存 receive_code[8]中,当输入完第 八 个密码后系统会提示再次输入密码,第二次输入的新密码放在 密码比较 缓存 _code[8]中。 第二次输 入密码完成后就检验两次输入的新密码是否相同,如果相同的话就更换密码 ,将新密码储存到 AT24C02 中。 关键程序如下: void check_code(void) { if(ir_flag==1) flag=0, key_data=key_match() , Beep(),ir_flag=0,j=0。 //Beep 函数发出按键声音 if(show==1amp。 amp。 flag==0) //接收 8 个密码 if(key_data10) { receive_code[rec_num]=key_data。 DisplayListChar(rec_num,1,*)。 flag=1。 rec_num++。 } else if(rec_num0amp。 amp。 key_data==10) //10 号键退格 { DisplayListChar(rec_num1,1, )。 flag=1。 rec_num。 } if(key_data==18) //跳到时钟模式 { key_data=99。 delay_LCM(10)。 LCM_cls()。 show=0。 beep_flag=0。 rec_num=0。 k=1。 } if(rec_num==8) //输入八个密码后密码检查 amp。 3 次错误后上锁 { 15 delay_LCM(500)。 for(j=7。 j0。 j) { if(origin_code[j]!=receive_code[j]) //与原密码比较 { wrong_num++。 if(wrong_num==1) { delay_LCM(1000)。 LCM_cls()。 delay_LCM(1000)。 DisplayListChar(0,0,Input it again!)。 } else if(wrong_num==2) { delay_LCM(1000)。 LCM_cls()。 delay_LCM(1000)。 DisplayListChar(0,0,the last time)。 } else if(wrong_num==3) { LCM_cls()。 DisplayListChar(0,0,Wrong!)。 DisplayListChar(0,1,Lock)。 LED1=1。 LED2=1。 LED3=0。 SPEAKER=0。 //3 次错误报警 delay_LCM(10000)。 while(1)。 } //3 次错误进入死循环锁定 code_right=0。 rec_num=0。 return。 } } LCM_cls()。 DisplayListChar(0,0, (^_^))。 //密码正确,开锁成功 DisplayListChar(0,1,What You Want?)。 rec_num=0。 show=0。 code_right=1。 //密码正确标识位 } } void change_code(void) { int i,j。 if(ir_flag==1) key_data=key_match(),flag=0,Beep(),ir_flag=0。 16 if( code_right==1 amp。 amp。 key_data==11) //11 号按键为修改密码按键的键码 { delay_LCM(500)。 LCM_cls()。 DisplayListChar(0,0,Input new code)。 new_code1=1。 } //修 II 改密码标识位 1 if(new_code1==1amp。 amp。 flag==0) { if(key_data10) { _code[rec_num]=key_data。 DisplayListChar(rec_num,1,*)。 rec_num++。 flag=1。 } else if(rec_num0amp。 amp。 key_data==10) { DisplayListChar(rec_num1,1, )。 rec_num。 flag=1。 } } if(code_right==1 amp。 amp。 rec_num==8 amp。 amp。 new_code1==1) //判断第一次新密码是否接收完 { delay_LCM(500)。 LCM_cls()。 DisplayListChar(0,0,Input again!)。 rec_num=0。 new_code2=1。 //修改密码标识位 2 new_code1=0。 } if(new_code2==1amp。 amp。 flag==0) { if(key_data10) { 1_code[rec_num]=key_data。 DisplayListChar(rec_num,1,*)。 rec_num++。 flag=1。 } else if(rec_num0amp。 amp。 key_data==10) { DisplayListChar(rec_num1,1, )。 rec_num。 flag=1。 17 } } if(code_right==1 amp。 amp。 rec_num==8 amp。 amp。 new_code2==1) //判断第二次新密码是否接收完 { rec_num=0。 new_code2=0。 j=8。 while(j) //判断两次输入是否一致 { if(_code[j]!=1_code[j]) { delay_LCM(10)。 LCM_cls()。 DisplayListChar(0,0,Not Match!)。 DisplayListChar(0,1,Press Change key)。 delay_LCM(200)。 return。 } } LCM_cls()。 for(i=0。 i8。 i++) //密码一致,开始修改密码 {origin_code[i]=_code[i]。 } DisplayListChar(0,0,New codes saved!)。 //修改密码成功 delay_LCM(5000)。 wrong_num=0。 code_right=0。 ir_flag = 0。 k=1。 //跳到时钟 } return。 } 时钟模式 一开始进入运行的是时钟模式。 while(1) //时钟部分程序 { F1: DisplayListChar(0,0, )。 DisplayListChar(0,1, )。 DisplayListChar(6,0,(0_0))。 DisplayListChar(3,1, : : )。 write_sfm(3,shi)。 write_sfm(6,fen)。 18 write_sfm(9,miao)。 while(1) {delay_LCM(2020)。 DisplayListChar(6,0,(^_^))。 if(ir_flag==1) key_data=key_match(),ir_flag=0。 if(key_data==14){key_data=99。 goto F2。 } if(key_data==18) //转入密码模式 { beep_flag=1。 Beep()。 key_data=99。 LCM_cls()。 delay_LCM(10)。 DisplayListChar(0,0,Input The code! )。 show=1。 beep_flag=1。 goto A1。 } miao++。 if(miao==60) { miao=0。 fen++。 if(fen==60) { fen=0。 shi++。 if(shi==24) { shi=0。 } write_sfm(3,shi)。 } write_sfm(6,fen)。 } write_sfm(9,miao)。 } } F2: while(1) { if(ir_flag==1) {key_data= key_match()。 switch(key_data) 19 { case 8: if(shi==23)shi=0。 else shi++。 ir_flag=0。 write_sfm(3,shi)。 break。 case 9: if(fen==59)fen=0。 else fen++。 ir_flag=0。 write_sfm(6,fen)。 break。 default: DisplayListChar(6,0,(_))。 ir_flag=0。 delay_LCM(3000)。 DisplayListChar(6,0,(^0^))。 break。 }} if(key_data==14){key_da。课程设计论文-基于单片机的遥控密码锁
相关推荐
平 ,提高全员的安全意识,进一步增强电网调度安全可靠性和管理规范性。 在整个排查工作中,遵循 “边查,边整 改 ”Xx 电业局调度控制中心 3 的原则,根据隐患特点,细化隐患描述,进行分类监管,以便于分析隐患成因,及时采取预控措施,防止隐患的二次出现,有效减少事故发生。 对于发现的隐患,能采取有效整改措施的,及时落实整改,做到 “一个都不能少 ”。 对于暂时不具备消缺条件的,细致分析原因
旦出现延期或取消的情形,召集人应当在原定召开日前至少 2 个工作日公告并说明原因。 第五节 股东大会的召开 第五十八条 本公司董事会和其他召集人将采取必要措施,保证股东大会的正常秩序。 对于干扰股东大会、寻衅滋事和侵犯股东合法权益的行为,将采取措施加以制止并及时报告有关部门查处。 第五十九条 股权登记日登记在册的所有股东或其代理人,均有权出席股东各种管理资料,房地产,策划等应用文书,网站地址:
施工方法。 (3) 柱砼施工:由于柱头处钢筋密集,不易下料,故柱子与梁分开浇筑。 (4) 梁板砼施工:采用泵送施工,梁板砼采用连续浇筑。 砼一次浇筑量较大,要保证砼供应及浇筑砼的有序性,砼要有足够的缓 凝时间在连续浇筑区间防止出现冷缝。 (5) 梁板按图纸设计位置划分施工段,施工缝留于梁跨中冷跨中范围。 (6) 剪力墙施工:剪力墙施工采用泵送商品砼。 (7) 混凝土配合比: 大体积砼掺加
8 图 单片机复位电路 系统总电路的设计 系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。 系统总电路图附录 B所示。 8051 单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。 8051 单片机提供了 XTAL1 和 XTAL2 两 个专用引脚接晶振电路
程序执行时,即使输入信号发生变化,内存中输入信息也不变化,只有在下一个扫描周期的输入采样阶段才能读入信息。 2) 程序执行阶段: plc 对用户程序扫描。 3)输出刷新阶段:当所有指令执行完毕通过隔离电路,驱动功率放大器,电路是输出端子向外界输出控制信号驱动外部负载。 PLC 汇编语言 采用面向控制过程,面向问题,简单直观的 plc 编写横语言,常用的有:梯形图,语句表,功能图等。 1. 梯形图
广陂垅田间配套(Ⅰ 标段投资 83万元、 、Ⅱ 标段投资 79万元、 、Ⅲ标段投资 80万元、 、Ⅳ 标段投资 93万元 、Ⅴ 标段投资 94万元 )五个标段(工程地点富田镇富田、陂下村);总投资为 429万元;炉下垅田间配套( Ⅰ 标段投资 82万元、 Ⅱ 标段投资 100万元、 Ⅲ 标段投资 77万元 )三个标段 (工程地点新圩镇黄塘、樟塘村、炉下村) ,总投资为 259万元。