要求:

设计一个电子密码锁

  1. 输入密码即可开锁,可删除信息,可通过输入123456789ABCDEF等字符
  2. 密码错误发出警报
  3. 用LCD1602显示相关信息

当输入正确时 D2会亮灯,表示输入正确

密码输入错误时蜂鸣器会发出警报

部分程序:

#include <reg52.h>

typedef unsigned char u8;

typedef unsigned int u16;

//sbit 特殊功能位声明:声明某特殊功能寄存器中的一位

#define key P1                     //按键io口

sbit fen=P3^0;                     //蜂鸣器io口

sbit rs=P3^1;        //LCD控制口

sbit rw=P3^2;

sbit e=P3^3;

sbit led=P3^4;       //LED灯io口

//bit 位变量声明:定义一个位变量的值

u8 keyz=17,j=0,biao1=0,a=10,b=10,c=10,d=10;

bit biao=0;

u16 zh;

u8 shu[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,

0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};

u8 zi[]={"lnput password:"};

u8 num[]={"0123456789ABCDEF"};

void delay(u16 i){

while(i--);

}

/*蜂鸣器*/

void Fen(u8 a,b)   //蜂鸣器发声函数

{

u8 i,j;

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

{

for(j=0;j<100;j++)

{fen=~fen;delay(b);}

}

}

/*LCD*/

void writecom(u8 com){                  //LCD写指令

rs=0;

rw=0;

e=0;

P0=com;

delay(5);

e=1;

e=0;

}

void writedat(u8 dat){             //LCD写数据

rs=1;

rw=0;

e=0;

P0=dat;

delay(5);

e=1;

e=0;

}

void initlcd(){                       //LCD初始化函数

writecom(0x38);   //显示模式设置

writecom(0x0c);

writecom(0x06);

}

void xian(){      //LCD显示数字函数

writedat(num[keyz]);

if(a==10){a=keyz; }                 //对abcd,四位数的单独赋值

else if(b==10){b=keyz;}

else if(c==10){c=keyz;}

else{d=keyz;}

if(j!=3){j++;}biao=0;

}

/*键盘*/

void Key(){u8 a=0;                    //矩形式键盘函数

if(key!=0x0f){delay(1000);

if(key!=0x0f){

key=0x0f;

switch(key){

case 0x07: keyz=0;biao=1;break;

case 0x0b: keyz=1;biao=1;break;

case 0x0d: keyz=2;biao=1;break;

case 0x0e: keyz=3;biao=1;break;

}

key=0xf0;

switch(key){

case 0x70: keyz=keyz;biao=1;break;

case 0xb0: keyz=keyz+4;biao=1;break;

case 0xd0: keyz=keyz+8;biao=1;break;

case 0xe0: keyz=keyz+12;biao=1;break;

}

}

while((a<50)&&(key!=0xf0)){a++;delay(10000);}

}

}

void shi(){u8 i;   // 按键值判断函数

if(biao&&keyz!=15){  //判断标志位biao是否为1,为1则有按键操作并且按键的值不等于15

writecom(0x80+0x40+j);                          //数字显示位置进行累加操作

if(j<0){j=0;}                                         //数字显示位置边界

switch(keyz){                                                     //switch判断按键并执行对应操作

case 0:xian(); break;

case 1:xian(); break;

case 2:xian(); break;

case 3:xian(); break;

case 4:xian(); break;

case 5:xian(); break;

case 6:xian(); break;

case 7:xian(); break;

case 8:xian(); break;

case 9:xian(); break;

case 10:writedat(num[keyz]);

j++;biao=0;break;

case 11:writedat(num[keyz]);

j++;biao=0;break;

case 12:

biao1=0;                                               //重置标志位biao1,上锁

biao=0;break;

case 13:writecom(0x01);        delay(1000);      //全屏清除

for(i=0;i<sizeof(zi);i++){

writecom(0x80+i);

writedat(zi[i]);                 }

j=0;biao=0;break;

case 14:                                                                         //对当前数字位删除的操作

writedat(' ');

j--;

writecom(0x80+0x40+j);writedat(' ');

biao=0;break;

case 15:                      //确定按键

j++;biao=0;break;

}

}

if(keyz==15){                                                               //判断按键值如果等于15,便视为按下确定键

writecom(0x01);delay(1000);

zh=a*1000+b*100+c*10+d;                                            //将ABCD,四位数合并并进行判断是否为正确密码

if(zh==1234){  //设密码为1234

j=0;

biao1=1;                                                                       //将biao1标志位置1便为密码正确

keyz=17;                                                                      //使按键值跳出最大值15便不会循坏显示

}

else{

j=0;

biao1=0;                                                                                     //反之密码错误

keyz=17;

Fen(20,200);                               //蜂鸣器报警

}

zh=0;a=10,b=10,c=10,d=10;                                     //重置ABCD变量

for(i=0;i<sizeof(zi);i++){

writecom(0x80+i);

writedat(zi[i]);                         }

}

}

内容包括:

需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

基于51单片机的电子密码锁设计相关推荐

  1. 基于51单片机的指纹密码锁设计

    目录 具体实现功能 设计介绍 单片机介绍 设计思路 资料内容 原理图 程序 仿真实现 全部资料 具体实现功能 具体功能: 本设计采用STC89C52.AT89C52.AT89S52作为主控芯片,LCD ...

  2. 基于51单片机的电子时钟设计

    基于51单片机的电子时钟设计 0 功能介绍 1.从DS1302中读取时间显示 2.一共4个按键,按键1按下进入修改时间模式,再按下切换修改的时间变量,这个时候第2和3个按键就是修改时间变量的按键,修改 ...

  3. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  4. 基于51单片机的电子万年历设计

    基于51单片机的电子万年历 1)LCD1602显示时间.日期.星期.温度 2)按键可调整时间日期星期 3)整点报时 4)DS1302时钟芯片 5)DS18B20温度传感器 6)闹钟功能 7)判断闰年 ...

  5. 电子密码锁课设单片机c语言,基于51单片机的电子密码锁综合课程设计

    5.大容量片内EEPROM,擦写次数10万次以上 EEPROM,擦写次数10万次以上,擦写次数10万次以上 6.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 7.共8通道10位高速A ...

  6. 基于51单片机智能电子密码锁的设计

    该题目是作者课程设计时所写题目,隔了段时间了,之前一直放到自己的网站上的,现在网站资源过期了,就放到这里保存了. 题目要求如下: 内容及要求 以MCS-51单片机为核心,设计一个通过面板键盘输入密码的 ...

  7. 【Proteus仿真】【51单片机】电子密码锁设计

    文章目录 一.功能简介 二.软件设计 三.实验现象 联系作者 一.功能简介 本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶.矩阵按键.蜂鸣器.EEPROM模块.继电器模块等. ...

  8. 基于51单片机的电子闹钟设计

    使用的单片机是  STC89C52 此设计可以    年 月 日   时 分 秒显示和闹钟功能      能通过8个按键自由调整 时 分 秒   闹钟响铃时间 带复位按键,要是模块抽风,摁复位按键即可 ...

  9. 毕业设计 - 基于51单片机的电子时钟设计与实现

    文章目录 单片机电子时钟程序设计 实现效果 最后 单片机电子时钟程序设计 共用体除非必要,否则学长不推荐使用,枚举的用法比较简单,在本书19章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使 ...

  10. 基于51单片机的电子秒表设计

    设计要求: 最多可记录十组数据 可删除其中多组数据 可上下查阅所记录的数据 数据通过lcd1602显示 计时精度到0.01s 由于并没有使用24c02,导致程序去数据较大,仿真可能不行.实际验证通过 ...

最新文章

  1. [原] 淘宝SKU组合查询算法实现
  2. EduCoder Linux 文件/目录管理
  3. ConcurrentHashMap的源码分析-扩容结束以后的退出机制
  4. C#使用Cookie方法
  5. 大数据相关技术说明(一)
  6. python如何导入多个文件_在python中导入多个文件
  7. 5. Browser 对象 - Screen 对象
  8. sklearn2pmml模型转化实践
  9. 算法详解_【MOT】详解SORT与卡尔曼滤波算法
  10. 没有IOMMU的DMA操作
  11. linux如何搭建sftp服务器
  12. SEO内容构建流程,SEO内容建设策略有哪些?
  13. arcgis字段计算器赋值_ArcGIS中62个常用应用技巧汇总【必须收藏】
  14. 农商银行计算机岗笔试题,广东农商银行金融科技岗笔试考什么?
  15. 电脑网易云音乐,网易云音乐的话题区到底有多魔性?
  16. 0315-HttpURLConnection和JASON结合使用(以天气预报为例)
  17. Pandas 函数方法汇总一览查询(持续补充改进)
  18. html标签生成的快捷键
  19. java使用poi导出ppt图表——环形图/空心饼图
  20. C语言中fclose函数

热门文章

  1. 新猿木子李:0基础学python培训教程 Python操作Redis之有序集合类型
  2. 猿创征文|Python基础——Visual Studio版本——第五章 文件I/O
  3. 如何通过C/C++求任意角度的余弦值
  4. 订单管理_02修改订单信息流程
  5. java 多线程 超时_【Java】Java多线程任务超时结束的5种实现方法
  6. 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置... 2
  7. c++ 11 for循环
  8. Everything+Wox
  9. 2023秋招—大数据开发面经—蚂蚁金融
  10. mysql5.7数据库mysqldump和XBK备份和恢复