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

#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.hqwc.cn/news/288309.html

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

相关文章

英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案

12月13-14日&#xff0c;“凝心聚力&#xff0c;共赢计算新时代”——2023计算产业生态大会在北京香格里拉饭店成功举办。英码科技受邀参加行业数字化分论坛活动&#xff0c;市场总监李甘来先生现场发表了题为《AI哨兵&#xff0c;为铁路安全运营站好第一道岗》的精彩主题演讲&…

ROS学习笔记(七)---参数服务器

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序&#xff08;简例&#xff09; 03. ROS学习笔记(三)—好用的终端Terminator 04. ROS学习笔记(四)—使用 VScode 启动launch文件运行多个节点 05. ROS学习笔…

探索 Vue3 (二) 插槽slot

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标签。 匿名插槽 在子组件…

Linux上随机输出谚语的程序fortune

概要&#xff1a; Linux上有一个随机输出谚语的程序叫fortune 手册对它的描述是&#xff1a;输出一个随机的、充满希望的、有趣的谚语 本篇所用的系统是Ubuntu22.04 一、fortune的安装 sudo apt install fortune-mod 二、fortune的使用 1、示例一 这个谚语是什么意思啊…

【MongoDB】--MongoDB的Sort排序问题

目录 一、问题背景描述1.1、问题背景1.2、问题分析 二、建立索引支持深度翻页查询2.1、调整sort排序的内存限制【不建议】2.2、创建索引2.3、拓展--组合索引什么时候失效 二、聚合查询解决深度翻页查询 一、问题背景描述 1.1、问题背景 现实系统页面翻页到20000页之后&#x…

研发管理-代码管理篇

前言&#xff1a; 工作了这些年&#xff0c;工作了三家公司&#xff0c;也用过主流的代码管理平台&#xff0c;比如SVN&#xff0c;git系列&#xff08;gitlib,gitee&#xff09;,各有优点&#xff0c;我个人比较喜欢SVN&#xff0c;多人协作的代码管理难免会有代码冲突&#…

Iview Tooltip显示不换行,被遮挡

部分使用slot 方式无法解决 <Tooltip placement"top"> <Button>多行</Button> <div slot"content"> <p>显示多行信息</p> <p><i>可以自定义样式</i></p> </div> </Tooltip> 所以…

在使用mapstruct,想忽略掉List<DTO>字段里面的,`data` 字段的映射, 如何写ignore: 使用@IterableMapping

在使用mapstruct,想忽略掉List字段里面的,data 字段的映射, 如何写ignore 代码如下: public interface AssigmentFileMapper {AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);AssigmentFile assigmentFileDTOToAssigmentFile(Assigment…

四川云汇优想教育咨询有限公司电商服务靠谱吗

随着抖音电商的兴起&#xff0c;越来越多的商家开始关注这一领域。四川云汇优想教育咨询有限公司作为一家专注于电商服务的企业&#xff0c;也受到了广泛的关注。那么&#xff0c;四川云汇优想教育咨询有限公司的抖音电商服务靠谱吗&#xff1f;下面我们将从多个方面进行深入剖…

python官网下载步骤图解,python官方中文文档下载

这篇文章主要介绍了python官网下载步骤图解&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1.进入官网&#xff0c;选择自己所需要的版本 官网地址&#xff1a;Download Pytho…

【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found

文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一&#xff0c;没有下载Nodejs&#xff1b;第二&#xff0c;有没有在VScode中配置Nodejs第三&#xff0c;力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一&#xff1a;…

什么是嵌入式板卡?

嵌入式板卡是配备处理器、各种集成电路、接口和其他关键组件的电路板&#xff0c;所有这些组件都组装起来以执行特定功能。如USB、Ethernet、串口、GPIO等&#xff0c;以便连接外部设备和传感器。它们还可能包括扩展插槽&#xff0c;以便添加额外的功能或定制化的接口。总之&am…