基于单片机8051的密码锁控制内容摘要:

, 0x39,0x5e,0x79,0x71}。 bit enterflag。 //确认键按下与否的标志 bit mimaflag。 //密码正确与否的标志 bit xiugaiflag。 //修改密码标志 bit enter1flag。 //修改密码确认键标志 sbit red=P3^7。 sbit bell=P3^6。 sbit rs=P2^0。 sbit rw=P2^1。 sbit lcden=P2^2。 sbit green=P3^2。 sbit scl=P3^4。 sbit sda=P3^5。 uchar code table1[]=input the passco。 uchar code table2[]=de:。 uchar code table3[]=*。 uchar code table4[]=right (^_^)。 uchar code table5[]=error!!!。 uchar code table6[]=define the passc。 uchar code table7[]=ode:。 uchar code table8[]=code is new。 //********************************* 键 盘 消 抖 函 数**************************** void delay1() {。 } void delay2(uchar x) { uchar a,b。 for(a=x。 a0。 a) 23 for(b=100。 b0。 b)。 } void delay(uint z) { uint x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } //****************************e^2room 的初始化******************************* void start() //开始信号 { sda=1。 delay1()。 scl=1。 delay1()。 sda=0。 delay1()。 } void stop() //停止 { sda=0。 delay1()。 scl=1。 delay1()。 sda=1。 delay1()。 } //**************************** 应 答 信 号************************************* void respond() { uchar i。 scl=1。 delay1()。 while((sda==1)amp。 amp。 (i250))i++。 scl=0。 delay1()。 } //********************************** 写字节操作函数***************************** void write_byte(uchar date) 24 { uchar i,temp。 temp=date。 for(i=0。 i4。 i++) { temp=temp1。 //保持最高位,左移到进位 CY 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。 i4。 i++) { scl=1。 delay1()。 k=(k1)|sda。 //或运算,放到最低位 scl=0。 delay1()。 } return k。 } //*********************************** 写 地 址 函 数*************************** void write_add(uchar address,uchar date) { start()。 write_byte(0xa0)。 respond()。 25 write_byte(address)。 respond()。 write_byte(date)。 respond()。 stop()。 } //************************************ 读 地 址 函 数******************************** uchar read_add(uchar address) { uchar date。 start()。 write_byte(0xa0)。 respond()。 write_byte(address)。 respond()。 start()。 write_byte(0xa1)。 respond()。 date=read_byte()。 stop()。 return date。 } //**************************LCD1602 的初始 化******************************** void write_(uchar ) { rs=0。 lcden=0。 P0=。 delay(5)。 lcden=1。 delay(5)。 lcden=0。 } void write_date(uchar date) { rs=1。 lcden=0。 P0=date。 delay(5)。 lcden=1。 delay(5)。 26 lcden=0。 } //***************************** 密 码 比 较 函 数***************************************** bit mimacmp() { bit flag。 uchar i。 for(i=0。 i4。 i++) { if(mima[i]==tab_key[i]) flag=1。 else { flag=0。 i=4。 } } return(flag)。 //返回 flag } ////**************************LCD 显示函数开始********************************************** void lcd_display() { uchar i=0。 write_(0x80+0x40+4)。 for(i=0。 in。 i++) { write_date(table3[0])。 } } //*********************************** 键 盘 功 能 分 配 函数群开始********************************* //** 0 ** 4 ** 8 **修改 (clr) ** //** 1 ** 5 ** 9 **修改密码键 (a)** //** 2 ** 6 ** 确认 (en)**修改确认 密码键 (b)** //** 3 ** 7 ** void key_manage1() { tab_key[n]=0。 27 n++。 if(xiugaiflag==1) { mima[count4]=0。 count4++。 } } void key_manage2() { tab_key[n]=1。 n++。 if(xiugaiflag==1) { mima[count4]=1。 count4++。 } } void key_manage3() { tab_key[n]=2。 n++。 if(xiugaiflag==1) { mima[count4]=2。 count4++。 } } void key_manage4() { tab_key[n]=3。 n++。 if(xiugaiflag==1) { mima[count4]=3。 count4++。 } } void key_manage5() 28 { tab_key[n]=4。 n++。 if(xiugaiflag==1) { mima[count4]=4。 count4++。 } } void key_manage6() { tab_key[n]=5。 n++。 if(xiugaiflag==1) { mima[count4]=5。 count4++。 } } void key_manage7() { tab_key[n]=6。 n++。 if(xiugaiflag==1) { mima[count4]=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。