基于51单片机的电子密码锁按键设置6位密码,输入密码若密码正确,则锁打开。显示open!
密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。
1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open!
2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。
3.若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
4.24C02有复位、掉电保存密码功能
按键排列方式: 1 2 3 A
4 5 6 B
7 8 9 C
* 0 # D
ABC无定义、 *号键为取消当前操作、#号键为确认、D键为修改密码自己焊接的电路,首次使用时输入:131420,对密码进行初始化,当显示:initpassword,证明密码初始化完成,此时的密码为:000000。然后可以改密了
按下 * 键或复位键,可以关锁并退出。当输入密码错误后,报警并锁定键盘3秒钟。
修改密码:在开锁状态下,再次输入正确的密码并按下 # 键,此时听到两声提示,输入新的六位密码并按 D 键,再重复输入一次新密码并按 D ,会听到两声提示音,表示重设密码成功,内部保存新密码并存储。如两次输入的新密码不一样,则重设密码失败。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
//包含头文件
#include #include //宏定义 #define LCM_Data P0 //将P0口定义为LCM_Data #define uchar unsigned char #define uint unsigned int //1602的控制脚 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 = P3^6; //开锁 bit pass=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]={0,0,0,0,0,0}; //读取EEPROM密码暂存数组 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}; //输入管理员密码后将密码初始为000000 unsigned char code adminpassword[6]={1,3,1,4,2,0}; //输入管理员密码后将密码初始为000000 //=====================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;i<125;i++) {;} } } void Nop(void) //空操作 { _nop_(); //仅作延时用一条语句大约1us _nop_(); _nop_(); _nop_(); } /*****24c02程序参照24c02时序图*****/ /*起始条件*/ 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; } /*发送数据子程序,Data为要求发送的数据*/ void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; //将待发送数据暂存temp Scl=0; Nop(); if((temp&0x80)==0x80) //将读到的数据&0x80 Sda=1; else Sda=0; Scl=1; temp=Data<<1; //数据左移 Data=temp; //数据左移后重新赋值Data BitCounter--; //该变量减到0时,数据也就传送完成了 } 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) //数据位是否为1 temp=temp|0x01; //为1 temp的最低位为1(|0x01,就是将最低位变为1)
上一篇:谈51单片机实物与仿真差异
下一篇:能够实现单片机计算器与LCD1602字幕滚动的源程序
推荐阅读
史海拾趣
首先,需要澄清的是,直接关于“General Electric Solid State”公司的发展故事在现有的参考资料中并不详尽,因为“General Electric Solid State”可能并不是一个独立的公司名称,而是指通用电气公司(General Electric Company,简称GE)在固态技术或固态电子领域的业务或产品部门。以下是根据通用电气公司在电子行业,特别是固态技术领域的发展历程,提炼出的五个相关故事:
1. 固态技术的早期探索
背景:在20世纪中后期,随着半导体技术的飞速发展,通用电气公司(GE)作为电气行业的领导者,迅速投入到了固态技术的研发中。这一时期,GE的工程师们致力于开发更高效的固态器件,如晶体管、集成电路等,以替代传统的电子管设备。
发展:GE的研究团队在固态材料的选择、制造工艺的优化以及性能提升方面取得了显著进展。这些成果不仅推动了GE自身产品的升级换代,也为整个电子行业向固态化、集成化方向发展奠定了基础。
2. 固态器件在电力系统中的应用
背景:电力系统是GE的传统优势领域之一。随着固态技术的成熟,GE开始将固态器件应用于电力系统中,以提高电力系统的效率和可靠性。
应用:GE研发了一系列基于固态技术的电力电子设备,如固态继电器、固态断路器、固态变压器等。这些设备在电力系统中扮演着重要角色,能够有效减少能源损耗、提高电力传输效率,并增强电力系统的稳定性和安全性。
3. 固态照明技术的突破
背景:通用电气公司的创始人托马斯·爱迪生因发明电灯而闻名于世。进入21世纪后,GE继续在照明领域深耕,将固态技术应用于照明产品中。
成果:GE成功推出了LED(发光二极管)照明产品,这些产品具有能效高、寿命长、环保等优点。GE的LED照明技术不仅应用于家庭和商业照明领域,还广泛应用于户外照明、工业照明等多个场景,为全球节能减排事业做出了贡献。
4. 固态传感器与工业自动化
背景:随着工业自动化水平的不断提高,对传感器的精度、稳定性和可靠性提出了更高的要求。GE凭借其在固态技术方面的积累,开始研发高性能的固态传感器。
应用:GE的固态传感器在工业自动化领域得到了广泛应用,如温度传感器、压力传感器、加速度传感器等。这些传感器能够实时监测设备的运行状态和环境参数,为工业自动化控制提供精准的数据支持。
5. 固态技术在医疗设备中的创新
背景:医疗设备对技术的要求极高,尤其是在精确性和可靠性方面。GE作为医疗设备领域的领军企业之一,不断将固态技术引入医疗设备的研发中。
创新:GE利用固态技术开发出了一系列创新的医疗设备,如固态成像设备(如CT、MRI等)、固态激光治疗器等。这些设备在医疗诊断、治疗等方面发挥了重要作用,提高了医疗服务的效率和质量。
请注意,以上故事是基于通用电气公司在电子行业,特别是固态技术领域的整体发展历程进行提炼的。由于“General Electric Solid State”并非一个明确的公司名称,因此故事中的具体细节可能需要根据GE的实际情况进行适当调整和补充。
经过多年的发展,Holy Stone成为国内少数涵盖主、被动双通路并拥有制造工厂的多元化公司。公司不仅代理多家国际知名半导体零组件,还通过自主研发和生产,为客户提供完整的解决方案及多样性零组件。这一双通路战略使得Holy Stone能够在激烈的市场竞争中保持领先地位,并成功实现全球布局。公司的产品广泛应用于消费电子、汽车电子等多个领域,满足了全球客户的多样化需求。
随着全球化进程的加速,“未来电子”意识到单一市场已无法满足公司的长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,积极拓展国际市场。在欧洲、北美和亚洲等地,“未来电子”的产品和服务得到了广泛认可,市场份额逐年攀升。这一战略不仅提升了公司的国际影响力,还为公司的持续增长提供了强劲动力。
Auctor Corp公司深知品质是企业生存和发展的关键。因此,公司从原材料采购、生产流程控制到产品出厂检验,每一个环节都严格把控品质。同时,公司还建立了完善的品质管理体系,通过持续改进和优化生产流程,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Auctor Corp的产品在市场上赢得了良好的口碑。
在追求商业成功的同时,CTS也高度重视可持续发展和社会责任。公司致力于推动绿色生产和环保理念,采用环保材料和节能技术,减少对环境的影响。此外,CTS还积极参与社会公益活动,回馈社会,为社区的繁荣和发展贡献力量。
这些故事框架仅是对CTS Corporation公司可能的发展历程的一种推测和概述,具体的细节和内容需要根据实际情况进行补充和完善。希望这些框架能够为您撰写具体的发展故事提供一些灵感和帮助。
在市场竞争日益激烈的背景下,Astro Tool Corp公司始终坚持以创新驱动发展。公司不断投入研发资金,引进先进技术和设备,推出了一系列具有创新性和竞争力的新产品。这些产品不仅满足了客户日益多样化的需求,也为公司带来了可观的利润。同时,公司还注重人才培养和团队建设,打造了一支高效、专业的研发团队,为公司的持续发展提供了有力保障。
[转帖]我来说说讨厌的51芯片吧 我用了很久51芯片,本来对它的功耗非常不满,但是因为其价格越来越便宜,本身的性价比依旧很好,所以总也甩不掉。 1、休眠。一般的系统都不会到了忙不过来的地步,适当的休眠还是可以节省一些功耗的,在一些简单 ...… 查看全部问答∨ |
求高手帮忙画个!EDA或其他的!电气图!截图发我 !谢谢啊!XIONGYAQI@126.COM 求高手帮忙画个!EDA或其他的!电气图!截图发我 !谢谢啊!XIONGYAQI@126.COM… 查看全部问答∨ |
我有个ca卡,mmc接口 winxp上,接个usb的读卡器,显示盘符H: 我用createfile("\\\\\\\\.\\\\H:",...); 可以正常操作,reset, read,write都正常。 write一个命令,可以read一串返回值, 现在想在arm wince5平台下操作它, 我用crea ...… 查看全部问答∨ |
我用Keil IDE 公司提供的AGDI接口实现Debugger,现在遇到一个问题非常棘手?想问下大家? 现在大部分功能都实现了,就差Watch Breakpoint,(即Access BreakPoint,有Read,Write属性),其他的断点也都OK了。为什么我实现不了它呢?有这样一个问题: ...… 查看全部问答∨ |
为什么我的显示总为零,大伙看看.以下是我的程序: #include "reg52.h" #include "absacc.h" #include "math.h" #define uchar unsigned char #define uint unsigned int #define dm XBYTE[0x8000] #defi ...… 查看全部问答∨ |
|
那位大侠可以帮忙么? 我在wince上加入了WEB内核,用ASP标准控件编写的网页,控件在WINCE 上显示不出来,但是用HTML控件编写网页控件可以显示出来,但是不能调用.dll,请问为什么?我的vs2005 和2440开发板 … 查看全部问答∨ |
ARM7 44b0,裸机调试。 在AXD下调试,RO Base参数设为0x0c008000 这是开发板的地址空间: nGCS0 [0x0000_0000]:FLASH(SST39VF1601) nGCS1 [0x0200_0000]:NANDFLASH(K9F2808) nGCS2 [0x0400_0000]:IDE/ATA nGCS3 [0x0600_0000]:RTL8019AS nGC ...… 查看全部问答∨ |