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

#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.mzph.cn/news/233043.shtml

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

相关文章

[AutoSar]基础部分 RTE 01 介绍

目录 关键词平台说明一、什么是RTE二、RTE的主要功能 关键词 嵌入式、C语言、autosar、EcuM、wakeup、flex 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、什么是RTE RTE&#xff08;Run-Time Environment&…

【python】进阶--->并发编程之线程(二)

一、线程的生命周期 新建 : 创建线程经过初始化,进入就绪状态 就绪 : 等待操作系统调度,调度后进入运行状态运行 阻塞 : 暂停运行,解除阻塞后进入就绪等待重新调度 消亡 : 线程执行完毕或者异常终止 可能有3种情况从运行到阻塞 : 同步 : 线程中获取同步锁,但是资源已经被其他…

车辆跟踪及测距

车辆跟踪及测距是一种现代化的技术手段&#xff0c;通过使用各种传感器和技术设备&#xff0c;能够实现车辆的实时监控和测距。这些技术手段包括GPS全球定位系统、雷达、激光等&#xff0c;它们可以帮助我们更好地了解车辆的位置和行驶情况。在本文中&#xff0c;我们将从以下几…

LeetCode - 460 LFU缓存(Java JS Python)

题目来源 460. LFU 缓存 - 力扣&#xff08;LeetCode&#xff09; 题目描述 请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key)…

【迁移学习论文四】Multi-Adversarial Domain Adaptation论文原理及复现工作

Multi-Adversarial Domain Adaptation 多对抗域适应 前言 好久没有更新了&#xff0c;所以这周开始记录下来&#xff0c;也好督促自己。记录本人预备研究生阶段相关迁移学习论文的原理阐述以及复现工作。 问题 跨域混淆或错误对齐 文章介绍 这篇文章于2018年发表在AAAI&…

手把手教你使用Cypress进行端到端测试

一、引言 Cypress是一个流行的端到端测试框架&#xff0c;它提供了一个全面的解决方案&#xff0c;可以测试任何在浏览器中运行的内容。不论你是想为一个小型项目添加测试&#xff0c;还是在大型企业级应用中进行端到端测试&#xff0c;Cypress都是一个不错的选择。本文将会手…

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定…

国家开放大学 河南开放大学形成性考核 平时作业 统一参考资料

试卷代号&#xff1a;1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题&#xff08;每小题2分&#xff0c;共计40分&#xff09; 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

评价机器学习模型的指标

为了衡量一个机器学习模型的好坏&#xff0c;需要给定一个测试集&#xff0c;用模型对测试集中的每一个样本进行预测&#xff0c;并根据预测结果计算评价分数。 对于分类问题&#xff0c;常见的评价标准有准确率、精确率、召回率和F值等。给定测试集 &#x1d4af; {(&#x1…

一款电压检测LVD

一、基本概述 The TX61C series devices are a set of three terminal low power voltage detectors implemented in CMOS technology. Each voltage detector in the series detects a particular fixed voltage ranging from 0.9V to 5.0V. The voltage detectors consist…

git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

git新建库与本地库同步 gitee使用教程&#xff0c;git的下载与安装接不在叙述了。 新建远程仓库 新建远程仓库必须要使用仓库提供的api&#xff0c;也就是仓库门户网站&#xff0c;例如gitee&#xff0c;github&#xff0c;gitlab等。在上图中使用gitee网址中新建了一个test仓…

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍…

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器&#xff08;组件内状态&#xff09;&#xff0c;接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 说明&#…

10分钟微调专属于自己的大模型

本文主要介绍使用魔搭社区轻量级训练推理工具SWIFT&#xff0c;进行大模型自我认知微调&#xff0c;帮助初阶炼丹师快速微调出专属于自己的大模型。 SWIFT&#xff08;Scalable lightWeight Infrastructure for Fine-Tuning&#xff09;是魔搭ModelScope开源社区推出的一套完整…

泰坦陨落2找不到msvcr120文件的修复方法,分享多种解决方法

在玩泰坦陨落2这款游戏时&#xff0c;有些玩家可能会遇到找不到msvcr120.dll文件的问题。这个问题可能是由于游戏缺少必要的运行库导致的。下面我将分享一些解决这个问题的方法&#xff0c;希望对大家有所帮助。 一、问题分析 msvcr120.dll是Microsoft Visual C Redistributab…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此&#xff0c;请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中&#xff0c;双击 MPC 控制器模块。…

Vue中英文翻译小结

背景&#xff1a;时局艰难&#xff0c;后端开发被强制写了vue&#xff0c;这不有个需求是中英文翻译&#xff0c;特此记录下&#xff0c;该怎么个翻译法子。 先引入全局的路由国际化文件&#xff0c;zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

LazyIDA源码阅读

LazyIDA是一款IDA插件&#xff0c;项目地址GitHub - L4ys/LazyIDA: Make your IDA Lazy! 外部引用 from __future__ import division from __future__ import print_function from struct import unpack import idaapi import idautils import idcfrom PyQt5.Qt import QAppli…

vue中的事件修饰符、表单双向数据绑定和计算属性

目录 一、事件修饰符 二、表单双向数据绑定 模拟双向数据绑定&#xff08;双向数据绑定底层原理&#xff09; 三、计算属性 计算属性和methods方法区别&#xff1f; 计算属性和watch区别&#xff1f; 一、事件修饰符 stop 阻止事件冒泡 prevent 阻止事件默认行为 ca…

Linux线程——互斥锁

概念 互斥量&#xff08;mutex&#xff09;从本质上来说是一把锁&#xff0c;在访问共享资源前对互斥量进行加锁&#xff0c;在访问完成后释放互斥量上的锁。对互斥量进行加锁后&#xff0c;任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。 如果释放…