首页 > 其他分享 >蓝桥杯单片机学习总结(Day4 独立按键实现LED流水灯)

蓝桥杯单片机学习总结(Day4 独立按键实现LED流水灯)

时间:2024-07-10 20:55:44浏览次数:16  
标签:P2 case LED temp Day4 unsigned 蓝桥 key 0x1f

标题一:实现独立按键输出

标题二:实现按键输出的效果

标题三:实验总结

 

 

        如图所示,S7、S6、S5、S4是独立按键一列,需要注意的是如果你的开发板独立按键和矩阵键盘是一体的如上图需要把引脚盖接到独立键盘那儿。

        P30~P33是矩阵键盘和独立按键的引脚在编程时我们直接对P3口后四位进行操作,可设一个变量temp=P3&0x0f,此时temp为0000 1111 ,0000 1110(0x0e)代表S7被按下,0000 1101(0x0d)代表S6被按下...,分别令其输出为1,2,3,4,如下代码:

unsigned char key_test()
{
    unsigned char test;
    unsigned char key_value=0xff;
    test=P3&0x0f;
    switch(test)
    {
        case 0x0e:{key_value=1;break;}
        case 0x0d:{key_value=2;break;}
        case 0x0b:{key_value=3;break;}
        case 0x07:{key_value=4;break;}
    }
    return key_value;
}

        接下来是对每个按键按下后输出所达到的效果进行编程,需要一个输入独立键盘所输出的值来实现:

void key_proc(key)
{
    unsigned char temp;
    switch(key)
    {
        case 1:{P2=((P2&0x1f)|0x80);temp++;P0=temp;P2&=0x1f;}
        case 2:{P2=((P2&0x1f)|0x80);temp--;P0=temp;P2&=0x1f;}
        case 3:{P2=((P2&0x1f)|0x80);temp+=2;P0=temp;P2&=0x1f;}
        case 4:{P2=((P2&0x1f)|0x80);temp-=2;P0=temp;P2&=0x1f;}
    }
}

        下面只需要补上主函数就可以了,以下是完整代码:

#include "reg52.h" //定义51单片机特殊功能寄存器
#include "absacc.h"
unsigned char temp1;
unsigned char key_test(void);
void key_proc(unsigned char key);

//关闭蜂鸣器
void cls_buzz()
{
	P2=((P2&0x1f)|0xa0);
	P0=0x00;
	P2&=0x1f;
}
//关闭LED
void cls_led()
{
	P2=((P2&0x1f)|0x80);
	P0=0xff;
	P2&=0x1f;
}

void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 108;
	j = 145;
	do
	{
		while (--j);
	} while (--i);
}
void main()
{
	unsigned char temp;
	cls_buzz();
	cls_led();
	while(1)
	{
		temp=key_test();
		if(temp!=0xff)
		{
			Delay10ms();  //按键消抖
			temp=key_test();
			if(temp!=0xff)
			{
				//进入按键处理函数
				key_proc(temp);
				while(P3!=0xff);  //等待按键释放
			}
		}
	}
}

//按键扫描
unsigned char key_test()
{
	unsigned char test;
	unsigned char key_value=0xff;
	test=P3&0x0f; //取后四位
	switch(test)
	{
		case 0x0e:{key_value=1;break;}//S7
		case 0x0d:{key_value=2;break;}//S6
		case 0x0b:{key_value=3;break;}//S5
		case 0x07:{key_value=4;break;}//S4
	}
	return key_value;
}
//按键处理函数
void key_proc(key)
{
	switch(key)
	{
		case 1:{P2=((P2&0x1f)|0x80);temp1++;P0=temp1;P2=0x1f;break;}
		case 2:{P2=((P2&0x1f)|0x80);temp1--;P0=temp1;P2=0x1f;break;}
		case 3:{P2=((P2&0x1f)|0x80);temp1+=2;P0=temp1;P2=0x1f;break;}
		case 4:{P2=((P2&0x1f)|0x80);temp1-=2;P0=temp1;P2=0x1f;break;}

	}
		
}

        实验总结: P3口后四位0000 abcd,abcd分别可操作S4、S5、S6、S7,配合对应一定的操作就可实现独立键盘对其他设备的操作。

 

标签:P2,case,LED,temp,Day4,unsigned,蓝桥,key,0x1f
From: https://blog.csdn.net/2302_80724534/article/details/140333443

相关文章

  • Day4|24. 两两交换链表中的节点 & 19.删除链表的倒数第N个节点 & 面试题 02.07. 链表
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。输入:head=[1,2,3,4]输出:[2,1,4,3]这题很简单就不写思路了publicListNodeswapPairs(ListNodehead){L......
  • Day43 |
    股票问题是一个动态规划的系列问题,前两题并不难,第三题有难度。121.买卖股票的最佳时机(只能买卖一次)视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77qhttps://programmercarl.com/0121.买卖股票的最佳时机.html给定一个数组prices,它的第i个元素prices[i]表示一支......
  • Failed to configure a DataSource: 'url' attribute is not specified and no embe..
    原文链接: https://www.cnblogs.com/javawxid/p/10949511.html问题原因:Mybatis没有找到合适的加载类,其实是大部分spring-datasource-url没有加载成功,分析原因如下所示.DataSourceAutoConfiguration会自动加载.没有配置spring-datasource-url 属性.spring......
  • 【升压恒流FP7208应用热门市场摄影灯-LED车灯-太阳能方案】如何实现升压恒流一切五调
    方案一:【RGBWY单IC五路调光方案】远翔FP7208满足锂电池1-4串供电、PD电压5-20V供电升压恒流一切五调光调色方案,PWM内部转模拟调光,无频闪顾虑低亮无抖动无频闪RGBWY五路调光芯片FP7208,适用PD+电池供电近年来随着技术的不断进步,越来越多的产品需要适应小型化和便携......
  • spark程序在hdfs集群执行,提示: “main“ org.apache.spark.SparkException: Failed to
    1.执行代码spark在hadoop上以集群模式执行代码bin/spark-submit\--masteryarn\--deploy-modecluster\--executor-memory1G\--total-executor-cores2\/root/word_count_cluster.py2.错误截图错误原因:找不到spark目录3.解决办法在/etc/profile文件中配置spa......
  • day4-linked list-part02-7.6
    taskfortoday1.24.两两交换链表中的节点2.19.删除链表的倒数第N个节点3.面试题02.07.链表相交4.142.环形链表II-------------------------------------------------------------------1.24.两两交换链表中的节点Inthispractice,payattentionto......
  • K8s 中 Pod OOMKilled 原因
    在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的ExitCode编码。 ExitCode137表明容器收到......
  • 串口通信&控制LED
    目录1.串口介绍2.硬件电路3.电平标准4.接口及引脚定义5.常见通信接口比较6.51单片机的UART7.串口参数及时序图8.串口模式图9.串口和中断系统10.串口相关寄存器11.串口向电脑发送数据12.电脑通过串口控制LED1.串口介绍串口是一种应用十分广泛的......
  • 蓝桥杯单片机学习总结(Day1 实现LED闪烁)
    标题一:通过SM74HC138译码器打开控制8个LED灯的寄存器标题二:编程思路标题三:总结 打开LED寄存器: 由开发板的原理图可知其8个LED灯的寄存器开关为SM74HC138译码器(以下用38译码器称代)的Y4口,该38译码器的输入端P25~P27,其分别对应P25->SM74HC138_A、P26->SM74HC138_B、P27->S......
  • 打卡信奥刷题(267)用Scratch图形化工具信奥P10415 [普及组][蓝桥杯 2023 国 A] 切割
    [蓝桥杯2023国A]切割题目描述给定一个W×HW\timesHW×H的长方形,两边长度均为整数。小蓝想把它切割为......