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

相关文章

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、