CPU控制的独立式键盘扫描实验

2024-01-09 22:20

本文主要是介绍CPU控制的独立式键盘扫描实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#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 delay30ms(void)
{
   unsigned char i,j;
    for(i=0;i<100;i++)
      for(j=0;j<100;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;
}
/*************************************************
函数功能:闪烁点亮LED
**************************************************/
void flash(void)
{
  P3=0xff;
  led_delay();
  P3=0x00;
  led_delay();
}
/*************************************************
函数功能:键盘扫描子程序
**************************************************/
void key_scan(void)
{
 if((P1&0xf0)!=0xf0)         //第一次检测到有键按下
             {
                  delay30ms();   //延时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;
                 }         
}

/*************************************************
函数功能:主函数
**************************************************/
void main(void)  //主函数
{
      keyval=0;              //按键值初始化为0,什么也不做
   while(1)
       {
           key_scan();  
            switch(keyval)
                  {
                     case 1:forward();
                             break;
                      case 2:backward();
                             break;
                      case 3:stop();
                             break;
                      case 4: flash();
                             break;
                     }
             
     }
}

这篇关于CPU控制的独立式键盘扫描实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588638

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p