目录
前言
up主的联系方式:
微信公众号:嵌入式up
大家好!大家点点关注,大家的关注才是我持续更新的动力!
ls1x-drv:开发板设备的通用驱动,包含 LS1B 所有控制器
core:启动文件和 LS1B 的管脚定义
libc:库文件
include:头文件
以上简要说明一下,各个文件夹的用处。
一、独立按键说明
常见独立按键
嵌入式考证设备独立按键
工作原理:
1.按键检测首先既然是检测引脚的高低电平,对于当然要用到上拉电阻,来检测引脚电平变化变化。作为输入前需要拉为高电平(就是初始化的时候输入拉为高电平)。当有按键按下,致使引脚接地,变为低电平时就是按键按下。
3.按键还有个重要的是消除抖动。因为人按下按键并不是立马就能接收到的并且放开的时候也会有一些的时间,按键在按下的过程就会有理论上的抖动。
4.消除抖动的方法:1延时消抖 2布尔变量取反函数也行(延时消抖使用较多)
按键原理图:
二、示例程序
key.c
#include "ls1b_gpio.h" #include "key.h" /*按键IO初始化函数 */ void KEY_Init( void ) { /* 配置按键IO为输入模式 */ gpio_enable( KEY_1, DIR_IN ); gpio_enable( KEY_2, DIR_IN ); gpio_enable( KEY_3, DIR_IN ); gpio_enable( KEY_4, DIR_IN ); } /*按键扫描函数 */ unsigned char KEY_Scan() { if ( gpio_read(KEY_1) == 0 ) { delay_ms( 5); /* (消抖) */ if ( gpio_read( KEY_1 ) == 0 ) /* 表示的确被按下了 */ { while ( gpio_read( KEY_1 ) == 0 ); /* 等待抖动完成 */ return 1; } } else if ( gpio_read( KEY_2 ) == 0 ) { delay_ms( 5 ); /* (消抖) */ if ( gpio_read( KEY_2 ) == 0 ) /* 表示的确被按下了 */ { while ( gpio_read( KEY_2 ) == 0 ); /* 等待抖动完成 */ return 2; } } else if ( gpio_read( KEY_3 ) ==0 ) { delay_ms( 5 ); /* (消抖) */ if ( gpio_read( KEY_3 ) ==0 ) /* 表示的确被按下了 */ { while ( gpio_read( KEY_3 ) == 0 ); /* 等待抖动完成 */ return 3; } } else if ( gpio_read( KEY_4 ) == 0 ) { delay_ms( 10 ); /* (消抖) */ if ( gpio_read( KEY_4 ) == 0 ) /* 表示的确被按下了 */ { while ( gpio_read( KEY_4 ) == 0 ); /* 等待抖动完成 */ return 4; } } return 0; }
key.h
#ifndef _TEST_H #define _TEST_H #define KEY_1 56 #define KEY_2 57 #define KEY_3 40 #define KEY_4 41 void KEY_Init(void); unsigned char KEY_Scan(); #endif // _TEST_H
总结
写代码的思路基本跟其他单片机一样,但是感觉更加的方便和轻巧,对于引脚的初始化很轻便 。消抖程序用延时消抖来解决。
源码链接:龙芯1B:独立按键使用例程-嵌入式文档类资源-CSDN文库
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。