历史上的今天
返回首页

历史上的今天

今天是:2024年11月27日(星期三)

正在发生

2020年11月27日 | 51单片机设计的电子密码锁

2020-11-27 来源:51hei

该程序是基于51单片机设计的电子密码锁,功能较为简单,目前仅有修改密码和检测这一功能,以下是操作过程

运行仿真的初始界面

左边矩阵按键从左边第一行第一列起为0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

按下按键后界面如下,当四位数码管都显示后,按下矩阵键盘上任意按键确认密码

密码错误D1红灯亮起,密码正确D2绿灯亮起

当按下独立按键时,中断触发,进入密码修改,此时界面如同初始界面,输入原始密码,原始密码正确,绿灯亮起,等待输入新密码,此时界面显示原始密码。原始密码错误红灯亮起,退出修改,返回初始状态。

新密码输入会将原始密码覆盖,输入完成红绿灯同时亮起。

1s后返回初始界面,密码修改完成。


单片机源程序如下:

#include "reg51.h"          //包含头文件


#define uchar unsigned char

#define uint unsigned int


#define DIG P0

#define keys P1


sbit LSA=P2^1;

sbit LSB=P2^2;

sbit LED_Green=P2^3;

sbit LED_Red=P2^4;


uchar time=0,state;

uchar disp[4]={0xbf,0xbf,0xbf,0xbf};

uchar smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};        //数码管段选表,共阳数码管

uchar password[4]={0xf9,0xf9,0xa4,0x90};  //初始密码1129


void delay_ms(uint t);                //函数声明

void keys_scan();

void digdisp();

void Init();


void delay_ms(uint t)                 //延时函数

{

        uchar i;

        for(;t>0;t--)

        {

                for(i=0;i<125;i++);

        }

}


void keys_scan()                   //矩阵按键扫描

{

        uchar i,k;

        keys=0xf0;

        if(keys!=0xf0)

        {

                delay_ms(2);

                if(keys!=0xf0)

                {

                        switch(keys)                         //确定行

                        {

                                case(0x70):

                                        k=0;break;

                                case(0xb0):

                                        k=4;break;

                                case(0xd0):

                                        k=8;break;

                                case(0xe0):

                                        k=12;break;

                        }

                        keys=0x0f;

                        if(keys!=0x0f)                        

                        {

                                switch(keys)                //确定列

                                {

                                        case(0x07):

                                                         ;break;

                                        case(0x0b):

                                                k=k+1;break;

                                        case(0x0d):

                                                k=k+2;break;

                                        case(0x0e):

                                                k=k+3;break;

                                }

                        }

                        while(keys!=0x0f);                       //松手检测

                        disp[time]=smgduan[k];                //将键值对应的段选码送入显示数组

                        time++;                                               //按键次数检测

                        if((time>4)&&(state!=1))           //检测四位密码是否全部输入

                        {

                                time=0;

                                for(i=0;i<4;i++)

                                {

                                        if(disp[i]!=password[i])        //逐位检测输入密码是否正确

                                        {

                                                LED_Green=1;                        //输入密码不正确,红灯点亮

                                                LED_Red=0;

                                                break;

                                        }

                                        if(i==3)                                        //输入密码正确绿灯点亮

                                        {

                                                LED_Green=0;

                                                LED_Red=1;

                                        }

                                }

                                delay_ms(1000);                                        //延时1s

                        }

                }

        }

        digdisp();                                                                        //调用显示函数

}


void digdisp()                                                                        //数码管显示函数

{

        uchar i;

        for(i=0;i<4;i++)

        {

                switch(i)                                                                //采用24译码器,位选数码管

推荐阅读

史海拾趣

岑科(CENKER)公司的发展小趣事

为了实现更长远的发展,岑科在2004年决定进军生产制造领域。公司在深圳和广西设立了工厂,开始了自主生产制造之路。在这一过程中,岑科严格控制生产流程,灵活配置资源,并建立了严格的质量管理体系,以确保产品的高水平交付。通过自主研发和创新,岑科逐渐在生产制造领域取得了显著的成果,产品线不断扩展,市场份额也逐渐增加。

Aearo Technologies公司的发展小趣事

随着技术的不断进步,Aearo Technologies在能量控制领域取得了重大突破。公司研发的新型材料不仅能够有效控制噪声和振动,还能提高产品的耐用性和可靠性。这些技术优势使得公司的产品在航空航天、军用防护以及消费电子等多个领域得到了广泛应用。通过不断拓展市场,Aearo Technologies逐渐成为了能量控制技术的领导者。

Chipcera Technology Co Ltd公司的发展小趣事

人才是企业发展的核心动力。为了保持技术领先地位和市场竞争力,Chipcera高度重视人才引进和团队建设。公司积极招聘具有丰富经验和专业技能的人才,并为员工提供良好的工作环境和发展空间。同时,公司还定期组织各种培训和学习活动,提升员工的专业素养和创新能力。这些措施使得Chipcera的团队更加团结、高效,为公司的持续发展提供了有力保障。

Eink公司的发展小趣事
2001年6月,E-Ink再次宣布技术突破,推出了“Ink-in-Motion”技术,使得电子纸上可以显示活动影像。这一技术为电子纸的应用开辟了新的领域,如动态广告、电子书等。
Aydin Corp公司的发展小趣事

面对日益严峻的环境挑战和市场变化,Aydin Corp积极寻求可持续发展之路。公司致力于推广环保理念,采用环保材料和节能技术,降低生产过程中的能耗和排放。同时,Aydin Corp还加大在新能源、智能电子等领域的研发力度,为公司的未来发展做好充分准备。展望未来,Aydin Corp将继续秉持创新、品质、合作的理念,为电子行业的发展贡献更多的力量。

这些故事虽然基于假设,但反映了电子行业公司普遍面临的挑战和机遇。如需获取关于Aydin Corp公司的真实发展故事,建议直接访问其官方网站或查阅相关新闻报道。

Dino-Lite公司的发展小趣事

Dino-Lite公司自创立之初,就专注于数字显微镜技术的研发与创新。公司研发团队不断探索新技术,将传统显微镜与现代数字技术相结合,成功推出了一系列高性能、易用性强的Dino-Lite数字显微镜产品。这些产品以其高清画质、便捷操作和广泛适用性,迅速赢得了市场的认可。

随着技术的不断进步,Dino-Lite公司不断推出新产品,满足了不同行业对数字显微镜的需求。例如,公司针对医疗领域推出了高分辨率、低光环境下的专业显微镜,为医疗诊断和治疗提供了有力支持;同时,针对教育行业推出了性价比高的入门级产品,让更多的学生和老师能够接触和使用到先进的显微镜技术。

问答坊 | AI 解惑

电赛A题讨论 资料分享

本帖最后由 paulhyde 于 2014-9-15 03:12 编辑 电赛A题讨论 资料分享 顺便求个QQ群    …

查看全部问答>

希望大家多提些问题

我做了这个版块的版主,就希望能够做好。 现在基本上都是我想起什么,再说几句。希望大家多提些工作上的问题,不一定是自己的,也可以是看到别人的,或者是有疑惑的,拿出来做为案例一起分析讨论。这样更有的放矢,大家的收获更大些。…

查看全部问答>

最近两个月模拟工作面对的一些比较深思的面试题

最近两个月模拟工作面对的一些比较深思的面试题 希望能给还没有毕业的童鞋一些帮助 1, 相近的尺寸下,为什么BJT的工作工作频率比CMOS的高,噪声低。从器件的角度分析 2,ESD电路起作用的时候,放电回路的电路图和结构以及版图实现原理 3,verti ...…

查看全部问答>

结合DPA和IBA优势的隔离DC-DC转换器

一篇不错的技术应用文章,与大家分享一下 作者:N. Smithfield , R.I., USA   来源:C. R. Swartz Picor公司 简介      先进的电信与无线架构、网络与通信技术及高速服务平台等终端系统需要持續不斷的改善良更新產品, 隨着市場 ...…

查看全部问答>

网上出现另类智林STM32开发板的抄板

真正智林板,做工精良出口日,韩,新,台,美,印。。。 以下是最近出现抄板,好像没抄好^_^ …

查看全部问答>

弱弱的问:想做EVC开发需要在xp下装哪些开发环境啊

我想用evc做开发,要装些什么开发环境啊,我刚刚接触,什么都不知道,希望指点指点,谢谢拉。…

查看全部问答>

Cortex-M3 ARM太好使了~

  夸一夸新内核.  眼看ZLG和ST推Cortex-M3内核好一阵子了,虽然看上去美,但已经比较深入地搞过51,PIC,430和ARM7,手里又有TI的DSP和coldfire等新玩意尚待深入研究,实在没精力也没必要去学习新东西了。  偏巧聚会抽到了个ST的mini套件 ...…

查看全部问答>

关于运算放大电路中噪声的计算(TI)

[ 本帖最后由 snakebyk 于 2011-8-20 20:25 编辑 ]…

查看全部问答>

软串口发送错误

我编写了一个PIC18F4580的模拟串口发送程序,用的是RC1脚,用三倍率采样,trm0高优先级定时中断,定时器初值是正确的,可是第一个数字总是重复发送,后面的数字发送正常,不知是哪里的毛病?…

查看全部问答>