32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波

13e51f367e99a246541d904909feb135.gif

  void Time0_serve(void ) interrupt 1 using 1  

  {

        TH0=(8192-C)/32;     //可证明这是13位计数器TH0高8位的赋初值方法

        TL0=(8192-C)%32;     //可证明这是13位计数器TL0低5位的赋初值方法

     sound=!sound;        //将P3.7引脚取反,输出音频方波

  }

/**************************************************************

函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位

**************************************************************/

  void time1_serve(void) interrupt 3 using 2    //定时器T1的中断编号为3,使用第2组寄存器

  {

     TR1=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=10;         //可判断是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键被按下

     }

}

     TR1=1;                    //开启定时器T1

     TH1=(65536-500)/256;  //定时器T1的高8位赋初值

  TL1=(65536-500)%256;  //定时器T1的高8位赋初值 

 }

//实例80:矩阵式键盘实现的电子密码锁

#include   //包含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位赋初值 

 }

/************************************************************************ **液晶显示LCD*********

8e1b91605cd53acfe2a090d7827f0a8e.png

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

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

相关文章

重定向地址_JavaWeb - Servlet:重定向和转发,状态管理

Servlet JDBC 应用在 Servlet 中可以使用 JDBC 技术访问数据库&#xff0c;常见功能如下&#xff1a;查询 DB 数据&#xff0c;然后生成显示页面&#xff0c;例如&#xff1a;列表显示功能。接收请求参数&#xff0c;然后对 DB 操作&#xff0c;例如&#xff1a;注册、登录、修…

摸底谷歌Gemini:CMU全面测评,Gemini Pro不敌GPT 3.5 Turbo

谷歌的 Gemini 到底几斤几两&#xff1f;和 OpenAI 的 GPT 模型相比表现如何&#xff1f;CMU 这篇论文测明白了。 前段时间&#xff0c;谷歌发布了对标 OpenAI GPT 模型的竞品 ——Gemini。这个大模型共有三个版本 ——Ultra&#xff08;能力最强&#xff09;、Pro 和 Nano。研…

ddns 被解析为127.0.0.1_我为北京冬奥加油,2020.2.1-2.10冬奥知识分享

2020.02.01中国冬梦&#xff0c;世界飞跃&#xff0c;我是果雪儿小小志愿者仇懿琛&#xff0c;我为北京冬奥加油&#xff0c;今天冬奥知识分享——冬奥会历史上那些非凡而又卓越的运动员(十一)明星运动员&#xff1a;米特迈尔第十二届冬季奥运会时间&#xff1a;1976.02.04-02.…

乱码 转ios_王者荣耀:转区数量提升25倍,教你解决检测异常,IOS也有艾琳了

王者峡谷近期最火的一个功能便是转区服务开放限量测试&#xff0c;由于申请的人数非常多&#xff0c;官方决定从今日起将测试资格由最初的2000个提升至每日开放50000个&#xff0c;同时由每日二次开放调整为每日一次&#xff0c;虽说测试资格数量提升了25倍&#xff0c;但依旧有…

冰豹lua驱动设置_卡宴?卡宴!——冰豹ROCCAT Kain 120 AIMO开箱

前言原本一直在用罗技的G700s&#xff0c;但是鉴于众所周知的“电老虎”原因&#xff0c;再加上重量的问题&#xff0c;一直想换一个鼠标试试&#xff0c;虽然不太玩游戏&#xff0c;但是平时使用也喜欢高DPI的设置、另外还稍许有点汗手的问题&#xff0c;所以对鼠标长时间时候…

vue内检测是否有swiper_vue.js怎么用swiper

vue.js中使用swiper的方法&#xff1a;首先下载【swiper.js】&#xff1b;然后在【main.js】中全局引入【swiper.js】&#xff1b;最后在模板中配置相关内容即可。【相关文章推荐&#xff1a;vue.js】vue.js中使用swiper的方法&#xff1a;1、下载swiper.jsnpm install vue-awe…

从sqlite 迁移 mysql_将 Ghost 从 SQLite3 数据库迁移到 MySQL 数据库

下面我们就来说说如何从 SQLite 迁移到 MySQL 。准备首先你要已经安装好 MySQL 数据库。如果你用的是 Ubuntu 系统&#xff0c;请参考这篇文章。其他系统请参考各自对应的文档。导出当前数据点击蓝色的 EXPORT 按钮将当前数据库中的所有数据导出并下载到本地&#xff0c;默认文…

易语言mysql验证_易语言MySql注册登录

用到的主要易语言命令&#xff1a;连接MySql (, , , , )执行SQL语句 (, )取记录集 ()读字段值 (, , )释放记录集 ()断开MySql ()命令介绍&#xff1a;①、连接MySql (, , , , )&#xff1a;顾名思义&#xff0c;这条命令是用来连接你的MySql数据库的&#xff0c;返回一个MySql句…

java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...

在逛 Stack Overflow 的时候&#xff0c;发现了一些访问量像喜马拉雅山一样高的问题&#xff0c;比如说这个&#xff1a;如何比较 Java 的字符串&#xff1f;访问量足足有 370万&#xff0c;这不得了啊&#xff01;说明有很多很多的程序员被这个问题困扰过。截止到目前为止&…

mysql+distinct+max_MySQL中distinct与group by之间的性能进行比较

最近在网上看到了一些测试&#xff0c;感觉不是很准确&#xff0c;今天亲自测试了一番。得出了结论&#xff0c;测试过程在个人计算机上&#xff0c;可能不够全面&#xff0c;仅供参考。测试过程&#xff1a;准备一张测试表CREATE TABLE test_test (id int(11) NOT NULL auto_i…

java生成大素数_用BigInteger实现大素数生成算法

一&#xff0e;通过素数的基本性质根据素数的性质(除了1和此整数(n)自身外&#xff0c;无法被其他自然数整除的数)&#xff1a;即从2到n/2的数都不能整除n。1 public static booleanisPrime(BigInteger num)2 {3 BigInteger two BigInteger.valueOf(2);4 for(BigInteger i tw…

JAVA shell export_Java 远程调用Shell

Java 远程调用Shell上一篇 /下一篇 2014-01-21 13:29:22/ 个人分类&#xff1a;JavaRemote Shell Scripts need to export the ENV variable again.public class JavaRemoteRunShell {private Connection conn;private String ipAddr;private String charset Charset.default…

JAVA不同类型数组重载_JAVA补课-DAY1:方法重载和数组

IDEA简单方法使用快捷键CtrlAltL&#xff0c;IDEA代码格式化Ctrl/单行注释&#xff0c;重复按取消CtrlShift/多行注释&#xff0c;重复可取消5.fori<>for (int i 0; i < 5; i)本日重点方法重载(overload)/*方法重载(Overload)&#xff0c;多个方法名称相同&#xff0…

华为s2600t java_华为S2600T存储+华为RH2288H V3服务器

面对复杂多变的国际形势和国内艰巨繁重的改革发展稳定任务&#xff0c;维持稳定就显得格外重要。平安城市视频监控建设项目为了保证城市交通和城市治安的安全&#xff0c;需要对人员集中的重要场所和道路上监控进行建设和改造。视频监控记录的数据必须具有很高的安全性&#xf…

华为java8_Java8 Stream

简单认识Java streamJava8出了一个stream流式编程&#xff0c;在开发中或多或少用到接触过。怎么说呢&#xff01;举个例子把&#xff0c;一起我们在遍历一个集合的时候&#xff0c;我们是从外部去遍历的&#xff0c;然后才能拿到结果&#xff0c;这样来效率就会变得相对低一点…

ascii码扩展 php,php与ascii码

首先 简单说一下历史&#xff0c;ascii码最开始是美国人搞出来的&#xff0c;用来干什么呢&#xff1f;我们知道&#xff0c;计算机只知道0和1&#xff0c;如果我们要计算机识别除了01之外的字符&#xff0c;例如 a&#xff0c;我们要先告诉计算机‘1100001’就是a。跟摩斯密码…

php手机电子相册,免费电子相册制作软件 手机电子相册制作软件

照片配上音乐加上炫酷的过渡效果点缀图片和文字说明&#xff0c;轻松制作成各种视频格式的电子相册。不需要专业的视频制作知识&#xff0c;点几下鼠标就可以把上百张数码照片制作成电子相册。视频相册可以在电脑上用播放器收看或者在高清电视上播放。也可以刻录成DVD、VCD光盘…

php+spl+栈,PHP SPL标准库之数据结构栈(SplStack)介绍

栈(Stack)是一种特殊的线性表&#xff0c;因为它只能在线性表的一端进行插入或删除元素(即进栈和出栈)SplStack就是继承双链表(SplDoublyLinkedList)实现栈。类摘要如下&#xff1a;简单使用如下&#xff1a;//把栈想象成一个颠倒的数组$stack new SplStack();/*** 可见栈和双…

深度理解java jvm,深度理解JVM

深入理解java虚拟机要讲的内容了解历史垃圾回收机制性能监控工具性能调优案例实战认识类的文件结构类加载机制字节码执行引擎虚拟机编译及运行时优化Java线程高级1. 环境搭建安装jdk2. 内存溢出场景模拟public class Test01 {public static void main(String[] args) {//测试内…

otb100matlab,ECO for tracking 在 OTB100 基准测试和 VOT2016 数据集中的实验结果

目前本文所涉内容均未使用图形处理器。运行在有图形处理器环境下的实验将在稍后补充&#xff0c;敬请关注。需要准备的文章和工具有&#xff1a;一、集成 OTB1001.1 下载基准测试在该目录中可以看到&#xff1a;trackers 目录中已经包含了若干跟踪算法。而我们要做的就是把 ECO…