با سلام خدمت دوستان عزیز
مشکلی در رابطه با اسکن صفحه کلید داشتم.
قراره میکرو کی پد رو از پورت B بخونه و روی سون سگمنتی که به پورت D وصله ، کدهای هگزی رو که تعریف شده نشون بده.
پورت B مقاومت های Pull up ش فعاله در نتیجه از ورودی 0 برای تشخیص سطر و ستون استفاده میکنه.
از ATmega 32A استفاده میکنم.
سورس برنامه رو هم تو فایل ضمیمه قرار دادم ولی نمیدونم مشکلم چیه که اصلا سون سگمنت هیچ چیزی رو نشون نمیده و حتی
تغییری هم نمیکنه.
ممنون میشم اگه راهنمایی م کنین.
------------------------------------------------------- -----------------------------------------------------
#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
while(1)
{
unsigned char Row , Column ;
A:
DDRB = 0xF0;
PORTB = 0x0F;
if ( (PINB0 == 1) || (PINB1 == 1) || (PINB2 == 1) || (PINB3 == 1) )
{ DDRD=0xFF ; PORTD=0x10; goto A; }
else
{
if (PINB0 == 0) {Row = 1 ; goto B ;}
if (PINB1 == 0) {Row = 2 ; goto B ;}
if (PINB2 == 0) {Row = 3 ; goto B ;}
if (PINB3 == 0) {Row = 4 ; goto B ;}
B: DDRB = 0x0F;
PORTB = 0xF0;
if (PINB4 == 0) {Column = 1 ; goto C ;}
if (PINB5 == 0) {Column = 2 ; goto C ;}
if (PINB6 == 0) {Column = 3 ; goto C ;}
if (PINB7 == 0) {Column = 4 ; goto C ;}
C: DDRD = 0xFF;
if ((Row == 1)&&(Column == 1)) {PORTD = 0x84; _delay_ms(500) ; goto A ;}
if ((Row == 1)&&(Column == 2)) {PORTD = 0xCB; _delay_ms(500) ; goto A ;}
if ((Row == 1)&&(Column == 3)) {PORTD = 0x6B; _delay_ms(500) ; goto A ;}
if ((Row == 1)&&(Column == 4)) {PORTD = 0x10; _delay_ms(500) ; goto A ;}
if ((Row == 2)&&(Column == 1)) {PORTD = 0x2D; _delay_ms(500) ; goto A ;}
if ((Row == 2)&&(Column == 2)) {PORTD = 0x6E; _delay_ms(500) ; goto A ;}
if ((Row == 2)&&(Column == 3)) {PORTD = 0xEE; _delay_ms(500) ; goto A ;}
if ((Row == 2)&&(Column == 4)) {PORTD = 0x10; _delay_ms(500) ; goto A ;}
if ((Row == 3)&&(Column == 1)) {PORTD = 0x23; _delay_ms(500) ; goto A ;}
if ((Row == 3)&&(Column == 2)) {PORTD = 0xEF; _delay_ms(500) ; goto A ;}
if ((Row == 3)&&(Column == 3)) {PORTD = 0x6F; _delay_ms(500) ; goto A ;}
if ((Row == 4)&&(Column == 1)) {PORTD = 0x10; _delay_ms(500) ; goto A ;}
if ((Row == 4)&&(Column == 2)) {PORTD = 0xE7; _delay_ms(500) ; goto A ;}
if ((Row == 4)&&(Column == 3)) {PORTD = 0x10; _delay_ms(500) ; goto A ;}
if ((Row == 4)&&(Column == 4)) {PORTD = 0x10; _delay_ms(500) ; goto A ;}
}
return 0 ;
}
}