c - AVR 编程 - 如何在 C 中读取连续的按钮按下

标签 c embedded avr

这是我必须要 dp 的内容:

考虑一个 ATmega324A 开发板和一个 CSSE2010/CSSE7201 IO 板。开关 S3 到 S0 连接到 AVR 端口 B 引脚 3 到 0。按钮 B0 连接到 AVR 端口 A 引脚 0。LED L0 和 L2 分别连接到 AVR 端口 C 引脚 0 和 2。 LED L0(红色)是“锁定”LED,只有在锁被锁定时才会亮起。 LED L2 (绿色)是“解锁”LED,只有在解锁时才会亮起。锁 最初以锁定状态启动。用户在开关(S3 至 S0)上输入数字的二进制代码,然后按下并松开按钮 B0 以“输入”第一个数字。然后用户在开关上输入第二个数字的二进制代码,按下并松开按钮 B0 以“输入”第二个数字。如果数字与预期值匹配(学号的最后一位和学号的第三位),则锁应“解锁”,否则应保持锁定状态,直到输入正确的两位数。

到目前为止,这是我的代码:

#include <avr/io.h>

/* Seven segment display values */

uint8_t seven_seg[16] = { 63,6,91,79,102,109,125,7,127,111,119,124,57,94,121,113};
int main(void) {
uint8_t digit;
uint8_t temp;
uint8_t digit2;
uint8_t code[2] = {6,3}


DDRA = 11111110;   //port A is input (last bit)
DDRB = 0X00;       //port B is input
DDRC = 0x0F;   //port c is output
DDRD = 0XFF;   //set port D to be output

while(1) {
    /* Read in a digit from lower half of port C pins */
    /* We read the whole byte and mask out upper bits */

    PORTB = 1;  //Led is red
    clock = PINA & 00000001;   //read in last bit of port A
    temp = PINB & 0X0F;  //read in lower half of port b


    /* Checks to see the first digit is correct */
    if(temp == code[0] && clock == 1) {
        digit = temp;           
        PORTD = seven_seg[temp];

        } else {
        PORTD = 0;
    }



}

我卡在了必须读取第二位数字的位置。我会在第一个的嵌套循环中执行此操作吗?或者我将如何从我的开关中读取两位数字,每次按下按钮时都会输入?

最佳答案

要制作可用于更长数字序列的变量程序,只需使用循环即可。 for(uint8_t i=0; i<NUMBER_OF_DIGITS; i++) .端口读取需要在循环内。

但是,您不能像现在这样阅读按钮。所有按钮都有机电信号反弹,您需要将其过滤掉以防止读数错误。您必须在任何类型的嵌入式系统上执行此操作。

最简单的方法是对按钮采样一次,保存结果,等待几毫秒,然后再次采样。如果样本比较相等,则接受它作为结果(按下或未按下)。

或者,您可以在按钮信号的边沿触发中断,从那里启动定时器,然后当定时器用完时,读取端口。

更高级的方法使用某种形式的 median filters .

关于c - AVR 编程 - 如何在 C 中读取连续的按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493592/

相关文章:

c - AVR 如何执行浮点运算

c - 读取 fifo 的最后一行

c - 使用 fscanf 将数据输入动态结构指针数组?

c - 使用 OpenMp 和 SSE 的段错误

embedded - 为什么内存位置也称为寄存器?

将int转换为字符串以显示在lcd上,atmel studio c语言

c - 在 GCC 中实现编译时只读函数指针表

有人可以帮助我吗,我找不到链表代码中的错误

c - 嵌入式 C : what does var = 0xFF; do?

c++ - 在嵌入式环境中使用 C++