سلام من یک برنامه برای خواندن key pad ونمایش برروی ال سی دی نوشته ام اما نمی دانم چرا عمل نمی کند خواهش می کنم یه نگاه به آن بیندازید و اگر ممکن بود
اشکال من را بگویید.
#include <mega16.h>
#include<sleep.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include<delay.h>
// Declare your global variables here
char keycode[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
char keys;
char findcolumn(char input)
{
if(input==1)
return 0;
else if((input>>1)==1)
return 1;
else if((input>>2)==1)
return 2;
else
return 3;
}
//External interrupt0 service routine
interrupt [EXT_INT0]void ext_int0_isr(void){
//place your code here
char row,column;
column=findcolumn(PINB&0x0f);
delay_ms(20);
PORTB=0xef;
if((PINB&0x0f)!=0x0f)
row=0;
else{
PORTB=0xdf;
if((PINB&0x0f)!=0x0f)
row=1;
else{
PORTB=0xbf;
if((PINB&0x0f)!=0x0f)
row=2;
else{
PORTB=0x7f;
if((PINB&0x0f)!=0x0f)
row=3;
}
}
}
keys=keycode[row][column];
lcd_clear();
lcd_gotoxy(0,0);
lcd_putchar(keys);
PORTB=0x0f;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTB=0x0f;
DDRB=0xF0;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
// LCD module initialization
lcd_init(16);
//Global enable interrupts
#asm("sei"
sleep_enable();
while (1)
{
// Place your code here
powerdown();
};
}
این برنامه را از کتاب میکرو کنترلر ره افروز نوشتم.
اشکال من را بگویید.
#include <mega16.h>
#include<sleep.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include<delay.h>
// Declare your global variables here
char keycode[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
char keys;
char findcolumn(char input)
{
if(input==1)
return 0;
else if((input>>1)==1)
return 1;
else if((input>>2)==1)
return 2;
else
return 3;
}
//External interrupt0 service routine
interrupt [EXT_INT0]void ext_int0_isr(void){
//place your code here
char row,column;
column=findcolumn(PINB&0x0f);
delay_ms(20);
PORTB=0xef;
if((PINB&0x0f)!=0x0f)
row=0;
else{
PORTB=0xdf;
if((PINB&0x0f)!=0x0f)
row=1;
else{
PORTB=0xbf;
if((PINB&0x0f)!=0x0f)
row=2;
else{
PORTB=0x7f;
if((PINB&0x0f)!=0x0f)
row=3;
}
}
}
keys=keycode[row][column];
lcd_clear();
lcd_gotoxy(0,0);
lcd_putchar(keys);
PORTB=0x0f;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTB=0x0f;
DDRB=0xF0;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
// LCD module initialization
lcd_init(16);
//Global enable interrupts
#asm("sei"

sleep_enable();
while (1)
{
// Place your code here
powerdown();
};
}
این برنامه را از کتاب میکرو کنترلر ره افروز نوشتم.
دیدگاه