键控流水灯

news2025/1/16 1:35:00

项目文件

文件

关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 IO口编写

 


在电路图的基础上,编写可键控的流水灯程序要求实现的功能为,K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动,且全部灯灭;当K3 按下时使灯由上往下流动,K4则使灯由下往上流动。

在这里插入图片描述
思路分析:

当K1~ K4分别按下时,经(P0 & 0xf)运算得到的应键值分别为0x0e0x0d0x0b0x07,而无键按下时的键值为0x0f

显然,按键状态可以依据(PO&0x0f)是否等于 0xof 来进行判断。为此,可采用根据键值修改标志位,再根据标志位控制 LED灯状态的编程思路,即设置两个标志位:启停标志 run (=1 表示启动,=0 表示停止),方向标志 dir(=1表示自上而下循环,=0表示自下而上循环)

在这里插入图片描述

获取按键状态:

在这里插入图片描述
根据按键状态值来修改标志位:

  • run=1:开始(自下而上)
  • run=0:结束
  • dir=0:自下而上
  • dir=1:自上而下
	switch (P0 & 0x0f){			 	//读取键值
			case 0x0e:run=1;break;		//K1动作,设run=1
			case 0x0d:run=0,dir=0;break;//K2动作,设run=dir=0
			case 0x0b:dir=1;break;		//K3动作,设dir=1
			case 0x07:dir=0;break;	    //K4动作,设dir=0

LED的工作状态可由存放在一个数组中的数据控制。本例电路中LED为低电平驱动,故花样数据中输出0电平对应着灯亮,输出1电平对应着灯灭,即:

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

自上而下和自下而上时的彩灯循环可以采用如下for 循环语句实现,即:

	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"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7};//LED灯的亮灯数据
void delay(unsigned char time){ 	     //延时函数
	unsigned int j=15000;
	for(;time>0;time--)
		for(;j>0;j--);
} 

void main(){ 
	bit dir=0,run=0;				    //标志位定义及初始化
	char i;
	while(1){ 
		switch (P0 & 0x0f){			 	//读取键值
			case 0x0e:run=1;break;		//K1动作,设run=1
			case 0x0d:run=0,dir=0;break;//K2动作,设run=dir=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,灯全灭
	}
}

结果:

在这里插入图片描述

运行视频:

单片机C51-键控流水灯

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

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

相关文章

ASK,FSK和PSK

一、ASK&#xff0c;FSK和PSK 数字信号只有有限个离散值&#xff0c;使用数字信号对载波进行调制的方式称为键控(Keying),分为幅度键控&#xff08;ASK)、频移键控&#xff08;FSK)和相移键控&#xff08;PSK)。 幅度键控可以通过乘法器和开关电路来实现&#xff0c;在数字信…

SpringBoot【开发实用篇】---- 配置高级

SpringBoot【开发实用篇】---- 配置高级 1. ConfigurationProperties2. 宽松绑定/松散绑定3. 常用计量单位绑定4. 校验5. 数据类型转换 进入开发实用篇第二章内容&#xff0c;配置高级&#xff0c;其实配置在基础篇讲了一部分&#xff0c;在运维实用篇讲了一部分&#xff0c;这…

离线安装Percona

前言 安装还是比较简单&#xff0c;这边简单进行记录一下。 版本差异 一、离线安装Percona 下载percona官网 去下载你需要对应的版本 jemalloc-3.6.0-1.el7.x86_64.rpm 需要单独下载 安装Percona 进入RPM安装文件目录&#xff0c;执行下面的脚本 yum localinstall *.rpm修改…

C语言CRC-16 X25格式校验函数

C语言CRC-16 X25格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同应用规范通过对输…

聊聊Doris向量化执行引擎-过滤操作

聊聊Doris向量化执行引擎-过滤操作 Doris是开源的新一代极速MPP数据库&#xff0c;和StarRocks同源&#xff0c;采用全面向量化技术&#xff0c;充分利用CPU单核资源&#xff0c;将单核执行性能做到极致。本文&#xff0c;我们聊聊过滤操作是如何利用SIMD指令进行向量化操作。 …

PCB设计流程步骤中的注意事项

PCB中文名称为印制电路板&#xff0c;又称印刷线路板&#xff0c;几乎所有电子设备中都会应用到PCB。这种由贵金属制成的绿色电路板连接了设备的所有电气组件&#xff0c;并使其能够正常运行。PCB原理图是一个计划&#xff0c;是一个蓝图。它说明的并不是组件将专门放置在何处&…

【51单片机HC6800-EM3 V3.0】动态数码管显示,原理分析,连线操作

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;提醒 &#x1f38a;连线图片 &#x1f38a;原理…

基于SSM框架扶贫信息综合平台前台管理系统(spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架扶贫信息综合平台前台管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

【刷题】138. 复制带随机指针的链表

138. 复制带随机指针的链表 一、题目描述二、示例三、实现 138. 复制带随机指针的链表 一、题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝…

Matlab论文插图绘制模板第90期—带权重的有向图/图论图/网络图

在之前的文章中&#xff0c;分享了Matlab有向图的绘制模板&#xff1a; 进一步&#xff0c;如果我们想标注有向图的每条边的权重&#xff0c;或者直接用线条的粗细来表示权重&#xff0c;该怎么操作呢&#xff1f; 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内…

洛谷P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II(离线区间逆序对+莫队二次离线)

题目 给你一个长为n(1<n<1e5)的序列a(0<ai<1e9)&#xff0c; m(1<m<1e5)次询问&#xff0c;每次查询一个区间[l,r]的逆序对数&#xff0c;可离线。 思路来源 登录 - 洛谷 三道经典分块题的更优复杂度解法&[Ynoi2019模拟赛]题解 - 博客 - OldDriverT…

(异或相消)猫猫数字异或和

E - Red Scarf (atcoder.jp) 刚入坑写的一道题被我拉出来对比分析了 我的思路&#xff1a; 垃圾运气选手凭借直觉乱搞猜出来的&#xff0c;没有思路。 题解思路&#xff1a; 由问题陈述中XOR的定义&#xff0c;我们可以看出计算3个或更多整数的XOR可以以任意顺序进行&#…

fastjson 代码执行 (CNVD-2017-02833)

漏洞存在原因 在fastjson<1.2.24版本中&#xff0c;在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单。 漏洞复现过程如下 在vulfocu…

解读ChatGPT中的RLHF

无论是 ChatGPT 还是 GPT-4&#xff0c;它们的核心技术机制之一都是基于人类反馈的强化学习&#xff08;Reinforcement Learning from Human Feedback&#xff0c;RLHF&#xff09;。这是大型语言模型生成领域的新训练范式&#xff0c;即以强化学习方式依据人类反馈优化语言模型…

打造属于自己的私人云笔记

打造属于自己的私人云笔记 前言效果环境标题第一步 网盘部署开启webDAV协议使用 前言 现在市面上支持私有化部署的云笔记选择不多&#xff0c;而且大多数只支持mackDown语法&#xff0c;不支持word等其他文件的编辑&#xff0c;基于此需求&#xff0c;能不能有一款笔记软件&am…

盛元广通高等级生物安全实验室(P3)管理系统

近年来&#xff0c;传染性疾病频发&#xff0c;给传染病防控和生物安全带来了前所未有的挑战&#xff0c;重点构建集生物安全三级实验室&#xff0c;统一布局科技研究和科技力量&#xff0c;成为重要传染病原和生物防范基础及应用基础研究的高地&#xff0c;高等级生物安全实验…

JavaScript实现输入长方形的宽和高,输出周长和面积的代码

以下为实现输入长方形的宽和高&#xff0c;输出周长和面积的代码和运行截图 目录 前言 一、实现输入长方形的宽和高&#xff0c;输出周长和面积 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 输入数值不是要求必须输入数值的代码 1.5 运行截图 前言 1.若…

这款视频录制剪辑软件千万别错过!

案例&#xff1a;有没有录制完成之后&#xff0c;可以直接剪辑视频的软件&#xff1f; 【我的工作经常需要对电脑上的内容进行录制、剪辑。我每次都需要使用录屏工具录制完成后&#xff0c;再使用视频剪辑工具进行剪辑&#xff0c;十分麻烦。想问一下有没有软件既能录屏又能剪…

WGCNA | 不止一个组的WGCNA怎么分析嘞!?~(一)(共识网络分析-第一步-数据整理)

1写在前面 最近又是忙碌的一米&#xff0c;做不完的手术&#xff0c;收不完的病人&#xff0c;前途堪忧&#xff0c;收入更是不堪入目。&#x1f972; 把之前的WGCNA教程再补一补吧&#xff0c;之前介绍的是雌性鼠的表型数据分析&#xff0c;只有一组&#xff0c;相对简单。&am…

elk生命周期删除日志

elk版本&#xff1a;7.14 一、简介 ELK日志我们一般都是按天存储&#xff0c;例如索引名为"prodlog-2023-05-08"&#xff0c;因为日志量所占的存储是非常大的&#xff0c;我们不能一直保存&#xff0c;而是要定期清理旧的&#xff0c;这里就以保留7天日志为例。 自…