【单片机 5.3开关检测】

文章目录

  • 前言
  • 一、5.3开关检测
    • 1.1没按键按下的
    • 1.2有按键按下的
  • 二、改进
    • 1.改进
  • 三、独立键盘
    • 3.1为什么要取反
    • 3.2 实用的按键
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

课程需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、5.3开关检测

    unsigned char temp; 	/*定义临时变量temp*/P1=0xff;				/* P1口低4位置1,作为输入;高4位置1,发光二极管熄灭*/temp= P1&0xf0;			/*读P1口并屏蔽低4位,送临时变量temp */temp = temp >>4;		/* temp的内容右移4位,P1口高4位状态移至低4位*/P1= temp;				/* 临时变量值写入P1口输出*/
//    P1= 0XF0|(P1>>4);				/* 临时变量值写入P1口输出*/delay(	);

1.1没按键按下的

1111 1111   P1: 1111 1111
1111 0000   temp:1111 0000
0000 1111   temp: 0000 1111
0000 1111  P1: 0000 1111
delay(	);

在这里插入图片描述

1.2有按键按下的

xxxx 0000 -1111 中的可能

1111 1111   P1: 1111 1111
xxxx 0000 &1111 0000   temp:xxxx 0000
0000 xxxx   temp: 0000 xxxx
0000 xxxx  P1: 0000 xxxx
delay(	);

在这里插入图片描述

二、改进

改进的思路

在这里插入图片描述

1.改进

代码如下(示例):

P1= 0XF0|(P1>>4);				/* 临时变量值写入P1口输出*/
在这里插入代码片

三、独立键盘

在这里插入图片描述
有按键按下:读回来就是0
反之: 读回来就是1

3.1为什么要取反

在这里插入图片描述

#include<reg51.h>
void key_scan(void)
{	unsigned char keyval					do{P1=0xff; 		// P1口为输入keyval=P1; 		//从P1口读入键盘状态keyval=~ keyval;	//键盘状态求反switch(keyval){case 1: ……;		//处理按下的k1键,“……”为处理程序     	break;			//跳出switch语句case 2: ……; 		//处理按下的k2键break; 			//跳出switch语句case 4: ……; 		//处理按下的k3键break;			//跳出switch语句case 8: ……; 		//处理按下的k4键break;			//跳出switch语句case 16: ……; 		//处理按下的k5键break;			//跳出switch语句case 32: ……; 		//处理按下的k6键break;			//跳出switch语句case 64: ……; 		//处理按下的k7键break;			//跳出switch语句case 128: ……; 	//处理按下的k8键break;			//跳出switch语句default:break; 			//无按下键处理 }}  while(1);
}

3.2 实用的按键

   while (1){if(key0==0){led0=0; num++;             }else{                led0=1; }if(num==0){  //灯1P3=0X00;}else if(num==1){//灯2P3=0X01;}else if(num==2){//灯3P3=0X02;}}

问题1:num 没有清0 255 才自己变0很久,手动清0

   while (1){if(key0==0){led0=0; num++;             }else{                led0=1; }if(num==0){  //灯1P3=0X00;}else if(num==1){//灯2P3=0X01;}else if(num==2){//灯3P3=0X02;}else{num=0;}}

问题2:按键还是不灵

在这里插入图片描述

    while (1){if(key0==0) {                       delay();//按键消抖if(key0==0){while(key0==0);led0=0; num++;  }else{led0=1; }}if(num==0){  //灯1P3=0X00;}else if(num==1){//灯2P3=0X01;}else if(num==2){//灯3P3=0X02;}else{num=0;}}

问题3: 按键松开灯不灭

           led0=0; //将灯一直到循环上面while(key0==0);      
#include <reg51.h>sbit led0 =P1^0;
sbit key0 =P2^0;unsigned char num=0;
#define uchar unsigned charvoid  delay(  )
{	uchar i,j;for(i=0; i<255; i++)for(j=0; j<255; j++);
}/*1111 1111
1111 00001111 0000  temp1110 0000
1111 0000 
1110 0000   temp0000 1110  temp>>40000 1110 P1=temp1111 0000 1111 1110  P1=temp1111 1111 P1=0XFF*/void  main(  )					/*主函数*/
{while (1){if(key0==0) {                       delay();//按键消抖if(key0==0){led0=0; //将灯一直到循环上面while(key0==0);               num++;  }}else{led0=1; }if(num==0){  //灯1P3=0X00;}else if(num==1){//灯2P3=0X01;}else if(num==2){//灯3P3=0X02;}else{num=0;}}
}

总结

例5-3 程序优化过程,每一个程序没一步,如果你不清晰,就一步步带数字进去计算,看状态。一定要根据电路图来。
增加了独立键盘,一个按键控制 3种灯的状态,自己可以用来测试一个按键控制多个流水灯的状态,需要注意,松手按键检测会导致程序阻塞,阻塞可能会引起一系列问题。具体问题要具体分析。

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

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

相关文章

春暖助学 梦想启航

&#xff08;通讯员&#xff1a;赵灿飞 图&#xff1a;杨美、孙红浪&#xff09; 春风拂面暖阳斜&#xff0c;爱心助学谱华章。为弘扬中华民族传统美德&#xff0c;动员社会力量&#xff0c;传播社会爱心&#xff0c;缓解宁乡西部特殊家庭学子学业面临的实际困难&#xff…

CorePoolExecutor夺命连环问?看你可以接受几招?

一、前言 今天我在看why技术的时候&#xff0c;看到了这个。发现这个没有全部的八股回答&#xff1f;于是我就结合自己的经验&#xff0c;分享下八股 二、八股问答 2.1了解JDK Executors线程池吗? Executor就是一个线程池框架&#xff0c;在开发中如果需要创建线程可优先考…

JMeter自定义日志与日志分析

1 JMeter日志概览 JMeter与Java程序一样&#xff0c;会记录事件日志&#xff0c;日志文件保存在bin目录中&#xff0c;名称为jmeter.log。当然&#xff0c;我们也可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起。 可见&…

从入门到实战:vue3路由知识点

本人在B站上关于vue3的尚硅谷的课程&#xff0c;以下是整理一些笔记。 1.两个知识点 1.路由组件通常存放在pages 或 views文件夹&#xff0c;一般组件通常存放在components文件夹。 组件可以分为&#xff1a; 1. 一般组件&#xff1a;亲手写标签出来的 2. 路由组件&#…

非关系型数据库——Redis配置与优化

目录 一、关系型数据库和非关系型数据库 1.定义 1.1关系型数据库 1.2非关系型数据库 2.非关系型数据库产生的背景 3.关系型数据库和非关系型数据库区别 3.1适用性不同 3.2数据一致性要求不同 3.3数据模型不同 3.4数据查询语言不同 3.5数据存储方式不同 3.6扩展方式…

用Servlet实现一个简单的表白墙

1. 准备工作 创建项目,引入依赖...... 将静态页面放到项目中(放在webapp目录下): 当前,这个表白墙页面,已经可以输入内容,点击提交之后也能显示内容,后续后端要做的工作即: ①存档 用户点提交的时候,把刚才输入的内容通过网络传输给服务器,由服务器保存这个数据. ②读档 …

[中级]软考_软件设计_计算机组成与体系结构_04_寻址地址

寻址地址 概念指令的概念 寻址方式立即寻址方式直接寻址方式间接寻址方式寄存器寻址方式寄存器间接寻址方式往年真题 概念 指令的概念 一条指令就是机器语言的一个语句&#xff0c;它是一组有意义的二进制代码&#xff0c;指令的基本格式如下&#xff1a; 操作码字段地址码字…

基于springboot实现企业客户管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现企业客户管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企…

鸿蒙HarmonyOS应用开发之Node-API支持的数据类型和接口

Node-API的数据类型 napi_status 是一个枚举数据类型&#xff0c;表示Node-API接口返回的状态信息。 每当调用一个Node-API函数&#xff0c;都会返回该值&#xff0c;表示操作成功与否的相关信息。 typedef enum {napi_ok,napi_invalid_arg,napi_object_expected,napi_stri…

计算机网络面试问题(一)

1.在浏览器中输⼊URL并按下回⻋之后会发⽣什么 2.TCP三次握⼿的过程,为什么三次握手 TCP&#xff08;传输控制协议&#xff09;的三次握⼿是建⽴⽹络连接的过程&#xff0c;确保通信双⽅能够正确地进⾏数据传输。 第⼀次握⼿&#xff08;SYN&#xff09;&#xff1a; 客户端&am…

Php_Code_challenge13

题目&#xff1a; 答案&#xff1a; 解析&#xff1a; 开启一个会话&#xff0c;在SESSION变量"nums"为空时则对"nums","time","whoami"进行赋值&#xff0c;并在120秒后关闭会话&#xff0c;创建一个变量"$value"…

第6章 数据存储操作

思维导图 6.1 引言 数据存储与操作包括对存储数据的设计、实施和支持&#xff0c;最大化实现数据资源的价值&#xff0c;贯穿于数据创建/获取到处置的整个生命周期。 6.1.1 业务驱动因素 数据存储与操作活动对于依赖数据的企业来说非常关键&#xff0c;这些活动的主要驱动因素是…

Meta Pixel:助你实现高效地Facebook广告追踪

Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具&#xff0c;只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码&#xff0c;安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…

记windows配置maven环境变量

配置环境变量 idea中配置maven

C++教学——从入门到精通 4.setw()语句

这次玩点新鲜的------setw() 这家虎是啥呢&#xff1f; 我们编程输出的时候总是要输出空格&#xff0c;但有些时候又点的手都麻了 这时setw语句就派上用场了 具体怎么用呢&#xff1f; 如下图 #include"iostream"// #include"iomanip"// bits/stdc…

AI智能写作:巧用AI大模型让新媒体变现插上翅膀【文末送书】

文章目录 一、AI智能写作的崛起二、AI智能写作与新媒体变现AI智能写作的挑战与应对策略 AI智能写作&#xff1a;巧用AI大模型让新媒体变现插上翅膀【文末送书】 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的发展日新月异&#xff0c;逐渐渗透到了各行各业&…

稻盛和夫|普通人如何才能取得非凡成就?

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 稻盛和夫老先生曾经回答过这么一个问题&#xff1a; 资质平庸的普通人如何才能取得非凡的成就&#xff1f; 稻盛和夫认为&#xff1a;人生成就能力努力态度。 也就是&#xff1a;做一个努力工作却不甘于只做眼前的事&a…

Verilog基础【二】

3.1 Verilog 连续赋值 关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; assign LHS_target RHS_expression &#xff1b;LHS&#xff08;left hand side&#xff09;…

linux 系统安装php 8.0.2

1. 安装包准备 https://www.php.net/distributions/php-8.0.22.tar.gz 我下载到 /usr/local/src 这个目录了 cd /usr/local/srcwget https://www.php.net/distributions/php-8.0.22.tar.gz 2. tar 解压 然后进到解压的文件夹 tar -zxvf php-8.0.22.tar.gz cd php-8.0.2…

鸿蒙OS开发实例:【NAPI入门】

背景 公司内部已经有现成的MQTT动态库&#xff0c;想在HarmonyOS平台上共享使用。查找官方指导后&#xff0c;发现可以通过NAPI方式&#xff0c;将MQTT C库导入进来&#xff0c;然后封装一层ArkTS接口就可直接使用。 本篇内容是在按照官方指导下&#xff0c;自己做的一些调研…