定时器中断控制的独立式键盘扫描实验

#include<reg51.h>    //包含51单片机寄存器定义的头文件
sbit S1=P1^4;        //将S1位定义为P1.4引脚
sbit S2=P1^5;        //将S2位定义为P1.5引脚
sbit S3=P1^6;        //将S3位定义为P1.6引脚
sbit S4=P1^7;        //将S4位定义为P1.7引脚
unsigned char keyval;  //储存按键值
/*************************************************
函数功能:流水灯延时
**************************************************/
void led_delay(void)
{
   unsigned char i,j;
    for(i=0;i<250;i++)
      for(j=0;j<250;j++)
        ;
}

/*************************************************
函数功能:软件消抖延时
**************************************************/
void delay20ms(void)
{
   unsigned char i,j;
    for(i=0;i<100;i++)
      for(j=0;j<60;j++)
        ;
}
/*************************************************
函数功能:正向流水点亮LED
**************************************************/
void forward(void)
 {
          P3=0xfe;         //第一个灯亮
             led_delay();
              P3=0xfd;         //第二个灯亮
             led_delay();
             P3=0xfb;          //第三个灯亮
             led_delay();
             P3=0xf7;          //第四个灯亮
             led_delay();
            P3=0xef;          //第五个灯亮
           led_delay();
            P3=0xdf;          //第六个灯亮
            led_delay();
            P3=0xbf;          //第七个灯亮
           led_delay();
            P3=0x7f;          //第八个灯亮
           led_delay();  
            P3=0xff;
            P3=0xfe;         //第一个灯亮
             led_delay();
}
/*************************************************
函数功能:反向流水点亮LED
**************************************************/
  void backward(void)
  {
           P3=0x7f;          //第八个灯亮
           led_delay();  
            P3=0xbf;          //第七个灯亮
           led_delay();
            P3=0xdf;          //第六个灯亮
            led_delay();
            P3=0xef;          //第五个灯亮
           led_delay();
             P3=0xf7;          //第四个灯亮
             led_delay();
            P3=0xfb;          //第三个灯亮
             led_delay();
           P3=0xfd;         //第二个灯亮
             led_delay();
            P3=0xfe;         //第一个灯亮
             led_delay();

  }
/*************************************************
函数功能:关闭所有LED
**************************************************/
void stop(void)
{
        P3=0xff;    //关闭8个LED
}
/*************************************************
函数功能:闪烁点亮LED
**************************************************/
void flash(void)
{
  P3=0xff;      //关闭8个LED
  led_delay();
  P3=0x00;      //点亮8个LED
  led_delay();
}


/*************************************************
函数功能:主函数
**************************************************/
void main(void)  //主函数
{
  TMOD=0x01;      //使用定时器T0的模式1
  EA=1;           //开总中断
  ET0=1;          //定时器T0中断允许
  TR0=1;          //启动定时器T0 
 TH0=(65536-1000)/256;    //定时器T0赋初值,每计数200次(217微秒)发送一次中断请求
 TL0=(65536-1000)%256;    //定时器T0赋初值
  keyval=0;              //按键值初始化为0,什么也不做
   while(1)
       {
           switch(keyval)
                  {
                     case 1:forward();
                             break;
                      case 2:backward();
                             break;
                      case 3:stop();
                             break;
                      case 4: flash();
                             break;
                     }
             
     }
}

/*************************************************
函数功能:定时器T0的中断服务子程序
**************************************************/
void Time0_serve(void) interrupt 1 using 1
{
 if((P1&0xf0)!=0xf0)         //第一次检测到有键按下
             {
                  delay20ms();   //延时20ms再去检测
                    if(S1==0)      //按键S1被按下
                     keyval=1;
                    if(S2==0)      //按键S2被按下
                     keyval=2;
                    if(S3==0)      //按键S3被按下
                     keyval=3;
                      if(S4==0)      //按键S4被按下
                     keyval=4;
                 }    
 TH0=(65536-1000)/256;
 TL0=(65536-1000)%256;
}


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

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

相关文章

50天精通Golang(第18天)

web开发介绍、iris框架安装、HTTP请求和返回、Iris路由处理 一 Web项目开发介绍及实战项目介绍 1.1 引言 本系列课程我们将学些Golang语言中的Web开发框架Iris的相关知识和用法。通过本系列视频课程&#xff0c;大家能够从零到一经历一个完整项目的开发&#xff0c;并在课程…

【栈】Leetcode 496 下一个更大元素I

【栈】Leetcode 496 下一个更大元素I 解法1 两个单调栈解法2 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 两个单调栈 两个栈进行操作&#xff0c;一个栈用来遍历寻找&#xff0c;一个栈用来保留 将nums2中的元素…

NLP论文阅读记录 - 2021 | WOS 利用 ParsBERT 和预训练 mT5 进行波斯语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法A. 序列到序列 ParsBERTB、mT5 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Leveraging ParsBERT and Pretrained …

鸿蒙开发之组合手势

当我们需要支持多个手势的时候&#xff0c;可以通过GestureGroup来实现&#xff0c;如下实现了同时支持Tap和Pan手势 import Prompt from system.prompt Entry Component struct OfficialGestureGroupPage {State message: string Hello Worldbuild() {Column() {Column() {T…

STM32WL用户手册学习

介绍 STM32Cube是意法半导体的原创产品&#xff0c;通过减少开发工作量、时间和成本来显著提高开发人员的生产力。STM32Cube涵盖了整个STM32产品组合。 STM32Cube包括&#xff1a; 一套用户友好的软件开发工具&#xff0c;涵盖项目开发从设计到生产&#xff0c;其中&#xf…

算法第十九天-二叉搜索树节点最小距离

二叉搜索树节点最小距离 题目要求 解题思路 今天题目重点&#xff1a; 1.二叉搜索树&#xff08;BST&#xff09; 2.任意两个不同节点 遇到二叉搜索树&#xff0c;立即想到这句话&#xff1a;[二叉搜索树&#xff08;BST&#xff09;的中序遍历是有序的]。这是解决所有二叉搜…

全网最细RocketMQ源码四:消息存储

看完上一章之后&#xff0c;有没有很好奇&#xff0c;生产者发送完消息之后&#xff0c;server是如何存储&#xff0c;这一章节就来学习 入口 SendMessageProcessor.processRequest private CompletableFuture<RemotingCommand> asyncSendMessage(ChannelHandlerCont…

【现代密码学】笔记5--伪随机置换(分组加密)《introduction to modern cryphtography》

【现代密码学】笔记5--伪随机置换&#xff08;分组加密&#xff09;《introduction to modern cryphtography》 写在最前面5 伪随机排列实践构造&#xff08;块密码/分组密码&#xff09; 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&…

pve虚拟机的改名和修改ID

PVE的虚拟机名字在web界面是无法修改id和名字的。要注意id和名字不能重。 在使用备份时就发现虚拟机是以虚拟机id作为维一标识&#xff0c;如果有多台pve节点&#xff0c;但共用同一个nfs目录备份或使用同一个pbs进行备份时就必须保障id的唯一性。这时可以使用这个方法来进行补…

MySQL使用通配符进行数据搜索以及过滤

目录 1.什么是通配符&#xff1f; 2.通配符之→百分号(%) 3.通配符之→下划线(_) 4.通配符使用注意事项 *本文涉及概念来源于图灵程序设计丛书&#xff0c;数据库系列——《MySQL必知必会》 1.什么是通配符&#xff1f; 通配符(wildcard) &#xff1a;用来匹配值的一部分…

scrollTop与offsetTop解决小分辨率区域块向上滚动效果效果,结合animation与@keyframes实现标题左右闪动更换颜色效果。

scrollTop 是一个属性&#xff0c;它表示元素的滚动内容垂直滚动条的位置。对于可滚动元素&#xff0c;scrollTop 属性返回垂直滚动条滚动的像素数&#xff0c;即元素顶部被隐藏的像素数。 offsetTop 是一个属性&#xff0c;用于获取一个元素相对于其父元素的垂直偏移量&…

移动端开发进阶之蓝牙通讯(二)

移动端开发进阶之蓝牙通讯&#xff08;二&#xff09; 蓝牙广播是一种无线通讯技术&#xff0c;通过无线电波传输数据&#xff1b; 在蓝牙低功耗&#xff08;BLE&#xff09;协议中&#xff0c;广播通信是其重要组成部分&#xff0c;主要有两类使用场景&#xff1a; 单一方向的…

腾讯云服务器租用价格表_2024新版报价

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

【android】rk3588-android-bt

文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现&#xff0c;协议栈调用2、协议栈实现&#xff0c;vendorlib调用&#xff08;回调函数&#xff09;2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE…

5.1 内容管理模块 - 课程预览、提交审核

内容管理模块 - 课程预览、提交审核 文章目录 内容管理模块 - 课程预览、提交审核一、课程预览1.1 需求分析1.2 freemarker 模板引擎1.2.1 Maven 坐标1.2.2 freemaker 相关配置信息1.2.3 添加模板 1.3 测试静态页面1.3.1 部署Nginx1.3.2 解决端口问题被占用问题1.3.3 配置host文…

紫光展锐T770安卓核心板_展锐T770 5G核心板规格参数

紫光展锐T770安卓核心板是一款高性能的5G安卓智能模块&#xff0c;拥有先进的6nm制程工艺和强大的性能。板载8GB Ram 256GBROM的内存单元&#xff0c;支持4K H.265/ H.264视频编解码&#xff0c;搭载Android 13以上操作系统&#xff0c;功能丰富。除了支持5G NSA和SA双模式向下…

我的NPI项目之设备系统启动(三) -- CDT的一个实例

上面说了这么多&#xff0c;这里就添加一个CDT的使用实例和简单的代码解析。 首先生成cdt_configure.xml配置文件&#xff0c;然后执行如下命令&#xff1a; python cdt_generator.py cdt_configure.xml CDT.bin; 就可以生成对应的CDT.bin文件。同时也会生成, 我们会利用ha…

『 C++ 』AVL树详解 ( 万字 )

&#x1f988;STL容器类型 在STL的容器中,分为几种容器: 序列式容器&#xff08;Sequence Containers&#xff09;: 这些容器以线性顺序存储元素&#xff0c;保留了元素的插入顺序。 支持随机访问&#xff0c;因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…

DBA技术栈(三):MySQL 性能影响因素

文章目录 前言一、影响MySQL性能的因素1.1 商业上的需求1.2 应用架构规划1.3 查询语句使用方式1.4 Schema的设计1.5 硬件环境 总结 前言 大部分人都一致认为一个数据库应用系统&#xff08;这里的数据库应用系统概指所有使用数据库的系统&#xff09;的性能瓶颈最容易出现在数…

MOSS 混元 巅峰对话!2024大模型发展都在这里

引言 2023 年&#xff0c;各大厂商争先投入 LLM 研发&#xff0c;一年内&#xff0c;在国内累计就有 200 余个大模型正式发布。尽管很多大模型并不完善&#xff0c;但行业内的研究专家及产业领袖都在为大模型的突破甚至 AGI 的发展&#xff0c;做着不懈探索。 但同时&#xff0…