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

单个流水灯 

#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
	}
}

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

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

相关文章

C++ 注册Nacos

下载源码&#xff1a; git clone GitHub - nacos-group/nacos-sdk-cpp: C client for Nacos 编译源码 cd nacos-sdk-cpp cmake . make 生成库文件 在nacos-sdk-cpp 下 注册nacos 将include 和libnacos-cli.so libnacos-cli-static.a 放入你的工程 如果Nacos服务地址:…

C++ list

文章目录 list的介绍及使用list的介绍list的构造list iterator的使用list capacitylist element accesslist modifiers list模拟实现list节点类list迭代器类list类 list深度剖析list迭代器失效list反向迭代器 list与vector对比 list的介绍及使用 list的介绍 1.list的底层是双向…

yolov5目标检测可视化界面pyside6源码(无登录版)

一、软件简介&#xff1a; 这是基于yolov5-7.0目标检测实现的的可视化目标检测源码 本套项目没有用户登录的功能&#xff0c;如需用户登录版&#xff0c;看另一篇文章&#xff1a;yolov5pyside6登录用户管理目标检测可视化源码_yolov5用户登入功能-CSDN博客 ①程序中图片和图标…

2024年04月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

02-JDK新特性-泛型

泛型 什么是泛型 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制&#xff0c;该机制允许在编译是检测到非法的类型。 它的本质是参数化类型&#xff0c;也就是说操作的数据类型被指定为一个参数。 也就是将类型有原来的具体类型参数化&#xff0c;然后在…

MySQL 优化及故障排查

目录 一、mysql 前置知识点 二、MySQL 单实例常见故障 故障一 故障二 故障三 故障四 故障五 故障六 故障七 故障八 三、MySQL 主从故障排查 故障一 故障二 故障三 四、MySQL 优化 1.硬件方面 &#xff08;1&#xff09;关于 CPU &#xff08;2&#xff09;关…

使用虚拟引擎为AR体验提供动力

Powering AR Experiences with Unreal Engine ​​​​​​​ 目录 1. 虚拟引擎概述 2. 虚拟引擎如何为AR体验提供动力 3. 虚拟引擎中AR体验的组成部分是什么&#xff1f; 4. 使用虚拟引擎创建AR体验 5. 虚拟引擎中AR的优化提示 6. 将互动性融入AR与虚拟引擎 7. 在AR中…

Java项目:83 springboot知识管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本知识管理系统有管理员和用户两个角色。 管理员功能有个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章信息管理&…

Excel 数据-分列的三个经常用法

Case 1 &#xff1a;有时候数据导出时如果没有电子表格的话&#xff0c;只能导出本地文件&#xff0c;如下图情况&#xff1a; 可以使用数据-分列处理数据&#xff1a; 原来是因为SAP导出数据没有完成的原因&#xff0c;或者关闭Excel重新打开试一下。 重新打开后可以输入了 C…

NoSQL之 Redis配置

目录 关系数据库与非关系型数据库 关系型数据库&#xff1a; ●非关系型数据库 关系型数据库和非关系型数据库区别&#xff1a; &#xff08;1&#xff09;数据存储方式不同 &#xff08;2&#xff09;扩展方式不同 对事务性的支持不同 非关系型数据库产生背景 Redis简介…

C++初阶:5.STL简介(了解)

STL简介&#xff08;了解&#xff09; 一.什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 二. STL的版本 原始版本 Alexander Stepan…

绝地求生:Anti-ESP推进对于PUBG哪些影响?

大家好&#xff0c;我是闲游盒。近期&#xff0c;PUBG开发团队开发信介绍了反作弊团队讨论的新话题 - ESP&#xff08;Extra Sensory Perception&#xff09;。在详细看完开发信以后&#xff0c;今天跟大家简单聊聊关于Anti-ESP。 ESP是一种非法软件&#xff0c;允许玩家在游戏…

MacBook 访达使用技巧【mac 入门】

快捷键 打开访达搜索窗口默认快捷键【⌥ ⌘ 空格键】可以在键盘【系统偏好设置 -> 键盘->快捷键->聚焦】修改 但是我不会去修改它&#xff0c;因为我不常用访达的搜索窗口&#xff0c;更多的是想快速打开访达文件夹窗口&#xff0c;可以通过第三方软件定义访达的快…

计算机视觉新巅峰,微软牛津联合提出MVSplat登顶3D重建

开篇&#xff1a;探索稀疏多视图图像的3D场景重建与新视角合成的挑战 3D场景重建和新视角合成是计算机视觉领域的一项基础挑战&#xff0c;尤其是当输入图像非常稀疏&#xff08;例如&#xff0c;只有两张&#xff09;时。尽管利用神经场景表示&#xff0c;例如场景表示网络&a…

鸿蒙OS开发教学:【编程之重器-装饰器】

HarmonyOS 有19种装饰器 必须【2】 绘制一个页面&#xff0c;这两个肯定会用到 EntryComponent 可选【17】 StatePropLinkObjectLinkWatchStylesStoragePropStorageLinkProvideConsumeObservedBuilderBuilderParamLocalStoragePropLocalStorageLinkExtendConcurrent 如果…

C# 排序的多种实现方式(经典)

一、 对数组进行排序 最常见的排序是对一个数组排序&#xff0c;比如&#xff1a; int[] aArray new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 }; 1、利用冒泡排序进行排序&#xff1a; &#xff08;即每个值都和它后面的数值比较&#xff0c;每次拿出最小值&#xff09; s…

JavaEE初阶-线程3

文章目录 一、线程安全问题-内存可见性二、等待通知2.1 wait()方法2.2 notify()方法 一、线程安全问题-内存可见性 import java.util.Scanner;public class Demo27 {private static int count0;//下面这段代码会出现内存的可见性问题//将从内存中读取count值的操作称为load 判…

MySQL常见故障案例与优化介绍

前言 MySQL故障排查的意义在于及时识别并解决数据库系统中的问题&#xff0c;确保数据的完整性和可靠性&#xff1b;而性能优化则旨在提高数据库系统的效率和响应速度&#xff0c;从而提升用户体验和系统整体性能。这两方面的工作都对于保证数据库系统稳定运行、提升业务效率和…

总结:微信小程序中跨组件的通信、状态管理的方案

在微信小程序中实现跨组件通信和状态管理,有以下几种主要方案: 事件机制 通过事件机制可以实现父子组件、兄弟组件的通信。 示例: 父组件向子组件传递数据: 父组件: <child binddata"handleChildData" /> 子组件: Component({..., methods: { handleChildData(…

【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令

【经验分享】Ubuntu下如何解决问题arm-linux-gcc&#xff1a;未找到命令 前言问题分析解决方法 前言 在编译过程中发现一个问题&#xff0c;明明之前安装了gcc-4.6版本&#xff0c;版本信息都是正常显示的&#xff0c;刚安装上去的时候也是可以用的。但不知道什么原因突然不能…