初学FS4412——按键控制—灯

先找到原理图
在这里插入图片描述

K2——对应 GPX1_1

找到对应的
在这里插入图片描述

如led灯一样,设置输入

#define K2CON (volatile unsigned int *)0x11000c20
#define K2DAT (volatile unsigned int *)0x11000c24
//将gpx1_1设置为输入
	*K2CON &= ~(0xf<<4);

但是按键有抖动
要按键消抖和松手检测

在这里插入图片描述
在这里插入图片描述

//如果返回0表示按键没有按下
//如果返回1表示案件按下了
int key_scan()
{
	int flags=0;
	//按键第一次按下
	if(!(*K2DAT & (1<<1))){
		delay_ms(50); //加延时
		//第二次检测按键是否按下
		if(!(*K2DAT & (1<<1))){
			//松手检测
			while(!(*K2DAT & (1<<1)));
			flags=1;
			
		}
	
	}
	
	return flags;
}

在主函数里面可以写这样:

int main()
{
	int key_status = 0;
	int led_status = 0;
	//init all led
	led_init();
	key_init();
	while(1){
		key_status = key_scan();
		if(key_status){
			led_status = !led_status;
			led_set_value(LED2,led_status);
		}
	}
	return 0;
}

看K3按键——:
GPX1_2
在这里插入图片描述

#define K3CON (volatile unsigned int *)0x11000c20
#define K3DAT (volatile unsigned int *)0x11000c24
//将gpx1_2设置为输入
	*K3CON &= ~(0XF<<8);

最后一个K4
GPX3_2:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
K2控制led2代码:

#define LED2CON (volatile unsigned int *)0x11000c40
#define LED2DAT (volatile unsigned int *)0x11000c44
#define LED3CON (volatile unsigned int *)0x11000c20
#define LED3DAT (volatile unsigned int *)0x11000c24
#define LED4CON (volatile unsigned int *)0x114001e0
#define LED4DAT (volatile unsigned int *)0x114001e4
#define LED5CON (volatile unsigned int *)0x114001e0
#define LED5DAT (volatile unsigned int *)0x114001e4

#define K2CON (volatile unsigned int *)0x11000c20
#define K2DAT (volatile unsigned int *)0x11000c24

#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5

#define ON 1
#define OFF 0



void delay_ms(int z)
{
	int x,y;
	for(x=z;x>0;x--)
		for(y=2500;y>0;y--);
}

void led_init()
{
	//led2设置为输出
	*LED2CON &= ~(0xf<<28);
	*LED2CON |= (1<<28);   //设置管脚为输出

	//关闭led2
	*LED2DAT &=~(1<<7);   //关闭LED2

	//led3设置为输出
	*LED3CON &=~(0xf<<0);
	*LED3CON |= (1<<0);

	//关闭led3
	*LED3DAT &=~(1<<0);

	//led4设置为输出
	*LED4CON &= ~(0xf<<16);
	*LED4CON |= (1<<16);
	//关闭led4
	*LED4DAT &= ~(1<<4);

	//led5设置为输出
	*LED5CON &= ~(0xf<<20);
	*LED5CON |= (1<<20);
	//关闭led5
	*LED5DAT &= ~(1<<5);
}

void led_set_value(int which,int status)
{
	switch(which){
		case LED2:status?(*LED2DAT|=(1<<7)):(*LED2DAT&=~(1<<7));
				break;
		case LED3:status?(*LED3DAT|=(1<<0)):(*LED3DAT&=~(1<<0));
				break;
		case LED4:status?(*LED4DAT|=(1<<4)):(*LED4DAT&=~(1<<4));
				break;
		case LED5:status?(*LED5DAT|=(1<<5)):(*LED5DAT&=~(1<<5));
				break;
	}

}

void led_set_blink(int which,int dms)
{
	led_set_value(which,ON);
	delay_ms(dms);
	led_set_value(which,OFF);
	delay_ms(dms);
}
void key_init()
{
	//将gpx1_1设置为输入
	*K2CON &= ~(0xf<<4);
}

//如果返回0表示按键没有按下
//如果返回1表示案件按下了
int key_scan()
{
	int flags=0;
	//按键第一次按下
	if(!(*K2DAT & (1<<1))){
		delay_ms(50); //加延时
		//第二次检测按键是否按下
		if(!(*K2DAT & (1<<1))){
			//松手检测
			while(!(*K2DAT & (1<<1)));
			flags=1;
			
		}
	
	}
	
	return flags;
}
int main()
{
	int key_status = 0;
	int led_status = 0;
	//init all led
	led_init();
	key_init();
	while(1){
		key_status = key_scan();
		if(key_status){
			led_status = !led_status;
			led_set_value(LED2,led_status);
		}
	}
	return 0;
}

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的OpenGL库是一个用于渲染图形和实现3D图形应用的强大工具。如果你是一个初学者,以下是一些学习OpenGL的指南: 1. 学习基本的计算机图形学概念:在深入学习OpenGL之前,了解一些基本的计算机图形学概念是很重要的。你可以学习像坐标系、向量、矩阵变换等基础知识。 2. 学习Python语言基础:作为一个初学者,你需要先掌握Python的基本语法和编程概念。这将帮助你更好地理解和使用OpenGL库。 3. 安装OpenGL库:在开始之前,你需要确保你的计算机上已经安装了OpenGL库。你可以使用pip来安装PyOpenGL库。 4. 学习OpenGL的核心知识:一旦你准备好了,可以开始学习OpenGL的核心知识,如顶点缓冲对象(VBO)、着色器(programs)、着色器语言(GLSL)等。掌握这些基本概念对于理解和使用OpenGL非常重要。 5. 编写简单的OpenGL程序:接下来,你可以开始编写一些简单的OpenGL程序来实践所学的知识。你可以从简单的绘制一些基本图形开始,然后逐渐扩展到更复杂的场景和效果。 6. 学习OpenGL的高级特性:一旦你熟悉了OpenGL的基本知识,你可以探索一些更高级的主题,如光照、纹理映射、深度测试、投影等。这将帮助你创建更逼真和交互式的3D图形应用。 7. 参考文档和教程:除了上述的自学方法外,你还可以参考一些优秀的OpenGL文档和教程。一些推荐的资源包括OpenGL官方文档、PyOpenGL官方文档、学习OpenGL的在线教程等。 记住,学习OpenGL需要时间和实践。通过不断地编写代码和实验,你将逐渐掌握OpenGL的技能并创建出令人惊叹的图形应用。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值