如何解决键盘功能返回错误的数字
在用于键盘 3*4 的 ScanKey 功能中,它可以正常工作,直到数字长度低于 4
它的工作原理是这样的 number = (number * 10)
但是对于像 123456 这样的数字超过 4 个数字,它给了我其他数字我该怎么办?我的程序使用一个整数,我使用整数。
当我输入像 555555 这样的数字时,它会变为 31267。
IDE CodeVisionAVR
C 语言用于 ATmega16a
struct User
{
unsigned long int username;
unsigned long int password;
bool role;
};
unsigned long int username;
unsigned long int password;
do
{
lcd_clear();
lcd_putsf("Enter Username:");
lcd_gotoxy(0,1);
sprintf(show,"%d",username);
lcd_puts(show);
lcd_gotoxy(0,2);
lcd_putsf("Enter Password:");
lcd_gotoxy(0,3);
password = ScanKey();
if (!password)
{
break;
}
else if (password / 10 < 10)
{
PORTC .1 = 1;
lcd_clear();
lcd_putsf("At least 3 numbers !");
delay_ms(150);
PORTC .1 = 0;
}
} while (password / 10 < 10);
if (username && password)
{
user[UL].role = false;
lcd_clear();
if (currentUser < 0 && !currentUser)
{
lcd_putsf("Promote to admin ? ");
lcd_gotoxy(0,1);
lcd_putsf("Yes press 1");
lcd_gotoxy(0,2);
lcd_putsf("No press 2");
if (ScanKey() == 1)
{
user[UL].role = true;
}
lcd_gotoxy(0,3);
}
user[UL].username = username;
user[UL].password = password;
UL++;
PORTC .0 = 1;
lcd_putsf("User added !!");
delay_ms(150);
PORTC .0 = 0;
}
unsigned long int ScanKey(void)
{
unsigned long int num = 0;
_lcd_write_data(0x0F);
PORTC .2 = 1;
while (1)
{
PORTD .0 = 0;
PORTD .1 = 1;
PORTD .2 = 1;
delay_ms(5);
if (PIND .3 == 0)
{
while (PIND .3 == 0)
;
lcd_putchar('1');
num = (num * 10) + 1;
}
else if (PIND .4 == 0)
{
while (PIND .4 == 0)
;
lcd_putchar('4');
num = (num * 10) + 4;
}
else if (PIND .5 == 0)
{
while (PIND .5 == 0)
;
lcd_putchar('7');
num = (num * 10) + 7;
}
else if (PIND .6 == 0)
{
while (PIND .6 == 0)
;
_lcd_write_data(0x10);
lcd_putchar(' ');
_lcd_write_data(0x10);
num /= 10;
}
PORTD .0 = 1;
PORTD .1 = 0;
PORTD .2 = 1;
delay_ms(5);
if (PIND .3 == 0)
{
while (PIND .3 == 0)
;
lcd_putchar('2');
num = (num * 10) + 2;
}
else if (PIND .4 == 0)
{
while (PIND .4 == 0)
;
lcd_putchar('5');
num = (num * 10) + 5;
}
else if (PIND .5 == 0)
{
while (PIND .5 == 0)
;
lcd_putchar('8');
num = (num * 10) + 8;
}
else if (PIND .6 == 0)
{
while (PIND .6 == 0)
;
lcd_putchar('0');
num = (num * 10) + 0;
}
PORTD .0 = 1;
PORTD .1 = 1;
PORTD .2 = 0;
delay_ms(5);
if (PIND .3 == 0)
{
while (PIND .3 == 0)
;
lcd_putchar('3');
num = (num * 10) + 3;
}
else if (PIND .4 == 0)
{
while (PIND .4 == 0)
;
lcd_putchar('6');
num = (num * 10) + 6;
}
else if (PIND .5 == 0)
{
while (PIND .5 == 0)
;
lcd_putchar('9');
num = (num * 10) + 9;
}
else if (PIND .6 == 0)
{
while (PIND .6 == 0)
;
break;
}
}
PORTC .2 = 0;
_lcd_write_data(0x0C);
return num;
}```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。