Добрый день програмисты електроники. Очень нужна Ваша помощь в дописании кода в Atmel Studio для Atmega8. Я новичёк в програмировании. Суть такая.
С матричной клавиатуры могу вывести одну цифру от 0 до 9, но не могу добавлять чтоб было 2 или 3 или 4 цифры. Знаю что нужно как-то занести в переменную и умножить на 10, чтоб число сдвинулось но не знаю как это сделать. Пытаюсь сам разобраться но не получается. Может кто-то сможет мне дописать код. За ранее благодарен. Ниже код.
#include "main.h"
unsigned char key_tab[4] =
{
0b11111110,
0b11111101,
0b11111011,
0b11110111
};
unsigned char scan_key(void)
{
unsigned char key_value = 0;
unsigned char i;
for(i = 0;i < 4;i++)
{
PORTB = key_tab[i];
_delay_us(10);
switch (PINB & 0xF0)
{
case 0b11100000:
key_value = 1 + i * 3;
return (key_value);
case 0b11010000:
key_value = 2 + i * 3;
return (key_value);
case 0b10110000:
key_value = 3 + i * 3;
return (key_value);
default:
break;
}
}
return (key_value);
}
int main(void)
{
DDRB |= (1 << PB3)|(1 << PB2)|(1 << PB1)|(1 << PB0);
DDRB &= ~(1 << PB7)|(1 << PB6)|(1 << PB5)|(1 << PB4);
PORTB = 0xF0;
DDRD = 0xFF;
PORTD = 0x00;
_delay_ms(10);
LCD_ini();
clearlcd();
setpos(0,0);
sendchar('D');
setpos(1,0);
sendchar('=');
while(1)
{
unsigned long a;
unsigned long c;
if(scan_key()==1) c = 1;
if(scan_key()==2) c = 2;
if(scan_key()==3) c = 3;
if(scan_key()==4) c = 4;
if(scan_key()==5) c = 5;
if(scan_key()==6) c = 6;
if(scan_key()==7) c = 7;
if(scan_key()==8) c = 8;
if(scan_key()==9) c = 9;
if(scan_key()==11) c = 0;
a = c;
setpos(2,0);
sendcharlcd(( a %10000)/1000+0x30);
sendcharlcd(( a %1000)/100+0x30);
sendcharlcd(( a %100)/10+0x30);
sendcharlcd( a %10+0x30);
}
}