嵌入式学习——51单片机——(流水灯、数码管)day16

news/2025/1/16 2:34:20/

1. 位运算在单片机中的使用

      & : 按位与   (与0得0、与1不变)(全1为1,有0得0)指定位置0

            1. 让一个字节第n位(从右往左第n位)置0

                P0 &= ~(1 << n); 

             2. 让一个字节第n位(从右往左第n位)和第m位(从右往左第m位)置0:

                P0 &= ~((1 << n) | (1 << m));

            3. 判断一个字节某一位是否为1

int i = 0xaaaaaaaa;if ((i & (1 << n) != 0)
{printf("第n位是 1 \n");
}else
{printf("第n位是 0 \n");
}

            4. 判断一个字节某一位是否为0

int i = 0xaaaaaaaa;if ((i & (1 << n)) == 0)
{printf("第n位是 0 \n");
}else
{printf("第n位是 1 \n");
}

       | : 按位或 (或1得1、或0不变)(全0为0,有1得1)指定位置1

            1. 让一个字节第n位(从右往左第n位)置1:

                P0 |= (1 << n);

            2. 让一个字节第n位(从右往左第n位)和第m位(从右往左第m位)置1:

                P0 |=  ((1 << n) | (1 << m));

      ^ :按位异或 (相同为0、相异为1)    (异或1翻转原位, 异或0原位不变)      指定位翻转

            1.  num ^ num == 0        num ^ 0 == num

            2. 让一个字节整体翻转

                 P0 ^= 0XFF;  

        <<       左移       放大:乘以2^n

        >>       右移       缩小:除以2^n

        ~        按位取反

2. 单片机流水灯程序

        1. 主函数

#include <reg51.h>
#include "led.h"void delay(unsigned int n)
{while (n--);
}int main(void)
{while (1){int i = 0;for (i = 0; i < 8; i++){led_on_n(i);delay(0xffff);}for (i = 7; i >= 0; i--){led_on_n(i);delay(0xffff);}	}return 0;
}

        2. 头文件

#ifndef _LED_H_
#define _LED_H_extern void init_led(void);
extern void led_all_on(void);
extern void led_all_off(void);
extern void led_all_nor(void);
extern void led_on_n(unsigned int n);#endif

        3. 源文件

#include <reg51.h>
#include "led.h"void init_led(void)
{P2 = 0XFF;
}void led_all_on(void)
{P2 = 0;
}void led_all_off(void)
{P2 = 0XFF;
}void led_all_nor(void)
{P2 ^= 0XFF;
}void led_on_n(unsigned int n)
{P2 = ~(1 << n);
}

3. 单片机数码管程序

        1. 主函数

#include <reg51.h>
#include "digit.h"void delay(unsigned int n)
{while (n--);
}int main(void)
{int cnt = 0;int n = 0;while (1){cnt = 0x5f;while (cnt != 0){show_number(n);cnt--;			}n++;}return 0;
}

        2. 头文件

#ifndef _DIGIT_H_
#define _DIGIT_H_extern void display(int digit, int n);
extern void show_number(unsigned int n);#endif

        3. 源文件

#include <reg51.h>
#include "digit.h"void display(int digit, int n)
{unsigned char a[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};P1 &= ~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));P1 |= (1 << digit);P0 = a[n];
}void show_number(unsigned int n)
{int i = 0;int j = 0;while (n != 0){i = n % 10;n /= 10;display(j++, i);}
}

                    


http://www.ppmy.cn/news/1458932.html

相关文章

win32操作windows应用(未完成)

win32 脚本制作 一 、获取窗口句柄 首先获取句柄&#xff0c;其次扫描组件&#xff0c;然后对按钮和文本进行操作 安装依赖 pip install pywin32 -i https://pypi.doubanio.com/simple扫描全部的句柄 import win32gui# GetDesktopWindow 获得代表整个屏幕的一个窗口&#…

政务热线系统让政府服务更接地气

一、引言 随着社会的快速发展和民众需求的日益增长&#xff0c;政府面临着巨大的挑战。政府需要更好地倾听民众的声音&#xff0c;关注民众的关切&#xff0c;并采取相应的措施回应民众的需求。而政府热线系统作为一种重要的沟通渠道&#xff0c;在提升政府服务质量、增强政府…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

Kubernetes Cluster IP,Node IP,Pod IP间通信原理解析

目录 1、Cluster IP2、Node IP3、NodePort4、Pod IP5、LoadBalancer6、三种IP间通信6.1、Pod IP 与 Pod IP 通信6.2、Pod IP 与 Cluster IP 通信6.3、Node IP 与 Pod IP 通信6.4、Node IP 与 Cluster IP 7、YAML 示例7.1、ClusterIP Service7.2、LoadBalancer Service 1、Clust…

clickhouse学习笔记06

ClickHouse的建表和引擎选择思路讲解 ClickHouse的常见注意事项和异常问题排查 ClickHouse高性能查询原因剖析-稀疏索引 ClickHouse高性能写入剖析-LSM-Tree存储结构

【Python时序预测系列】一文搞明白时序数据输入到LSTM模型的格式(案例解读)

这是我的第276篇原创文章。 一、引言 前面我介绍了多个方法实现单变量和多变量时序数据的单站点单步预测&#xff0c;好多小伙伴最近问我这个LSTM模型数据的输入的格式是怎么样的&#xff0c;今天我专门写一篇文章来聊一聊这个问题&#xff0c;希望对大家有所启发和帮助。 二、…

每日两题 / 104. 二叉树的最大深度 102. 二叉树的层序遍历(LeetCode热题100)

104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 递归判断&#xff0c;当前节点的最大深度为1 max(左节点的最大深度&#xff0c;右节点的最大深度) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

商业写字楼如何选择停车场管理系统?停车场管理系统建设有哪些注意事项

在现代商业环境中&#xff0c;写字楼停车场的高效管理对于维护企业形象、提高员工满意度以及增强客户体验至关重要。写字楼停车场管理的特点主要包括高流量、高周转率、多样化的车辆类型、高安全性要求以及对客户体验的重视&#xff0c;那么商业写字楼停车场应该从哪些方面提升…