با سلام خدمت اساتید محترم
من حمید هستم یه تازه کار علاقمند به میکرو avr :nerd:
یک atmeg16 را به lcd وصل کردم بر روی پورتهای a تا اینجا مشکلی نبود ولی
وقتی پورت B0 , b1و b2 را به عنوان ورودی تعریف می کنم تا با اتصال یک میکرو سوئیچ به هر کدام از این سه پایه پورت B
علاوه بر اینکه بر روی lcd پیغام مورد نظر منو بنویسه و هم بر روی پور های D4 , D5 , D6 بتونه LED ها را که گذاشتم روشن کنه
اما می بینم که با اتصال هرکدام از میکرو سوئیچ ها بر روی lcd اون چیزی رو که می خوام می نویسه ولی پورت خروجی مرتبا قطع و وصل میشه
و led اون پورت هی چشمک می زنه :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
در صورتی که باید یا روشن باشه یا خاموش برنامه را با کدویژن نوشتم لطفا ببینید اشکال کار من کجاست :cry:
hamid_adel58@yahoo.com
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mailffice@hpinfotech.com
Project :
Version :
Date : 2005/06/26
Author : Amir
Company : Adel
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
int x,y,z;
char txt[20];
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B 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
PORTB=0x00;
DDRB=0x00;
// Port C 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
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x80;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16*2);
while (1)
{
// Place your code here
x=~PINB.0;
y=~PINB.1;
z=~PINB.2;
lcd_clear();
lcd_gotoxy(0,0);
sprintf(txt,"B0=%d B1=%d B2=%d ",x,y,z);
lcd_puts(txt);
if (x==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Hello"
PORTD.5=1;
}
else
{
PORTD.5=0;
}
if (y==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Amir"
PORTD.6=1;
}
else
{
PORTD.6=0;
}
if (z==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Hamid"
PORTD.7=1;
}
else
{
PORTD.7=0;
}
delay_ms(200);
};
}
من حمید هستم یه تازه کار علاقمند به میکرو avr :nerd:
یک atmeg16 را به lcd وصل کردم بر روی پورتهای a تا اینجا مشکلی نبود ولی
وقتی پورت B0 , b1و b2 را به عنوان ورودی تعریف می کنم تا با اتصال یک میکرو سوئیچ به هر کدام از این سه پایه پورت B
علاوه بر اینکه بر روی lcd پیغام مورد نظر منو بنویسه و هم بر روی پور های D4 , D5 , D6 بتونه LED ها را که گذاشتم روشن کنه
اما می بینم که با اتصال هرکدام از میکرو سوئیچ ها بر روی lcd اون چیزی رو که می خوام می نویسه ولی پورت خروجی مرتبا قطع و وصل میشه
و led اون پورت هی چشمک می زنه :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
در صورتی که باید یا روشن باشه یا خاموش برنامه را با کدویژن نوشتم لطفا ببینید اشکال کار من کجاست :cry:
hamid_adel58@yahoo.com
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.4 Standard
Automatic Program Generator
© Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mailffice@hpinfotech.com
Project :
Version :
Date : 2005/06/26
Author : Amir
Company : Adel
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 1.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
int x,y,z;
char txt[20];
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B 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
PORTB=0x00;
DDRB=0x00;
// Port C 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
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x80;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16*2);
while (1)
{
// Place your code here
x=~PINB.0;
y=~PINB.1;
z=~PINB.2;
lcd_clear();
lcd_gotoxy(0,0);
sprintf(txt,"B0=%d B1=%d B2=%d ",x,y,z);
lcd_puts(txt);
if (x==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Hello"
PORTD.5=1;
}
else
{
PORTD.5=0;
}
if (y==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Amir"
PORTD.6=1;
}
else
{
PORTD.6=0;
}
if (z==1)
{
lcd_gotoxy(0,1);
lcd_putsf("Hamid"
PORTD.7=1;
}
else
{
PORTD.7=0;
}
delay_ms(200);
};
}
دیدگاه