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

2024-06-08 10:12

本文主要是介绍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);}       }

这篇关于51单片机通过键盘输入数值,控制流水灯的方向和速度。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041895

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用   判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程   ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)   ② 给按钮绑定点击事件(异步操作,POST请求)   ③ 事件中发送登录请求,使用 AJAX 方式提交。(使用 AJAX 原因:用户体验更好,既可保留用户刚输入的用户名和密码

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

高性能MYsql读书笔记-加快alter table操作的速度

alte tabe 会导致事务中断。 方法1  使用 alter column 代替 modify column  方法2  不推荐。。 ALTER TABLE      [  ALTER COLUMN    / MODIFY COLUMN  /  CHANGE COLUMN  ] ALTER TABLE sakila.film MODIFY COLUMN rental

MQTT之CONNECT控制报文详解

目录 1.  MQTT协议规范 2.  名词解释 3.  CONNECT控制报文详解 3.1  固定报头 Fixed header 3.2  可变报头 Variable header 3.2.1  协议名 Protocol Name 3.2.2  协议级别 Protocol Level 3.2.3  连接标志 Connect Flags 3.2.4  保持连接 Keep

redis增大查询速度(项目中实际应用举例)

1、关于保存User表的方案       1.1  使用Redis的Hash类型去保存关系型数据库的User表        1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid   value:json 数据 2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。 3

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

为何HBase速度很快?

为何HBase速度很快? HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的, 即由LSM-Tree(Log-Structured Merge-Tree) + HTable(region分区) + Cache决定——客户端可以直接定位到要查数据所在的HRegion server服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的。

基于动力学的六自由度机器人阻抗恒力跟踪控制

1.整个代码的控制流程图如下: 2.正逆运动学计算 略 3.动力学模型 采用拉格朗日法计算机械臂的动力学模型,其输入的是机械臂的关节角度、角速度和角加速度;其中M、C、G本别是计算的惯性力、科式力和重力项,相关部分如下: 4.RBF神经网络自适应参数调节 采用RBF自适应调节阻抗控制器参数,末端每个方向单独进行参数的调整,其中rbf的输入的是力和位置,输出的是阻抗控制器的参数,rb