51单片机应用从零开始(六)·逻辑运算

51单片机应用从零开始(一)-CSDN博客

51单片机应用从零开始(二)-CSDN博客

51单片机应用从零开始(三)-CSDN博客

51单片机应用从零开始(四)-CSDN博客

51单片机应用从零开始(五)·加减乘除运算-CSDN博客

详解 KEIL C51 软件的使用·建立工程-CSDN博客

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客

目录

1.  P0 口显示逻辑ʺ与ʺ运算结果

2.  P0 口显示条件运算结果

3.  P0 口显示按位ʺ异或ʺ运算结果

4.  用 P0 显示左移运算结果

5. ʺ万能逻辑电路ʺ实验

6.  总结


1.  P0 口显示逻辑ʺ与ʺ运算结果

        逻辑运算是根据对真值的操作来判断命题的真假关系的运算。常见的逻辑运算包括:

  1. 非(not)运算:对命题取反,表示命题的否定。例如,“今天不下雨”。

  2. 与(and)运算:当且仅当所有命题都为真时,结果为真。例如,“今天既不下雨,又不刮风”。

  3. 或(or)运算:当且仅当至少有一个命题为真时,结果为真。例如,“今天下雨或刮风”。

  4. 异或(xor)运算:当且仅当有且仅有一个命题为真时,结果为真。例如,“今天只下雨或只刮风”。

  5. 蕴含(implication)运算:当且仅当条件命题为真时,结果命题为真。例如,“如果今天下雨,那么地面就会湿润”。

  6. 双向蕴含(bi-implication)运算:当且仅当条件命题和结果命题都为真或都为假时,结果命题为真。例如,“今天下雨当且仅当地面会湿润”。

C语言中的逻辑运算符包括:

  1. 逻辑与运算符:&&(也可用and表示)

  2. 逻辑或运算符:||(也可用or表示)

  3. 逻辑非运算符:!

        这些逻辑运算一般用于判断语句中的条件表达式,例如在if语句和while语句中。逻辑运算的结果通常是一个布尔值,即true或false。在C语言中,true用1表示,false用0表示。

#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ 
 P0=(4>0)&&(9>0xab);//将逻辑运算结果送 P0 口
 while(1) 
 ; //设置无限循环,防止程序“跑飞”
}

2.  P0 口显示条件运算结果

        C语言中的条件运算使用三目运算符(?:)来表示。其语法形式如下:

condition ? expression1 : expression2

        如果condition为真,则返回expression1的值,否则返回expression2的值。

#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ 
 P0=(8>4)?8:4;//将条件运算结果送 P0 口,P0=8=0000 1000B 
 while(1) 
 ; //设置无限循环,防止程序“跑飞”
}

        三目运算符是一种简化条件判断语句的方式,也被称为“三元表达式”。它的语法结构如下:

表达式1 ? 表达式2 : 表达式3

        如果表达式1的值为真(即非零),则整个表达式的值为表达式2的值,否则为表达式3的值。可以理解为,如果表达式1成立,执行表达式2,否则执行表达式3。三目运算符通常用于条件赋值或条件返回语句的简化,可以使代码更加简洁和易读。

3.  P0 口显示按位ʺ异或ʺ运算结果

        按位"异或"运算是指对两个二进制数的每一位进行比较,相同则结果为0,不同则结果为1。例如,对于二进制数1010和1101进行按位"异或"运算,结果为0111。

符号表示为"^",例如a^b表示对a和b进行按位"异或"运算。

具体表现如下所示:

操作数A操作数B运算结果
000
011
101
110
#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ 
 P0=0xa2^0x3c;//将条件运算结果送 P0 口,P0=8=0000 1000B 
 while(1) 
 ; //设置无限循环,防止程序“跑飞”
}

4.  用 P0 显示左移运算结果

        左移运算是一种位运算,用于将一个二进制数的所有位向左移动指定的位数,同时在右侧补上零。左移运算符是“<<”,例如:

a = 3 << 2

        在这个例子中,将数字3左移2位,结果为12。原因是将数字3转换为二进制数为“11”,向左移动2位后变成“1100”,即12的二进制表示。

#include<reg51.h> //包含单片机寄存器的头文件
void main(void) 
{ 
 P0=0x3b<<2;//将左移运算结果送 P0 口,P0=1110 1100B=0xec 
 while(1) 
 ; //无限循环,防止程序“跑飞”
}

5. ʺ万能逻辑电路ʺ实验

        万能逻辑电路(Universal Logic Gate,简称ULG),顾名思义是一种具有多种基本逻辑运算功能的电路。在实验中,可以使用多种逻辑门电路的组合,实现任意逻辑函数的计算,因此也被称为“可编程逻辑门电路”(Programmable Logic Gate,简称PLG)。

实验具体流程:

  1. 准备实验器材和材料,包括逻辑门电路模块、电源、通用电路板、杜邦线、开关和数码管等。

  2. 根据所需逻辑函数的真值表,确定逻辑门的类型和连接方式,并用杜邦线将它们接在通用电路板上。

  3. 测试电路的正确性,将输入信号带入电路,观察输出结果,与真值表进行比对,确保电路计算正确。

  4. 可以将多个逻辑门电路模块和其他电路模块组合使用,实现更复杂的逻辑计算。

  5. 最后,将逻辑函数的结果显示在数码管上,以检查电路设计的正确性。

通过实验,可以更好地了解逻辑门电路的原理和工作方式,掌握逻辑设计的基本方法和技能。

#include<reg51.h> //包含单片机寄存器的头文件
sbit F=P1^4; //将 F 位定义为 P1.4 
sbit X=P1^5; //将 X 位定义为 P1.5 
sbit Y=P1^6; //将 Y 位定义为 P1.6 
sbit Z=P1^7; //将 Z 位定义为 P1.7 
void main(void) 
{ 
 while(1) 
 { 
 F=((~X)&Y)|Z; //将逻辑运算结果赋给 F 
 ; 
 } 
}

6.  总结

        用右移运算流水点亮 P1 口 8 位 LED
#include<reg51.h> //包含单片机寄存器的头文件
/***************************** 
函数功能:延时一段时间
*****************************/ 
void delay(void) 
{ 
 unsigned int n; 
 for(n=0;n<30000;n++) 
 ; 
} 
/***************************** 
函数功能:主函数
*****************************/ 
void main(void) 
{ 
 unsigned char i; 
 while(1) 
 { 
 P1=0xff; 
 delay(); 
 for(i=0;i<8;i++)//设置循环次数为 8 
 { 
 P1=P1>>1; //每次循环 P1 的各二进位右移 1 位,高位补 0 
 delay(); //调用延时函数
 } 
 } 
 
}

更多推荐:

时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集

Softmax 回归 基本原理 回归和分类&#xff0c;是两种深度学习常用方法。回归是对连续的预测&#xff08;比如我预测根据过去开奖列表下次双色球号&#xff09;&#xff0c;分类是预测离散的类别&#xff08;手写语音识别&#xff0c;图片识别&#xff09;。 现在我们已经对回…

redis运维(九)字符串(二)字符串过期时间

一 字符串过期时间 细节点&#xff1a; 注意命令的入参和返回值 ① 再谈过期时间 说明&#xff1a; 设置key的同时并且设置过期时间,是一个原子操作 ② ttl 检查过期时间 ③ persist 删除过期时间 ④ redis 删除过期key的机制 ⑤ 惰性删除 惰性理解&#xff1a;让过期…

自动驾驶-BEV感知综述

BEV感知综述 随着自动驾驶传感器配置多模态化、多源化&#xff0c;将多源信息在unified View下表达变得更加关键。BEV视角下构建的local map对于多源信息融合及理解更加直观简洁&#xff0c;同时对于后续规划控制模块任务的开展也更为方便。BEV感知的核心问题是&#xff1a; …

[Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例

写在前面 先检查自己有没有安装使用wget的命令&#xff0c;没有的话输入下面命令安装&#xff1a; apt-get install wget -y查看gcc的安装 sudo apt install gcc #安装gcc gcc --version #查看gcc是否安装成功 #若上述命令不成功使用下面的命令尝试之后再执行上面…

长短期记忆(LSTM)与RNN的比较:突破性的序列训练技术

长短期记忆&#xff08;Long short-term memory, LSTM&#xff09;是一种特殊的RNN&#xff0c;主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说&#xff0c;就是相比普通的RNN&#xff0c;LSTM能够在更长的序列中有更好的表现。 Why LSTM提出的动机是为了解…

【powershell】入门和示例

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 简介用途IDE解决此系统上禁止运行脚本 2️⃣ 语法3️⃣ 实战数据库备份执行循环拷贝文件夹 &#x1f6ec; 文章小结&#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2023-11-17操作系统Win10 - 22H21904…

Java JVM虚拟机

加载字节码文件.class 1字节一般为8位 字节码结构: 第一部分 4字节 cafebaby 第二部分 版本号 00 00 00 32, 第三部分 常量数量 count 第四部分常量池 常量类型表示: 继承关系改变 1.1以后 后面是属性方法 等参数 通过javap 反编译class ,javap xx.class javap -c xxx.…

【Redis】springboot整合redis(模拟短信注册)

要保证redis的服务器处于打开状态 上一篇&#xff1a; 基于session的模拟短信注册 https://blog.csdn.net/m0_67930426/article/details/134420531 整个流程是&#xff0c;前端点击获取验证码这个按钮&#xff0c;后端拿到这个请求&#xff0c;通过RandomUtil 工具类的方法生…

.nc格式文件的显示及特殊裁剪方式

最近我们遇到一个nc格式的文件&#xff0c;需要将它做成报告插图&#xff0c;bing搜索一番以后&#xff0c;了解到nc的全名为NetCDF(network Common Data Form)&#xff0c;是一种网络通用数据格式&#xff0c;广泛用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。…

【超好用的工具库】hutool-all工具库的基本使用

简介&#xff08;可不看&#xff09;&#xff1a; hutool-all是一个Java工具库&#xff0c;提供了许多实用的工具类和方法&#xff0c;用于简化Java开发过程中的常见任务。它包含了各种模块&#xff0c;涵盖了字符串操作、日期时间处理、加密解密、文件操作、网络通信、图片处…

指针传2(续集)

近期的天气是真的冷啊&#xff0c;老铁们一定要照顾好自己呀&#xff0c;注意防寒保暖&#xff0c;没有你们我怎么活啊&#xff01; 上次的指针2的末尾&#xff0c;给大家分享了两个有趣的代码&#xff0c;今天就先来讲一讲那两个代码&#xff1a; 两个有趣的代码&#xff1a;…

Logrotate日志切割工具的应用与配置

Logrotate日志切割工具的应用与配置&#xff0c;以下是公司生产环境亲测&#xff0c;跳了不少的坑&#xff0c;最后已经部署到生产了&#xff0c;可放心使用 简介 Logrotate是一个在Unix和类Unix系统&#xff08;如Linux&#xff09;上用于管理日志文件的实用程序。它可以帮助…

官宣定档 | 3大主题论坛重磅行业颁奖,CGT Asia 2024第五届亚洲细胞与基因治疗创新峰会特色亮点抢先看

细胞与基因治疗代表着未来医学发展的趋势&#xff0c;随着技术的不断更新与发展与支持政策的持续推出&#xff0c;细胞与基因治疗产业的希望被无限扩大&#xff0c;自第一批细胞治疗与基因治疗产品上市到如今&#xff0c;行业已经进入快车道&#xff0c;步入高速发展期&#xf…

如何确保消息不会丢失

本篇文章大家还可以通过浏览我的博客阅读。如何确保消息不会丢失 - 胤凯 (oyto.github.io)很多人刚开始接触消息队列的时候&#xff0c;最经常遇到的一个问题就是丢消息了。<!--more-->对于大部分业务来说&#xff0c;丢消息意味着丢数据&#xff0c;是完全无法接受的。 …

C语言--给定一行字符串,获取其中最长单词【图文详解】

一.问题描述 给定一行字符串,获取其中最长单词。 比如&#xff1a;给定一行字符串&#xff1a; hello wo shi xiao xiao su 输出&#xff1a;hello 二.题目分析 “打擂台算法”&#xff0c;具体内容小伙伴们可以参考前面的内容。 三.代码实现 char* MaxWord(const char* str)…

CMakeLists.txt基础指令与cmake-gui生成VS项目的步骤

简介 本博客主要介绍cmake的基本指令&#xff0c;同时&#xff0c;很多使用Visual Studio小白从Gitbub下载项目源码后&#xff0c;看到CMakeLists.txt&#xff0c;不知道如何使用Visual Studio编译源码&#xff1b;针对以上问题&#xff0c;做一下简单操作与解释&#xff0c;方…

c语言-数据结构-堆

目录 一、二叉树 1、二叉树的概念 2、完全二叉树和满二叉树 3、完全二叉树的顺序存储 二、堆 2、堆的概念与结构 3、堆的创建及初始化 4、堆的插入&#xff08;小堆&#xff09; 5、堆的删除 6、显示堆顶元素 7、显示堆里的元素个数 8、测试堆的各个功能 9、 实现堆…

零代码编程:用ChatGPT批量转换多个视频文件夹到音频并自动移动文件夹

有很多个视频文件夹&#xff1a; 要全部转成音频&#xff0c;然后复制到另一个文件夹。 在ChatGPT中输入如下提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量将Mp4视频转为Mp3音频的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;…

机器学习 天气识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/Nb93582M_5usednAKp_Jtw) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** >- **&#x1f680;…

matlab层次分析法模型及相关语言基础

发现更多计算机知识&#xff0c;欢迎访问Cr不是铬的个人网站 代码放在最后面! 这篇文章是学习层次分析法模型的笔记。 1.什么时候用层次分析法 层次分析法是建模比赛中最基础的模型之一&#xff0c;其主要用于解决评价类问题&#xff08;例如&#xff1a;选择哪种方案最好、…