سلام
باید یک عدد دو رقمی را از ورودی کی پد 3 در 4 اسکن کرده و بر روی یک سون سگمنت 2 کارکتری نمایش بدیم.
تا حدیش رو خودم نوشتم
که اعداد 0 تا 9 رو بتونه چاپ کنه
ولی نمیدونم چطوری باید اعداد چند رقمی رو از ورودی بگیرم !
باید یک عدد دو رقمی را از ورودی کی پد 3 در 4 اسکن کرده و بر روی یک سون سگمنت 2 کارکتری نمایش بدیم.
تا حدیش رو خودم نوشتم
که اعداد 0 تا 9 رو بتونه چاپ کنه
ولی نمیدونم چطوری باید اعداد چند رقمی رو از ورودی بگیرم !
کد:
#include <mega16.h>
#include <delay.h>
#define KEYPAD A //KEYPAD IS ATTACHED ON PORTA
#define KEYPAD_PORT PORTA
#define KEYPAD_DDR DDRA
#define KEYPAD_PIN PINA
#define p1 PORTD.0
#define p2 PORTD.1
char n[10] = {0b11000000,0b11111001,0b10100100,
0b10110000,0b10011001,0b10010010,0b10000010,0b11011000,
0b10000000,0b10010000};
unsigned int key1,key2;
unsigned int GetKeyPressed()
{
unsigned int r,c;
KEYPAD_PORT|= 0X0F;
for(c=0;c<3;c++)
{
KEYPAD_DDR&=~(0X7F);
KEYPAD_DDR|=(0X40>>c);
for(r=0;r<4;r++)
{
if(!(KEYPAD_PIN & (0X08>>r)))
{
return (r*3+c);
}
}
}
return 0XFF;//Indicate No key pressed
}
void show(void)
{
p2 = 1;
PORTC = n[key2];
delay_ms(15);
p2 = 0 ;
p1 = 1;
PORTC = n[0];
delay_ms(15);
p1 = 0 ;
}
void main()
{
DDRC = 0xFF;
DDRD = 0xFF;
DDRA = 0x00;
key1=0;
key2=0;
//Now initialize the module
while(1)
{
show();
key1=GetKeyPressed(); //Get the keycode of pressed key
switch (key1){
case 10:
key1 = 0;
key2 = 0;
break;
case 0:
key1 = 0;
key2 = 1;
break;
case 1:
key1 = 0;
key2 = 2;
break;
case 2:
key1 = 0;
key2 = 3;
break;
case 3:
key1 = 0;
key2 = 4;
break;
case 4:
key1 = 0;
key2 = 5;
break;
case 5:
key1 = 0;
key2 = 6;
break;
case 6:
key1 = 0;
key2 = 7;
break;
case 7:
key1 = 0;
key2 = 8;
break;
case 8:
key1 = 0;
key2 = 9;
break;
}
}
}




دیدگاه