STM8 IO输入之独立按键检测程序

来自丢石头百科
Admin讨论 | 贡献2021年6月18日 (五) 18:00的版本 (文本替换 - 替换“http://{{”为“https://{{”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
<tbody></tbody>
<tbody></tbody>
系统功能

   使用STM8检测三个独立按键,一旦检测到按键被按,立刻做出指示!

<tbody></tbody>
硬件设计

关于STM8的I/O结构及相关介绍详见Datasheet,这里仅对作部分简单介绍,下面是STM8的I/O引脚配置表:

<tbody></tbody>
STM8 I/O 口引脚配置表
Px_DDRPx_CR1Px_CR2I/O 方式引脚状态说明
000输入悬浮输入
001输入上拉输入
010输入中断悬浮输入
011输入中断上拉输入
100输出开漏输出
110输出推挽输出
1X1输出输出(最快速度为10MHZ)

STM8 LED PB.jpg  LED控制电路原理图

STM8 KEY.jpg 独立按键电路原理图

<tbody></tbody>
软件设计
/*********************************************************************

微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="https://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net

目标系统: 基于STM8单片机  应用软件: Cosmic CxSTM8  说 明: 若用于商业用途,请保留此段文字或注明代码来源 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 

                                                                                                                                          • /
  1. include <STM8S207S8.h>
  2. define LED_DDR  PB_DDR
  3. define LED_ODR PB_ODR
  4. define LED_CR1  PB_CR1
  5. define LED_CR2  PB_CR2
  6. define KEY_DDR  PB_DDR
  7. define KEY_IDR PB_ODR
  8. define KEY_CR1  PB_CR1
  9. define KEY_CR2  PB_CR2

void scanKey() {          KEY_PORT=0xFF;  //设置按键输出“1”,之后语句检测按键,若端口变为“0”,则表示被按        if(KEY_PIN==0xFE)   //1111 1110 --> 说明最低位的按键可能被按     {         delay50us(1);  //去抖         if(KEY_PIN==0xFE) //1111 1110 --> 确认最低位的按键被按             LED_P0RT=0xFE; //进行LED指示     }     if(KEY_PIN==0xFD)   //1111 1101 --> 说明最低位的按键可能被按     {         delay50us(1);  //去抖         if(KEY_PIN==0xFD) //1111 1101 --> 确认最低位的按键被按             LED_P0RT=0xFD; //进行LED指示     }     if(KEY_PIN==0xFB)        {         delay50us(1);         if(KEY_PIN==0xFB)             LED_P0RT=0xFB;      }     if(KEY_PIN==0xF7)        {         delay50us(1);         if(KEY_PIN==0xF7)             LED_P0RT=0xF7;      }     if(KEY_PIN==0xEF)        {         delay50us(1);         if(KEY_PIN==0xEF)             LED_P0RT=0xEF;      }     if(KEY_PIN==0xDF)        {         delay50us(1);         if(KEY_PIN==0xDF)             LED_P0RT=0xDF;      }     if(KEY_PIN==0xBF)        {         delay50us(1);         if(KEY_PIN==0xBF)             LED_P0RT=0xBF;      }     if(KEY_PIN==0x7F)        {         delay50us(1);         if(KEY_PIN==0x7F)             LED_P0RT=0x7F;      }  }

<tbody></tbody>
系统调试
按第一个键,第一个LED亮;按第二个键,第二个LED亮。。。