基于51单片机的密码锁(可改密码内容摘要:
88,1. [10] 戴佳 , 戴卫恒 .C 语言应用程序设计 [M].电子工业出版社, 2020,1. [11] 龚运新 . 单片机 C 语言开发技术 [M].清华大学出版社 2020,1. 16 附 录 附录 1 总原理图 (T2)1(T2EX)2345678RESET9(RXD)10(TXD)11(INT0)12(INT1)13(T0)14(T1)15(WR)16(RD)17XTAL218XTAL119GND20(A0)21(A1)22(A2)23(A3)24(A4)25(A5)26(A6)27(A7)28PSEA29ALE30EA31(AD7)32(AD6)33(AD5)34(AD4)35(AD3)36(AD2)37(AD1)38(AD0)39VCC40U1AT89C51123456781615141312111094K7RP1Res Pack4S?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPBS?SWPB12XXTAL1161KR?ARes Pack21 161KARes Pack2Q?PNPD?Photo Sen30pFC2Cap30pFC1Cap10uFC3Cap Pol1S1SWPBVSS1VDD2VEE3RS4RW5E6D07D18D29D310D411D512D613D714====CODED LOCK===*LCD_1602LS?Bell12345K?RelayABCD1 2 3 4ABCD1234GNDD0D1D2D3D4D5D7D61KR1Res TapGNDGNDVCCVCCGNDVCCVCCGNDVCCVCCVCCGNDGND1KR?Res2VCCA01A11A23GND4SDA5SCL6WP7VCC8*AT24C02GNDVCC 附录 2 源程序 源程序 include include define LCM_Data P0 define uchar unsigned char define uint unsigned int //define Busy 0x80 //用于检测 LCM 状态字中的 Busy 标识 define w 6 //定义密码位数 17 sbit lcd1602_rs=P2^5。 sbit lcd1602_rw=P2^6。 sbit lcd1602_en=P2^7。 sbit Scl=P3^4。 //24C02 串行时钟 sbit Sda=P3^5。 //24C02 串行数据 sbit ALAM = P2^1。 //报警 sbit KEY = P2^0。 //开锁 sbit open_led=P2^2。 //开锁指示灯 bit operation=0。 //操作标志位 bit pass=0。 //密码正确标志 //bit ResetEn=0。 //重设密码充许标志 bit ReInputEn=0。 //重置输入充许标志 bit s3_keydown=0。 //3 秒按键标志位 bit key_disable=0。 //锁定键盘标志 unsigned char countt0,second。 //t0 中断计数器 ,秒计数器 void Delay5Ms(void)。 unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}。 //控盘扫描控制表 unsigned char code start_line[]={password: }。 unsigned char code name[]={===Coded Lock===}。 //显示名称 unsigned char code Correct[]= { correct }。 //输入正确 unsigned char code Error[]={ error }。 //输入错误 unsigned char code codepass[] ={ pass }。 unsigned char code LockOpen[] ={ open }。 //OPEN unsigned char code SetNew[]= {SetNewWordEnable}。 unsigned char code Input[]= {input: }。 //INPUT unsigned char code ResetOK[]= {ResetPasswordOK }。 unsigned char code initword[] = {Init password...}。 unsigned char code Er_try[]= {error,try again!}。 unsigned char code again[]= {input again }。 unsigned char InputData[6]。 //输入密码暂存区 unsigned char CurrentPassword[6]={1,3,1,4,2,0}。 //当前密码值 18 unsigned char TempPassword[6]。 unsigned char N=0。 //密码输入位数记数 unsigned char ErrorCont。 //错误次数计数 unsigned char CorrectCont。 //正确输入计数 unsigned char ReInputCont。 //重新输入计数 unsigned char code initpassword[6]={0,0,0,0,0,0}。 //=====================5ms 延时 ============================== void Delay5Ms(void) { unsigned int TempCyc = 5552。 while(TempCyc)。 } //===================400ms 延时 ============================== void Delay400Ms(void) { unsigned char TempCycA = 5。 unsigned int TempCycB。 while(TempCycA) { TempCycB=7269。 while(TempCycB)。 } } //============================24C02============================ void mDelay(uint t) //延时 { uchar i。 while(t) { for(i=0。 i125。 i++) {。 } } } void Nop(void) //空操作 { _nop_()。 _nop_()。 19 _nop_()。 _nop_()。 } /*起始条件 */ void Start(void) { Sda=1。 Scl=1。 Nop()。 Sda=0。 Nop()。 } /*停止条件 */ void Stop(void) { Sda=0。 Scl=1。 Nop()。 Sda=1。 Nop()。 } /*应答位 */ void Ack(void) { Sda=0。 Nop()。 Scl=1。 Nop()。 Scl=0。 } /*反向应答位 */ void NoAck(void) { Sda=1。 Nop()。 Scl=1。 Nop()。 Scl=0。 } 20 /*发送数据子程序, Data 为要求发送的数据 */ void Send(uchar Data) { uchar BitCounter=8。 uchar temp。 do { temp=Data。 Scl=0。 Nop()。 if((tempamp。 0x80)==0x80) Sda=1。 else Sda=0。 Scl=1。 temp=Data1。 Data=temp。 BitCounter。 } while(BitCounter)。 Scl=0。 } /*读一字节的数据,并返回该字节值 */ uchar Read(void) { uchar temp=0。 uchar temp1=0。 uchar BitCounter=8。 Sda=1。 do{ Scl=0。 Nop()。 Scl=1。 Nop()。 if(Sda) temp=temp|0x01。 else temp=tempamp。 0xfe。 if(BitCounter1) { 21 temp1=temp1。 temp=temp1。 } BitCounter。 } while(BitCounter)。 return(temp)。 } void WrToROM(uchar Data[],uchar Address,uchar Num) { uchar i。 uchar *PData。 PData=Data。 for(i=0。 iNum。 i++) { Start()。 Send(0xa0)。 Ack()。 Send(Address+i)。 Ack()。 Send(*(PData+i))。 Ack()。 Stop()。 mDelay(20)。 } } void RdFromROM(uchar Data[],uchar Address,uchar Num) { uchar i。 uchar *PData。 PData=Data。 for(i=0。 iNum。 i++) { Start()。 Send(0xa0)。 Ack()。 Send(Address+i)。 Ack()。 Start()。 Send(0xa1)。 Ack()。 22 *(PData+i)=Read()。 Scl=0。 NoAck()。 Stop()。 } } //============================LCD1602=================== define yi 0x80 //LCD 第一行的初始位置 ,因为 LCD1602 字符地址首位 D7 恒定为 1( 100000000=80) define er 0x80+0x40 //LCD 第二行初始位置(因为第二行第一个字符位置地址是 0x40) //延时函数,后面经常调用 void delay(uint xms)//延时函数,有参函数 { uint x,y。 for(x=xms。 x0。 x)。基于51单片机的密码锁(可改密码
相关推荐
本论的主要内容,举出了在系统测试过程中所发现的问题。 基于 51 单片机的循迹避障小车的设计 第 7 页 共 37 页 2 系统方案确定及主要元件的选择 系统方案确定 本次设计的智能小车实现的基本功能如下: 实时检测路径,并按照指定路线行驶; 实时检测障碍物,并躲过继续行驶; 本设计 以 AT89C51 为主控芯片,主要包括避障模块、电源模块、电机驱动模块等,系统框图如图 21 所示。
LM386 LM386 是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。 为使外围元件最少,电压增益内置为 20。 但在 1 脚和 8 脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。 输入端以地位 参考,同时输出端被自动偏置到电源电压的一半,在 6V 电源电压下,它的静态功耗仅为 24mW,使得 LM386 特别适用于电池供电的场合。 LM386
应用 [M].北京 :机械工业出版社 ,2020. [9] 谢自美 . 电子线路设计实验测试 [M].武汉 :华中科技大学出版社 ,2020. 7 [10] 曲娜 ,程凤琴 ,周鹏 . 基于 51 单片机的舵机控制信号的设计 [J].中国科技 信息 ,2020,21(63):137. [11] 刘敏娜 ,潘宏侠 ,王乔 . 基于 C51 单片机的数字电压表仿真设计 [J].山西 电子技术
计算机的管理下更好地发挥信息检测功能,降 低对元器件的要求,从而降低成本。 另一方面在软件的支持下使传感器具有较强的信息处理和通讯能力,具备较高的智能,极大地提高传感器系统的性能。 因此,有认为 :智能传感器系统是指传感器 (通过信号调理电路 )与微处理器赋予智能的结合,兼有信息检测、信息处理及通讯功能的传感器系统。 这些提法突破了传感器与微处理器结合必须在工艺上集成在一块芯片上的框框
T0) +△ Tg℃ 由式可知,每当结温升高 10℃ ,则波长向长波漂移 1nm,且发光的均匀性、一致性变差。 这对于作为照明用的灯具光源要求小型化、密集排列以提高单位面积上的光强、光亮度的设计尤其应注意用散热好的灯具外壳或专门通用设备 ,以 确保 LED 长期工作。 LED 驱动方式 LED 的恒流驱动 由 LED 的特性可知,其 PN 结 施加正向电压时,流过的正向电流将使 LED 发光。
于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中, ATMEL的 STC89C52RC 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 LED 数码管的控制显示 LED 数码管模型如图 所示。 LED 的段码端口 A~ G 分别接至 STC89C52RC 的 ~ 口,位选端 1~ 4 分别接至 、 、 、 ,如图 所示。 A B C D E F G