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

#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种情况从运行到阻塞 : 同步 : 线程中获取同步锁,但是资源已经被其他…

【mysql】 mysql什么情况下不走索引,会发生索引失效?

使用函数或表达式进行查询有时候,在查询条件中使用函数或表达式可能导致索引失效。让我们看一个例子: SELECT * FROM users WHERE UPPER(name) = JOHN;在这个查询中,我们使用了UPPER函数将name列的值转换为大写,并与字符串JOHN进行比较。由于函数UPPER的存在,MySQL无法直…

【C语言】6-6 数组循环右移 分数 20

6-6 数组循环右移 分数 20 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 本题要求实现一个对数组进行循环右移的简单函数&#xff1a;一个数组a中存有n&#xff08;>0&#xff09;个整数&#xff0c;将每个整数循环向右移m&#xff08;≥0&#xff09;个位置&…

css中定位方式

一、静态定位&#xff08;static&#xff09;&#xff1a; 元素的默认定位方式&#xff0c;元素按照正常文档流排列。 left、top、right、bottom等属性对该元素无效&#xff0c;不会受到定位属性的影响。 二、相对定位&#xff08;relative&#xff09;&#xff1a; 通过设…

车辆跟踪及测距

车辆跟踪及测距是一种现代化的技术手段&#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)…

面试题总结(九)【Linux操作系统】【华清远见西安中心】

Linux的组成部分是什么&#xff1f; Linux 是一个开源的操作系统内核&#xff0c;它是一个底层的软件&#xff0c;可以作为操作系统的核心来运行。除了内核之外&#xff0c;Linux 操作系统通常还包括以下组成部分&#xff1a; 1. Shell&#xff1a;Shell 是用户与操作系统进行交…

【迁移学习论文四】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开源社区推出的一套完整…

大数据背景下的教育培训流动机构分析探究代码

针对大数据背景下教育培训流动机构的分析探究&#xff0c;首先需要搜集相关数据&#xff0c;例如学生信息、课程信息、培训机构信息等&#xff0c;然后通过数据分析和可视化工具进行探索性分析和建模。以下是一个简化的示例&#xff0c;展示如何使用Python的Pandas和Matplotlib…

C++snprintf和stringstream,一篇就够啦!

文章目录 前言snprintf()sstreamstr()的使用clear()的使用 对于stringstream的疑惑 前言 最近写了一个Github的CJson解析器&#xff0c;这是其中遇到的一个问题&#xff0c;在查询大量资料之后编写了这篇文章。 snprintf() 这个函数位于头文件cstdio中&#xff0c;我们先来看…