【发布时间】:2014-05-06 11:34:12
【问题描述】:
这就是我要说的:
考虑一个 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;
}
}
我卡在必须读取第二个数字的地方。我会在第一个嵌套循环中执行此操作吗?或者我将如何从我的开关中读取两位数,每次按下按钮都会计时?
【问题讨论】:
-
这个问题似乎跑题了,因为它是关于嵌入式编程的,应该移到Electrical Engineering StackExchange
-
@Don'tYouWorryChild 只要它主要是关于编程而不是硬件,它就不会偏离主题。但是,在电子网站上获得更多更好答案的机会更高。
-
@Lundin : 好吧,不劝阻这些问题会在这里吸引越来越多的嵌入式问题,但正如你所说,电子网站更适合他们,所以他们更适合那里。
-
嵌入式编程问题鼓励。不,EE 网站在他们认为合适的方面非常狭窄。
-
当您在 C 代码中使用二进制数时,您必须添加“0bXXXXXX”。否则它会将数字处理为不需要的十进制数。