矩阵式键盘实现的电子密码锁

news2024/11/18 9:28:31

#include<reg51.h>   //包含51单片机寄存器定义的头文件
sbit P14=P1^4;      //将P14位定义为P1.4引脚
sbit P15=P1^5;      //将P15位定义为P1.5引脚
sbit P16=P1^6;      //将P16位定义为P1.6引脚
sbit P17=P1^7;      //将P17位定义为P1.7引脚
sbit sound=P3^7;    //将sound位定义为P3.7
unsigned char keyval;    //储存按键值
/**************************************************************
函数功能:延时输出音频
**************************************************************/
 void delay(void)   
{
   unsigned char i;
    for(i=0;i<200;i++)
             ;
 }

/**************************************************************
函数功能:软件延时子程序
**************************************************************/
 void delay20ms(void)   
{
   unsigned char i,j;
    for(i=0;i<100;i++)
     for(j=0;j<60;j++)
           ;
 }
/**************************************************************
函数功能:主函数
**************************************************************/ 
 void main(void)
 {
   unsigned char D[ ]={0,8,0,8,7,4,11};      //设定密码
   EA=1;                  //开总中断
    ET0=1;                 //定时器T0中断允许         
    TMOD=0x01;            //使用定时器T0的模式1
    TH0=(65536-500)/256;  //定时器T0的高8位赋初值
    TL0=(65536-500)%256;  //定时器T0的高8位赋初值
    TR0=1;                //启动定时器T0
    keyval=0xff;          //按键值初始化
    
    while(keyval!=D[0])   //第一位密码输入不正确,等待
         ;         
    while(keyval!=D[1])   //第二位密码输入不正确,等待
         ;
    while(keyval!=D[2])   //第三位密码输入不正确,等待
         ;    
    while(keyval!=D[3])   //第四位密码输入不正确,等待
         ;
    while(keyval!=D[4])   //第五位密码输入不正确,等待
         ;
    while(keyval!=D[5])   //第六位密码输入不正确,等待
         ;   
    while(keyval!=D[6])  //没有输入“OK”,等待
       ;         
     P3=0xfe;           //P3.0引脚输出低电平,点亮LED

}
/**************************************************************
函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位
**************************************************************/ 
  void time0_interserve(void) interrupt 1 using 1    //定时器T0的中断编号为1,使用第一组寄存器
  {
     unsigned char i;
     TR0=0;                  //关闭定时器T0      
     P1=0xf0;                 //所有行线置为低电平“0”,所有列线置为高电平“1”
      if((P1&0xf0)!=0xf0)      //列线中有一位为低电平“0”,说明有键按下
         delay20ms();           //延时一段时间、软件消抖
      if((P1&0xf0)!=0xf0)      //确实有键按下
        {
           P1=0xfe;             //第一行置为低电平“0”(P1.0输出低电平“0”)
           if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”
             keyval=1;            //可判断是S1键被按下
           if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”
             keyval=2;            //可判断是S2键被按下
           if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”
             keyval=3;            //可判断是S3键被按下
           if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”
             keyval=4;           //可判断是S4键被按下

           P1=0xfd;             //第二行置为低电平“0”(P1.1输出低电平“0”)
          if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”
             keyval=5;            //可判断是S5键被按下
           if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”
             keyval=6;            //可判断是S6键被按下
           if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”
             keyval=7;            //可判断是S7键被按下
           if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”
             keyval=8;           //可判断是S8键被按下
        
           P1=0xfb;             //第三行置为低电平“0”(P1.2输出低电平“0”)
        if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”
             keyval=9;          //可判断是S9键被按下
           if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”
             keyval=0;         //可判断是S10键被按下
           if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”
             keyval=11;        //可判断是S11键被按下
       if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”
                         keyval=12;        //可判断是S12键被按下
            
                       P1=0xf7;             //第四行置为低电平“0”(P1.3输出低电平“0”)
                    if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”
                         keyval=13;          //可判断是S13键被按下
                       if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”
                         keyval=14;         //可判断是S14键被按下
                       if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”
                         keyval=15;        //可判断是S15键被按下
                       if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”
                         keyval=16;        //可判断是S16键被按下
          for(i=0;i<200;i++)  //让P3.7引脚电平不断取反输出音频
           {
              sound=0;
              delay();
                 sound=1;
                 delay();
           }
        }
     TR0=1;                    //开启定时器T0
     TH0=(65536-500)/256;  //定时器T0的高8位赋初值
      TL0=(65536-500)%256;  //定时器T0的高8位赋初值         
 }


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1322693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新媒体宣传与广州迅腾文化传播有限公司:品牌知名度提升的新动力

新媒体宣传与广州迅腾文化传播有限公司&#xff1a;品牌知名度提升的新动力 随着科技的飞速发展和互联网的普及&#xff0c;新媒体已经成为现代社会不可或缺的一部分。新媒体平台具有传播速度快、覆盖面广的特点&#xff0c;为企业品牌宣传提供了前所未有的机会。广州迅腾文化…

黑马点评07 秒杀优化 加阻塞队列

实战篇-22.秒杀优化-异步秒杀思路_哔哩哔哩_bilibili 1.流程回顾 1.1超卖问题 判断秒杀时间&#xff0c;加乐观锁&#xff08;比较标记/版本&#xff09;&#xff0c;检查库存是否大于0 1.2一人一单问题 看看数据库里有没有这个这个人下的订单&#xff1a; 1.单机模式中…

自动化测试 (五) 读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置&#xff08;比如&#xff1a;IE的设置&#xff09;都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候&#xff0c;经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

第二百一十五回 如何创建单例模式

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"沉浸式状态样相关的内容&#xff0c;本章回中将介绍 如何创建单例模式.闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

@KafkaListener 注解配置多个 topic

见如下示例 主要见 KafkaListener 中 topics 属性的配置 其中 ${xxxx.topic1} 为从springBoot 配置文件中读取的属性值 KafkaListener(topics {"${xxxx.topic1}", "${xxxx.topic2}"}, groupId "${xxxx.groupId}",containerFactory "xxx…

易点易动打通OA系统,实现固定资产高效管理

近年来,随着信息化建设的不断深入,OA系统在企业管理工作中的应用也日趋广泛。传统的固定资产管理存在数据分散,管理效率低等问题。深度整合易点易动和OA系统,可以打通各系统之间的数据通道,实现固定资产通过OA系统的全流程管理。这不仅可以提升管理效率,减轻人工管理成本,也更方…

部署LVS的NAT模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Python-Selenium-使用 pywinauto 实现 Input 上传文件

当前环境&#xff1a;Win10 Python3.7 pywinauto0.6.8&#xff0c;selenium3.14.1 示例代码 from pywinauto import Desktop import osapp Desktop() dialog app[打开] dialog[Edit].set_edit_text(os.getcwd() .\\example-01.jpg) dialog[Button].click() 其他方法&…

接口测试的工具(3)----postman+node.js+newman

1.安装newman&#xff1a;输入命令之后 一定注意 什么都不要操作 静静的等待结束就行了。 2.安装失败的对此尝试不行 在用下面的方法 解压一下就行了 3.验证是否成功 多次尝试是可以在线安装成功的

SpringCloudAliBaba篇之Seata:分布式事务组件理论与实践

1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中&#xff0c;一个事务由一组SQL语句组成&#xff0c;事务具有4个属性&#xff1a;原子性、一致性、隔离性、持久性。这四个属性通常称为ACID原则。 原子性(atomici…

在非联网、无网络环境下,fpm的安装和生成RPM包的使用案例

文章目录 前言1、安装fpm1.1、安装Ruby环境1.2、gem 安装 fpm 2、fpm使用2.1、fpm常用参数2.2、fpm使用案例2.2.1、fpmFirstDemo文件夹2.2.3、编写脚本文件2.2.4、生成RPM包2.2.5、RPM安装与卸载测试 前言 由于fpm采用Ruby语言开发&#xff0c;因此在使用之前需要先在您的虚拟…

AI日报:OpenAI扩大创业基金计划

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 OpenAI拓宽Converge启动程序变压器模型背后的思想建立启动融资新闻AutoGen AI支点其他 OpenAI拓宽Converge启动程序 ChatGPT制造商OpenAI正在扩大其Converge AI创业计划。 OpenAI的Converge产品于2022年12月首次…

力扣225. 用队列实现栈【附进阶版】

文章目录 力扣225. 用队列实现栈示例思路及其实现两个队列模拟栈一个队列模拟栈 力扣225. 用队列实现栈 示例 思路及其实现 两个队列模拟栈 队列是先进先出的规则&#xff0c;把一个队列中的数据导入另一个队列中&#xff0c;数据的顺序并没有变&#xff0c;并没有变成先进后…

【Python】—— 如果使用matplotlib做数据可视化

matplotlib做数据可视化 相关知识掌握matplotlib的基本使用方法1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图6. 等高线图7. 图形定制 掌握数据处理的基本方法1. 数据筛选2. 缺失值处理3. 异常值处理 理解数据可视化的原则和方法1. 选择合适的图表类型2. 避免数据混淆3. 突出重…

继电器的工作原理及驱动电路

继电器是具有隔离功能的自动开关元件&#xff0c;广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电了设备中&#xff0c;是最重要的控制元件之一。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。…

camera曝光时间

曝光和传感器读数 相机上的图像采集过程由两个不同的部分组成。第一部分是曝光。曝光完成后&#xff0c;第二步就是从传感器的寄存器中读取数据并传输&#xff08;readout&#xff09;。 曝光&#xff1a;曝光是图像传感器进行感光的一个过程&#xff0c;相机曝光时间&#xf…

《PySpark大数据分析实战》-12.Spark on YARN配置Spark运行在YARN上

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

创建型设计模式 | 原型模式

一、原型模式 1、原理 原型模式&#xff0c;用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需要知道任何创建的细节。原型像是一个模板&#xff0c;可以基于它复制好多…

Leetcod面试经典150题刷题记录 —— 双指针篇

双指针篇 1. 验证回文串Python3 2. 判断子序列Python3双指针 3. 两数之和 II - 输入有序数组Python3 4. 盛最多水的容器Python3双指针 5. 三数之和 1. 验证回文串 题目链接&#xff1a;验证回文串 - leetcode 题目描述&#xff1a; 如果在将所有大写字符转换为小写字符、并移除…

支持可视化提取变量,Apipost配置变量不要太简单

在调试接口时我们需要将响应结果中的某个字段配置为环境变量在其他接口中引用&#xff0c;之前在Apipost中需要配置脚本而在最近Apipost后执行操作中可以进行可视化的断言和变量提取&#xff0c;无需配置繁琐脚本。 这里我们在登录接口下配置一条Token环境变量&#xff0c;在后…