51单片机通过键盘输入数值,控制流水灯的方向和速度。

1、功能描述

通过键盘输入数值,控制流水灯的方向和速度

2、实验原理

键盘输入原理: 键盘通常通过矩阵形式连接到单片机的I/O端口。当用户按下某个按键时,会改变键盘矩阵中对应行和列的电平,单片机通过检测这些变化来确定哪个按键被按下。通过编程,单片机可以根据检测到的按键信号执行相应的操作,如改变流水灯的方向或调整速度。

控制流水灯方向:中断机制的应用,中断是单片机处理异步事件的一种机制。在流水灯实验中,可以利用外部中断或定时器中断来响应键盘输入事件。当检测到按键输入时,单片机会暂停当前的流水灯程序执行,转而执行中断服务程序来处理按键事件,如改变流水灯的方向或调整速度,处理完毕后再返回到主程序继续执行。根据键盘输入的数值,C51单片机可以判断用户希望流水灯的方向是向左还是向右。例如,当输入数值1时,表示流水灯向左移动;当输入数值2时,表示流水灯向右移动。

控制流水灯速度:C51单片机内部集成了定时器/计数器,可以用来产生精确的时间延迟或者计算时间间隔。在流水灯实验中,通过设置定时器的初值和模式,可以控制每次切换LED灯状态的时间间隔,从而控制流水灯的速度。根据键盘输入的数值,C51单片机可以判断用户希望流水灯的速度是快还是慢。例如,当用户输入数值3时,表示流水灯以较快的速度移动;当用户输入数值4时,表示流水灯以较慢的速度移动。

控制流水灯的实现:流水灯是由多个LED灯组成的,它们可以按照一定的顺序依次点亮和熄灭,从而形成流水的效果。单片机通过控制每个LED灯所连接的I/O端口的高低电平,来控制LED灯的亮灭状态。通过改变控制顺序和延时时间,可以实现不同方向和速度的流水效果。

3、编程思路

·  实现了一个延时函数delay10ms,用于控制流水灯的速度。

·  实现了一个流水灯控制函数Ledrun,根据传入的参数控制流水灯的方向和速度。

·  实现了一个键盘检测函数keydown,用于检测按键输入并根据按键值设置流水灯的控制参数。

·  在main函数中,不断调用keydown函数检测按键,根据按键值keyvalue控制流水灯的方向、是否运行以及速度,并调用Ledrun函数实现流水灯效果。

4、代码

#include "reg52.h"
#include <intrins.h>typedef unsigned char u8;
typedef unsigned int u16;
unsigned char ledlight[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 keyvalue=0;
int i=0,x=0,y=0;
unsigned char LED=0xFE;
#define GPIO_KEY P1
void delay10ms(u8 i)
{unsigned char a,b,c;for(;i>0;i--){for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}
}
void Ledrun(int b,int c){if(b==0){P2=ledlight[i];delay10ms(c*20);P2=0xff;i++;if(i>7)i=0;}if(b==1){P2=ledlight[i];delay10ms(c*20);P2=0xff;i--;if(i<0)i=7;       }
}
void keydown()
{u8 a=0;       GPIO_KEY=0x0f;//0000 1111if(GPIO_KEY!=0x0f){delay10ms(1);if(GPIO_KEY!=0x0f){switch(GPIO_KEY){case(0x07):keyvalue=0;break;case(0x0b):keyvalue=1;break;case(0x0d):keyvalue=2;break;case(0x0e):keyvalue=3;break;}GPIO_KEY=0xf0;switch(GPIO_KEY){case(0x70):keyvalue=keyvalue;break;case(0xb0):keyvalue=keyvalue+4 ;break;case(0xd0):keyvalue=keyvalue+8;break;case(0xe0):keyvalue=keyvalue+12;break;}}while(a<30&&GPIO_KEY!=0xf0){delay10ms(1);a++;}}}        
void main()
{    while(1){keydown();if(keyvalue==1){x=!x;}if(keyvalue==2){if(y==1)y=0;else y=1;}if(keyvalue==3){if(y!=2)y=2;               }keyvalue=0;Ledrun(x,y*3+1);}       }

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

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

相关文章

Python opencv读取深度图,网格化显示深度

效果图&#xff1a; 代码&#xff1a; import cv2 import osimg_path "./outdir/180m_norm_depth.png" depth_img cv2.imread(img_path, cv2.IMREAD_ANYDEPTH) filename os.path.basename(img_path) img_hig, img_wid depth_img.shape # (1080, 1920) print(de…

C# MemoryCache 缓存应用

摘要 缓存是一种非常常见的性能优化技术&#xff0c;在开发过程中经常会用到。.NET提供了内置的内存缓存类 MemoryCache&#xff0c;它可以很方便地存储数据并在后续的请求中快速读取&#xff0c;从而提高应用程序的响应速度。 正文 通过使用 Microsoft.Extensions.Caching.Me…

mqtt-emqx:设置遗嘱消息

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.eclipse…

OpenAI新成果揭秘语言模型神经活动:稀疏自编码器的前沿探索

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

手机自动化测试:6.某团文字的提取

我们要进行的操作重点就是文字的提取&#xff0c;然后循环&#xff0c;提取不是吗&#xff1f; try:# 使用XPath定位带有index属性的FrameLayout元素frame_layout_elements WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_all_elements_located((By.X…

搜索之道:信息素养与终身学习的新引擎

&#x1f4d1;前言 在这个信息如同潮水般涌来的时代&#xff0c;我们每天都在与海量的数据和信息打交道。无论是学习、工作还是生活&#xff0c;我们都渴望能够迅速、准确地找到我们所需的信息。然而&#xff0c;面对如此繁杂的信息海洋&#xff0c;如何高效、精准地搜索到我们…

【C语言训练题库】扫雷->简单小游戏!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码 4. 小结 1. 题目 小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵&#xff0c;他希望你帮他生成一个扫雷矩阵。 扫雷…

Matplotlib常见图汇总

Matplotlib是python的一个画图库&#xff0c;便于数据可视化。 安装命令 pip install matplotlib 常用命令&#xff1a; 绘制直线&#xff0c;连接两个点 import matplotlib.pyplot as plt plt.plot([0,5],[2,4]) plt.show() 运行结果如下&#xff1a; 多条线&#xff1a;…

速盾:服务器cdn加速超时如何解决?

在当今互联网时代&#xff0c;网站内容加载速度成为用户体验的重要指标之一。然而&#xff0c;由于网络环境的复杂性和服务器的负载压力&#xff0c;服务器CDN加速超时问题经常会出现。在这篇文章中&#xff0c;我们将讨论服务器CDN加速超时的原因和解决方法。 首先&#xff0…

巨擘之舞:探索AI大模型的发展历程与特性比较

巨擘之舞&#xff1a;探索AI大模型的发展历程与特性比较 文章目录 巨擘之舞&#xff1a;探索AI大模型的发展历程与特性比较引言1. GPT系列&#xff08;Generative Pre-trained Transformer&#xff09;发展历程优点缺点 2. BERT&#xff08;Bidirectional Encoder Representati…

学习笔记——路由网络基础——汇总静态路由

4、汇总静态路由 (1)定义 静态路由汇总&#xff1a;多条静态路由都使用相同的送出接口或下一跳 IP 地址。(将多条路由汇总成一条路由表示) (2)目的 1.减少路由条目数量&#xff0c;减小路由表&#xff0c;加快查表速度 2.增加网络稳定性 (3)路由黑洞以及路由环路的产生…

京准科技 | PTP时钟服务器(卫星主时钟)在预审系统应用

京准科技 | PTP时钟服务器&#xff08;卫星主时钟&#xff09;在预审系统应用 京准科技 | PTP时钟服务器&#xff08;卫星主时钟&#xff09;在预审系统应用 某某省公安厅以科技强警建设的重要目标&#xff0c;决定建立全国第一个全省联网的信息化公安预审系统&#xff0c;本文…

LeetCode题练习与总结:三角形最小路径和--120

一、题目描述 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &…

一次改SQLMAP的操作

前言 sqlmap这个工具&#xff0c;相信各位大佬们都不陌生&#xff0c;但sqlmap虽好&#xff0c;也时常会有些实际存在但无法注入的地方&#xff0c;这时候就需要我们改它的配置了&#xff0c;今天就以本人遇到的事件进行阐述。 正文 确认注入点 通过一系列测试最终确定这里…

循环语句大揭秘:while、do-while、for、foreach你都掌握了吗?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

招募来袭 | 与热爱技术的谷歌开发者一起创造精彩

写在前面 技术的进步在不断推动着世界发展。从 Android、Flutter 等产品的稳步更新迭代&#xff0c;到秉承着负责任的态度对 AI 进行探索&#xff0c;我们通过每一次的技术跃进&#xff0c;帮助大家打开新的视野&#xff0c;激发更多的灵感&#xff0c;将我们的工具和平台打造成…

css3 都有哪些新属性

1. css3 都有哪些新属性 1.1. 圆角边框 (border-radius)1.2. 盒子阴影 (box-shadow)1.3. 文本阴影 (text-shadow)1.4. 响应式设计相关属性1.5. 渐变背景 (gradient backgrounds)1.6. 透明度 (opacity 和 rgba/hsla)1.7. 多列布局 (column-count, column-gap, etc.)1.8. 变换 (t…

Android --- MVVM+DataBinding+Fragment+Retrofit+Adapter 简单示例

首先&#xff0c;我们将使用 Retrofit 进行网络请求&#xff0c;所以我们需要添加 Retrofit 的依赖。在你的 build.gradle 文件中添加以下依赖&#xff1a; implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.…

动态规划学习

1、背包DP 01 01 01背包&#xff1a;枚举物品然后枚举体积&#xff0c;体积从大到小枚举更新 f [ j ] m a x ( f [ j ] , f [ j − w ] v ) f[j]max(f[j],f[j-w]v) f[j]max(f[j],f[j−w]v).完全背包&#xff1a;枚举物品然后枚举体积&#xff0c;体积从小到大枚举更新 f [ j …

java(kotlin)和 python 通过DoubleCloud的kafka进行线程间通信

进入 DoubleCloud https://www.double.cloud 创建一个kafka 1 选择语言 2 运行curl 的url命令启动一个topic 3 生成对应语言的token 4 复制3中的配置文件到本地&#xff0c;命名为client.properties 5 复制客户端代码 对python和java客户端代码进行了重写&#xff0c;java改成…