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,一经查实,立即删除!

相关文章

matlab 功率谱密度 汉宁窗_信号系统的一些基本概念

泄露截断会使谱分析精度受到影响。如果时域信号是周期性的&#xff0c;而截断又按整周期取数&#xff0c;信号截断不会产生问题&#xff0c;因为每周期信号都能代表整个周期信号变化情况。若不是整周期截取数据&#xff0c;则截断将使信号波形两端产生突变&#xff0c;所截取的…

拟真机器人拯救者怎么来_笔点聊科技 篇九:3499起、卷土重来?理性聊聊刚发布的联想拯救者手机Pro...

笔点聊科技 篇九&#xff1a;3499起、卷土重来&#xff1f;理性聊聊刚发布的联想拯救者手机Pro2020-07-23 10:44:270点赞0收藏0评论创作立场声明&#xff1a;想让消费者接受品牌&#xff0c;真金白银买回家还感觉良好&#xff0c;继而产生源源不断的品牌口碑&#xff0c;在强者…

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

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

华为双前置摄像头_国产手机集体爱上“双打孔屏”,前置双摄像头将成2020年标配?...

今年2月21日&#xff0c;三星S10采用了前置双摄像头的配置&#xff0c;而且是打孔屏&#xff0c;两颗摄像头分别是1000万像素的双核对焦主摄&#xff0c;以及800万像素的景深副摄&#xff0c;不俗的硬件辅以算法虚化&#xff0c;在当时拿下了Dxomark前摄第一的宝座。即便是10个…

python对文件的_python 对文件操作

#!/usr/bin/env python#-*- coding:utf-8 -*-defFind(class_name):class_list[]tagFalsewith open(‘data‘, ‘r‘, encoding‘utf8‘) as f:for line inf:if line.strip() ‘班级&#xff1a;{0}班‘.format(class_name.strip()):class_list.append(line)tagTruecontinueif …

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

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

python3 collections模块 tree_第30天: Python collections 模块

by 豆豆1.简介collections 是 python 的内置模块&#xff0c;提供了很多方便且高性能的关于集合的操作&#xff0c;掌握这些知识有助于提高代码的性能和可读性。2.常用功能2.1 namedtuple 功能详解namedtuple() 返回一个新的元组子类&#xff0c;且规定了元组的元素的个数&…

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…

mysql创建个自增id的表_MySQL数据库--怎样创建一张用户表,ID设置为自动增长列(新手必会)...

-- phpMyAdmin SQL Dump-- version 3.3.8.1-- http://www.phpmyadmin.net---- 主机: w.rdc.sae.sina.com.cn:3307-- 生成日期: 2011 年 08 月 19 日 16:18-- 服务器版本: 5.1.47-- PHP 版本: 5.2.9---- 数据库: app_tushow---- ----------------------------------------------…

从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句…

mysql 数据库设置mysql注入_MYSQL数据库浅析MySQL的注入安全问题

《MYSQL数据库浅析MySQL的注入安全问题》要点&#xff1a;本文介绍了MYSQL数据库浅析MySQL的注入安全问题&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开.这一课将…

php链接mysql编码错误_php 操作 mysql 数据库 编码 错误

有两行相同的代码&#xff0c;来自不同的 php 文件&#xff0c;在对 MySql 数据库(UTF-8格式)操作时&#xff0c;一行代码正常&#xff0c;一行代码异常代码1&#xff0c;异常update ordersystem.product Set PName333汽车 Where Bianhao&#xfeff;&#xfeff;&#xfeff;X…

mysql 数据记录导出_mysql如何导出600万条记录的数据表?

目前我这么写&#xff1a;/*** Created by IntelliJ IDEA.* User: felix* Date: 2019-03-01* Time: 18:49*/set_time_limit(0);$servername localhost;$username ;$password ;$dbname ;$i 57007;$bingTime microtime(true);echo bing . $bingTime . s . PHP_EOL;while …

mysql sql使用序列_SQL 使用序列

SQL 使用序列序列是根据需要产生的一组有序整数&#xff1a;1, 2, 3 ... 序列在数据库中经常用到&#xff0c;因为许多应用要求数据表中的的每一行都有一个唯一的值&#xff0c;序列为此提供了一种简单的方法。本节阐述在 MySQL 中如何使用序列。使用 AUTO_INCREMENT 列&#x…

jmeter mysql查询结果提取_Jmeter-从数据库中获取数据并作为变量使用

一、导入数据库驱动包&#xff1b;(1)、在网上搜索下载数据库驱动包(MySQL的地址https://dev.mysql.com/downloads/file/?id480090)(2)、解压&#xff0c;获取到jar包&#xff0c;并将其复制到Jmeter的安装路径下的\lib文件夹下面&#xff1b;重启Jmeter就已经成功导入了&…

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

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