1
第9章键盘输入接口与状态机编程
2
通用I/O数字输入接口设计
I/O输入输出接口,常为数字信号,可能是模拟信号比如AD,但内部转换为数字信号
3
I/O输入接口硬件设计要点
模拟信号和数字信号
电压信号和电流信号
单次信号和连续信号
4
I/O输入接口软件设计要点
用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部的上拉电阻。
I/O口用于输出时,应设置DDRx = = 1,。
I/O口用于输入时,应设置DDRx = = 0。读取外部引脚电平时,,。 = 1表示该I/O内部的上拉电阻有效, = 0表示不使用内部上拉,外部引脚呈现三态高阻输入状态。一旦将I/O口的工作方式由输出设置成输入方式后,。
5
按键输入接口设计
6
基于状态机的按键输入软件接口设计
无按键
状态0
有按键
状态1
等释放
状态2
0/0 (消抖)
1/0
1/0 (干扰)
0/1 (确认)
1/0
0/0
7
#define key_input // 按键输入口
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
char read_key(void)
{
static char key_state = 0;
char key_press, key_return = 0;
key_press = key_input; // 读按键I/O电平
switch (key_state)
{
case key_state_0: // 按键初始态
if (!key_press) key_state = key_state_1;// 键被按下,状态转换到键确认态
break;
case key_state_1: // 按键确认态
if (!key_press)
{
key_return = 1; // 按键仍按下,按键确认输出为“1”
key_state = key_state_2; // 状态转换到键释放态
}
8
else
key_state = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press) key_state = key_state_0; //按键已释放,转换到按键初始态
break;
}
return key_return;
}
9
单按键的实时时钟秒校时设置设计(一)
10
程序
#include <>
flash char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
char time[3]; // 时、分、秒计数单元
char dis_buff[6]; // 显示缓冲区,存放要显示的6个字符的段码值
char time_counter,key_stime_counter; // 时间计数单元,
char posit;
bit point_on, time_1s_ok,key_stime_ok;
第9章键盘输入接口与状态机设计 来自淘豆网www.taodocs.com转载请标明出处.