单片机电子密码锁仿真 可修改密码

2020-11-21来源: 51hei关键字:单片机  电子密码锁  修改密码

单片机源程序如下:

#include

#include "delay_ms.h"

#include  "矩阵键盘.h"

#include "i2c.h"

#include "1602.h"

#include "delay_ms.h"

#include "mima.h"

#define uchar unsigned char

#define uint unsigned int

#define A 0x0a //输入密码

#define B 0x0b  //修改密码

#define D 0x0d //关锁

#define enter 0x0c //确认

#define backspace 0x0f //退格键

sbit baojing = P3^7; //蜂鸣器接口

sbit lock = P3^3;//锁信号

sbit set = P3^2;

uchar idata mima_5[6] = {1,2,3,4,5,6}; //初始密码

uchar flag_change;

uchar aa;//存放密码错误的次数,够三次报警

uchar bb;

uchar flag_t0;

void baoj1()//报警函数

{

        int i;

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

        {

                baojing = 1;

                delay_ms(5);

                baojing = 0;

                delay_ms(5);       

        }


}

void baoj()

{

        uchar i;

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

                baoj1();

}

/*密码处理函数*/

void mimachuli()

{

        uchar key,i;

        uchar idata mima_1[6]={' ',' ',' ',' ',' ',' '};//存放密码缓冲区

        uchar idata mima_2[6]={' ',' ',' ',' ',' ',' '};

        uchar idata mima_3[6]={' ',' ',' ',' ',' ',' '};


        key = step_choose();

        if(key == A)//A被按下,接收输入密码,处理

        {

                read_n_add(mima_1,0x00,6);

                write_com(0x06);//写一个字符后地址指针加 1

                write_com(0x01);//显示清零,数据指针清零

                write_com(0x0f);//显示光标

                lcd_pos(0,0);

                write_n_char(" press password ");               

       

                if(input_mima(mima_2)) //处理输入密码

                {

                        if(mimaduibi(mima_2,mima_1)) //密码正确

                        {

                                lcd_pos(0,0);

                                write_com(0x0c);

                        write_com(0x06);//写一个字符后地址指针加 1

                         write_com(0x01);//显示清零,数据指针清零

                                write_n_char(" password right ");

                                aa = 0; //清除密码错误次数

                                lock = 0; //开锁

                                baojing = 1; //响一下

                                delay_ms(1000);

                                baojing = 0;

                                TR0 = 1;

                                flag_t0 = 1;

                                while(key != D && flag_t0) //D没按下一直开

                                {                       

                                        key = keyscan();

                                }

                                TR0 = 0;

                                lock = 1;//D按下了关锁

                        }

                        else //密码 不正确

                        {

                                lcd_pos(0,0);

                                write_com(0x0c); //关光标

                                write_com(0x06);//写一个字符后地址指针加 1

                                write_com(0x01);//显示清零,数据指针清零

                                write_n_char(" password wrong");

                                delay_ms(1000);

                                aa++;

                                if(aa == 4)

                                {

                                        aa = 0;

                                    i = 20; //密码不正确报警

                                        while(i--)

                                         baoj();

                                }


                        }

                }

                else //密码没有输入正确或完成

                {

                        lcd_pos(0,0);

                        write_com(0x0c); //关光标

                   write_com(0x06);//写一个字符后地址指针加 1

                   write_com(0x01);//显示清零,数据指针清零

                        write_n_char(" password wrong");

                        delay_ms(1000);

                        aa++;

                        if(aa == 4)

                        {

                                aa = 0;

                            i = 20; //密码不正确报警

                                while(i--)

                                 baoj();

                        }


                }

        }


        if(key == B)//B被按下,修改密码

        {

                read_n_add(mima_1,0x00,6);

                write_com(0x06);//写一个字符后地址指针加 1

                write_com(0x01);//显示清零,数据指针清零

write_com(0x0f

[1] [2] [3] [4]
关键字:单片机  电子密码锁  修改密码 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic517315.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机,18B20,1602温度计+串口通信
下一篇:单片机+NRF2401+DHT11远程温湿度控制程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于51单片机控温程序及电路原理图
所需要 ** 的温度值。并且能够稳定在你所设定的温度下。当 ** 实际温度超过你设定的温度,蜂鸣器报警 。 ** ** 包括各个模块及详细的注释 ** 方便 C51 单片机入门级别者阅读 *电路原理图如下:
发表于 2020-11-04
基于51<font color='red'>单片机</font>控温程序及电路原理图
单片机+LCD12864数字电压表设计
单片机源程序如下://---库函数声明及相关定义---//#include <reg51.h>#include <intrins.h>#define unint unsigned int#define unchar unsigned char#define Databus P1 /*液晶数据总线*/sbit RS=P3^3;      /*数据指令 选择*/sbit RW=P3^4;      /*读写 选择*/sbit EN=P3^2;      /*读写使能*/sbit cs1=P3^6;   
发表于 2020-11-04
<font color='red'>单片机</font>+LCD12864数字电压表设计
51单片机控制模拟交通信号灯
采用单片机的I/O口PO口通过上拉电阻和交通灯相连接,P3.0、P3.1口接到数码管控制位上,控制数码管的显示,程序放在STC89C52RC单片机的ROM中,在十字路口的四组红、黄、绿交通灯中,由单片机的 P1.0-P1.2 、P1.5-P1.7、P2.0-P2.2、P2.5-P2.7控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极相连,因此I/0口输出低电平时,与之相连的指示灯会亮,并通过数码管显示时间倒计时。I/0口输出高电平时,相应指示灯会灭。当交通出现障碍需要恢复到初始状态时,按下复位键即可,此键由单片机的9脚RST键控制。制作出来的实物图如下:Altium Designer画的原理图和PCB图如下:(51hei
发表于 2020-11-04
51<font color='red'>单片机</font>控制模拟交通信号灯
风速风向传感器在单片机上的应用
/*本风速传感器采用小型直流有刷电机与三杯式旋转风杯组装  而成,其工作原理为,当环境有水平流动风时,旋转风杯能够产生旋转,并带动小型电机产生电压,其电压与旋转速度基本成正比。利用此信号电压,可以对环境风速进行测量。这款风速传感器采用海洋军用的高精度测量风速传感器,与传统产品先别,具有更高精度;是建筑机械(起重机、履带吊、门吊、塔吊)、铁路、港口、码头、风力发电、光伏发电、电厂、气象、索道、环境、温室、养殖等领域不可缺少的风速检测装置。用它可以实现设备风速指示数字化及自动化,是相关设备不可缺少的风速检测设备。*///使用该程序和电路再搭配我们的风速风向传感器就可以实时显示风速风向数据#冠拓电子#include <
发表于 2020-11-04
风速风向传感器在<font color='red'>单片机</font>上的应用
51单片机中的ROM和RAM分别是什么?
众所周知,51 内部的存储器分为数据存储器 RAM 和程序存储器 ROM。以 AT89c51 为例,其中有 128 字节随机存储器(又称数据储存器 RAM)和 4K 字节的只读存 储器(又称程序存储器 ROM)。先说说这个 4K 字节的程序存储器或者说只读存储器,我们写的程序经过编译器 编译成机器码都是存在这个区域,所以称为程序存储器;但单片机上电执行的时 候,此区域内的数据只能读取而不能写入,他的只读存储器的名称从这而来。89c51 的 ROM 采用的是 FPEROM(Flash Programmable and Erasable Read OnlyMemory),具体工艺我也不太清楚,号称可以擦写 1000 次,也就是说你每天
发表于 2020-11-04
Proteus超声波测距仿真电路图+单片机源程序
大多数人感觉超声波测距proteus仿真是无法实现的,虽然proteus自带的库有GUR03和SRF04两种模型,但是却与实际传感器使用方法相差甚远,即使求助度娘也很难找到简单易懂的教程。之前很多人想做超声波测距仿真但都没有找到很好的办法去实现,在软件里没有这样的元件,有人用一个按键开关去模拟仿真,这样仿真出来的效果,非常不好。还有人用555时基电路产生一个延时信号(555电路作为超声波仿真的内部元件),来模拟超声波头发送后遇到回波返射回来的这阶段时间,来对单片机超声波测距单片机系统进行模拟,能完成对超声波测距模块大致仿真,但需要繁杂的设计。下面是一个超声波测距模块的proteus模型,能直接用于proteus仿真,且使用方法
发表于 2020-11-04
Proteus超声波测距仿真电路图+<font color='red'>单片机</font>源程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved