80C51实现四种流水灯流水灯 | 自用学习笔记

news2024/11/26 2:33:30

单个流水灯 

#include <reg51.h>
#include <intrins.h> // 包含移位库函数的头文件

void delay(void) // 定义延时函数
{
	unsigned char i, j;
	for(i = 0; i < 200; i++) // 循环延时,延时约50ms
		for(j = 0; j < 125; j++);
}

void main(void)
 { 
	unsigned char i;
	P2 = 0xfe; // 初始状态,右侧 LED 亮,其余熄灭
	// P2的每一位设置成1、1、1、1、1、1、1、0。也就是说,P2的低位(即最右边的位)被设置为0,而其余的位都被设置为1
   while (1)
	{
		for(i = 0; i < 7; i++)
		{
			P2 = _crol_(P2, 1); // 使用 _crol_() 将 P2 左循环移位一位
			delay();
		}
		for(i = 0; i < 7; i++)
		{
			P2 = _cror_(P2, 1); // 使用 _cror_() 将 P2 右循环移位一位
			delay();
		}
	}
 }

双流水灯

#include <reg51.h>
#include <intrins.h> // 包含移位库函数的头文件

void delay(void) // 定义延时函数
{
	unsigned char i, j;
	for(i = 0; i < 200; i++) // 循环延时,延时约50ms
		for(j = 0; j < 125; j++);
}

void main(void)
 { 
	unsigned char i;
	P2 = 0xfc; // 初始状态,右侧 LED 亮,其余熄灭
	// P2的每一位设置成1、1、1、1、1、1、0、0。
   while (1)
	{
		for(i = 0; i < 3; i++)
		{
			P2 = _crol_(P2, 2); // 使用 _crol_() 将 P2 左循环移位2位
			delay();
		}

		for(i = 0; i < 3; i++)
		{
			P2 = _cror_(P2, 2); // 使用 _cror_() 将 P2 右循环移位2位
			delay();
		}
	}
 }

按键流水灯

        要求按下K1开启流水灯(默认从上到下),按下K2关闭流水灯,按下K3流水灯从上到下,按下K4流水灯从下到上。由于延时函数的设置,K2,K3,K4都要长按。

#include<reg51.h>
#include <stdio.h>

unsigned char led[] = {0xfe, 0xfd, 0xfb, 0xf7}; // LED的编码数据

void delay(unsigned char time) {
    unsigned int j = 10000;
    for (; time > 0; time--) {
        for (; j > 0; j--);
    }
}

void main(void) {
    bit dir = 0, run = 0; // 标志位定义及初始化
    char i;
    
    while (1) {
        switch (P0 & 0x0f) { // 读取键值
            case 0x0e: 
                run = 1;
                dir = 1; 
                break; // K1动作,设run=dir=1
            case 0x0d: 
                run = 0; 
                break; // K2动作,设run=0
            case 0x0b: 
                dir = 1;
                break; // K3动作,设dir=1
            case 0x07: 
                dir = 0;
                break; // K4动作,设dir=0
        }
        
        if (run) { // 若run=dir=1,自上而下流动
            if (dir) {
                for (i = 0; i <= 3; i++) {
                    P2 = led[i];
                    delay(200);
                }
            } else { // 若run=1,dir-0,自下而上流动
                for (i = 3; i >= 0; i--) {
                    P2 = led[i];
                    delay(200);
                }
            }
        } else {
            P2 = 0xff; // 若run-0,灯全灭 
        }
    }
}

对应按键灯亮

#include<reg51.h>
void main()
{
	char key = 0;	
	while(1)
	{
		key = P0&0x0f; // 读取按键状态
		if(key!=0x0f) 	P2 = key; // 输出到LED
	}
}

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

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

相关文章

代码随想录算法训练营Day41|LC343 证书拆分LC96 不同的二叉搜索树

一句话总结&#xff1a;初看觉得难&#xff0c;过几天再做依旧觉得不简单。 原题链接&#xff1a;343 整数拆分 拿到题乍一看两眼一抹黑。还是看题解吧。首先确定动规数组及下标的含义。这里就设置dp[i]为正整数i的最大乘积。 然后确定递推关系式。对于怎么求i的最大乘积&…

CCIE-01-VLAN-Trunk

目录 实验条件网络拓朴逻辑拓扑物理拓扑实验目的 开始配置配置SW1配置SW2检验证配置结果 实验条件 网络拓朴 逻辑拓扑 物理拓扑 实验目的 SW1和SW2之间的E2/0-3配置为trunk&#xff0c;使用802.1q协议&#xff0c;不需要配置捆绑根据逻辑图和物理图标识&#xff0c;使得R1~R7…

电力设备热设计原理(二)

本篇为西安交通大学本科课程《电力设备设计原理》的笔记。 本篇为这一单元的第二篇笔记。上一篇传送门。 电力设备传导换热 主要讨论稳态导热的计算。 通过单层和多层平壁的传导 如上图所示的大平板是一维传导问题&#xff0c;流过平板的热流量和平板两侧温度和平板厚度之间…

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候&#xff0c;势必会学到误差反向传播&#xff0c;它对于神经网络的意义极其重大&#xff0c;它是训练多层前馈神经网络的核心算法&#xff0c;也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播&#xff0c;不妨借助一个工具——计…

软件心学格物致知篇(5)愿望清单上篇

愿望清单 前言 最近发现愿望清单是一个很有意思的词&#xff0c;结合自己的一些过往经验得到一点点启发。 我发现在众多领域都有东西想伪装成它。 比如一些企业的企业战略&#xff0c;比如客户提出的一些软件需求&#xff0c;比如一些系统的架构设计指标&#xff0c;比如一…

k8s练习-创建一个Deployment

创建Deployment 创建一个nginx deployment [rootk8s-master home]# cat nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:selector:matchLabels:app: nginx # 配置pod的labelsreplicas: 2 # 声明2个副本template:metada…

2024.3.26 ARM

SPI相关理论 概述 SPI&#xff0c;是Serial Peripheral interface的缩写&#xff0c;是串行外围设备接口&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为P…

数字孪生|山海鲸数据管家简介及安装步骤

哈喽,大家好啊,我是雷工! 最近在学习数字孪生相关的软件山海鲸,了解到采集Modbus协议需要先安装山海鲸数据管家,本节先学习数据管家及安装步骤,以下为学习笔记: 1、简介 数据管家是帮用户进行数据管理与转发的软件,能够解决山海鲸可视化等软件对数据接入过程中的许多…

实体机双系统安装

实体机双系统安装 第一步&#xff1a;下载openKylin镜像 前往官网下载x86_64的镜像&#xff08;https://www.openkylin.top/downloads/628-cn.html&#xff09; tips&#xff1a;下载完镜像文件后&#xff0c;请先检查文件MD5值是否和官网上的一致&#xff0c;如果不一致请重…

【python基础教程】2. 算法的基本要素与特性

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python基础教程 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、…

Java中常见的锁策略

目录 乐观锁 vs 悲观锁 悲观锁: 乐观锁&#xff1a; 重量级锁 vs 轻量级锁 ⾃旋锁&#xff08;Spin Lock&#xff09; 公平锁 vs 非公平锁 可重⼊锁 vs 不可重入锁 读写锁 乐观锁 vs 悲观锁 悲观锁: 总是假设最坏的情况&#xff0c;每次去拿数据的时候都认为别…

蓝桥杯第1593题——二进制问题

题目描述 小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗&#xff1f; 输入描述 输入一行包含两个整数 N 和 K。 输出描述 输出一个整数表示答案。 输入输出样例 示例 输入 7 2输出 3评测用例规模与约定 对于 30% …

YOLOv9改进策略 :主干优化 | 极简的神经网络VanillaBlock 实现涨点 |华为诺亚 VanillaNet

💡💡💡本文改进内容: VanillaNet,是一种设计优雅的神经网络架构, 通过避免高深度、shortcuts和自注意力等复杂操作,VanillaNet 简洁明了但功能强大。 💡💡💡引入VanillaBlock GFLOPs从原始的238.9降低至 165.0 ,保持轻量级的同时在多个数据集验证能够高效涨点…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

NRF52832修改OTA升级时的bootloader蓝牙MAC

NRF52832在OTA升级时&#xff0c;修改了APP的蓝牙MAC会导致无法升级&#xff0c;原因是OTA程序的蓝牙MAC没有被修改所以手机扫描蓝牙时无法连接 解决办法 在bootloader的程序里面加入修改蓝牙mac地址的代码实现原理&#xff1a; 在bootloader蓝牙广播开启之前修改蓝牙mac 通…

Java 处理Mysql获取树形的数据

Mysql数据&#xff1a; 代码如下&#xff1a; Entity&#xff1a; Data Accessors(chain true) public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTim…

基于SSM+Jsp+Mysql的固定资产管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

linux系统中启动MyCat问题总结

最近在深入学习mysql的底层原理和应用&#xff0c;今天在学习分库分表操作的时候&#xff0c;由于一些配置问题&#xff0c;导致无法正常启动MyCat。最终通过GPT和其他博客将问题解决了&#xff0c;以下是一篇关于MyCat启动异常的解决方案。 1.思路&#xff1a; 配置问题其实…

python练习二

# Demo85def pai_xu(ls_test):#创建一个列表排序函数命名为pai_xu# 对创建的函数进行注释"""这是一个关于列表正序/倒序排列的函数:param ls_test: 需要排序的列表:return:"""ls1 [int(ls_test[i]) for i in range(len(ls_test))]#对input输入的…

求组合数I(acwing)

题目描述&#xff1a; 给定n组询问&#xff0c;每组询问给定两个整数a&#xff0c;b&#xff0c;请你输出Ca^b mod(1e97)的值。 输入格式: 第一行包含整数n。 接下来n行&#xff0c;每行包含一组a和b。 输出格式: 共n行&#xff0c;每行输出一个询问的解。 …