دوستان عزیز سلام من حدودا 2 سال پیش یه شمارنده 4 رقمی با سگمن 4.8 در 7.2 ساختم و تحویل مشتری دادم یادمه اون زمان همش سایه مینداخت و من به سختی تونستم مشکل رو حل کنم اما متاسفانه از اون کار ارشیوی ندارم و برنامه رو هم یادم نیست که چه جوری نوشته بودم الان برنامه رو نوشتم و توی پروتئوس جواب میده اما توی عمل همه روی هم می افته میدونم که مشکل توی تنظیم تایم هاست البته سگمنت بزرگ با ولتاژ 7.5 کار میکنه که این خودش یه مشکله اینو با ترانزیستور مثبت حل کردم دوستان اگه کسی تجربهای داره لطفا کمک کنه من 2 روزه با این موضوع درگیرم برنامه ای که من نوشتم اینه:
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2009/03/03
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega8.h>
#include <delay.h>
int int_Number=0;
void segment_putsf(int int_Number)
{
if (int_Number==0)
PORTD=0X40;
else
if (int_Number==1)
PORTD=0X79;
else
if (int_Number==2)
PORTD=0X24;
else
if (int_Number==3)
PORTD=0X30;
else
if (int_Number==4)
PORTD=0X19;
else
if (int_Number==5)
PORTD=0X12;
else
if (int_Number==6)
PORTD=0X02;
else
if (int_Number==7)
PORTD=0X78;
else
if (int_Number==8)
PORTD=0X00;
else
if (int_Number==9)
PORTD=0X10;
}
void segment_puts(int int_Number)
{
int UInt_number=0;
int uch_digit=0;
unsigned char uch_TimeCounter=0;
if (int_Number<10)
{
// while (uch_TimeCounter<=6)
// {
segment_putsf(int_Number);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
// delay_ms(10);
segment_putsf(0);
PORTB.2=0;
delay_ms(20);
PORTB.2=1;
// delay_ms(10);
segment_putsf(0);
PORTB.1=0;
delay_ms(20);
PORTB.1=1;
// delay_ms(10);
segment_putsf(0);
PORTB.0=0;
delay_ms(20);
PORTB.0=1;
// delay_ms(10);
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>9 && int_Number<100)
{
// while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.2=0;
delay_ms(10);
PORTB.2=1;
segment_putsf(0);
PORTB.1=0;
delay_ms(10);
PORTB.1=1;
segment_putsf(0);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>99 && int_Number<1000)
{
while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
PORTB.2=0;
segment_putsf(uch_digit);
delay_ms(10);
PORTB.2=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
PORTB.1=0;
segment_putsf(uch_digit);
delay_ms(10);
PORTB.1=1;
segment_putsf(0);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>999 && int_Number<10000)
{
// while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.2=0;
delay_ms(10);
PORTB.2=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.1=0;
delay_ms(10);
PORTB.1=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned charuch_pin_status=0;
// Input/Output Ports initialization
// Port B 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
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=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
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
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
MCUCR=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;
while (1)
{
// Place your code here
if (charuch_pin_status==1)
{
if (PINC.0==0)
{
charuch_pin_status=0;
segment_puts(int_Number);
int_Number++;
}
}
if (PINC.0==1)
{
charuch_pin_status=1;
}
if (PINC.1==0) // RESET
int_Number=0;
segment_puts(int_Number);
};
}
ممنون میشم اگه راهنمایی کنید.
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2009/03/03
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega8
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include <mega8.h>
#include <delay.h>
int int_Number=0;
void segment_putsf(int int_Number)
{
if (int_Number==0)
PORTD=0X40;
else
if (int_Number==1)
PORTD=0X79;
else
if (int_Number==2)
PORTD=0X24;
else
if (int_Number==3)
PORTD=0X30;
else
if (int_Number==4)
PORTD=0X19;
else
if (int_Number==5)
PORTD=0X12;
else
if (int_Number==6)
PORTD=0X02;
else
if (int_Number==7)
PORTD=0X78;
else
if (int_Number==8)
PORTD=0X00;
else
if (int_Number==9)
PORTD=0X10;
}
void segment_puts(int int_Number)
{
int UInt_number=0;
int uch_digit=0;
unsigned char uch_TimeCounter=0;
if (int_Number<10)
{
// while (uch_TimeCounter<=6)
// {
segment_putsf(int_Number);
PORTB.3=0;
delay_ms(20);
PORTB.3=1;
// delay_ms(10);
segment_putsf(0);
PORTB.2=0;
delay_ms(20);
PORTB.2=1;
// delay_ms(10);
segment_putsf(0);
PORTB.1=0;
delay_ms(20);
PORTB.1=1;
// delay_ms(10);
segment_putsf(0);
PORTB.0=0;
delay_ms(20);
PORTB.0=1;
// delay_ms(10);
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>9 && int_Number<100)
{
// while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.2=0;
delay_ms(10);
PORTB.2=1;
segment_putsf(0);
PORTB.1=0;
delay_ms(10);
PORTB.1=1;
segment_putsf(0);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>99 && int_Number<1000)
{
while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
PORTB.2=0;
segment_putsf(uch_digit);
delay_ms(10);
PORTB.2=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
PORTB.1=0;
segment_putsf(uch_digit);
delay_ms(10);
PORTB.1=1;
segment_putsf(0);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
else
if (int_Number>999 && int_Number<10000)
{
// while (uch_TimeCounter<=6)
// {
uch_digit=int_Number%10;
segment_putsf(uch_digit);
PORTB.3=0;
delay_ms(10);
PORTB.3=1;
UInt_number=int_Number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.2=0;
delay_ms(10);
PORTB.2=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.1=0;
delay_ms(10);
PORTB.1=1;
UInt_number=UInt_number/10;
uch_digit=UInt_number%10;
segment_putsf(uch_digit);
PORTB.0=0;
delay_ms(10);
PORTB.0=1;
// uch_TimeCounter++; // delay 1second
// }
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned charuch_pin_status=0;
// Input/Output Ports initialization
// Port B 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
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=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
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
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
MCUCR=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;
while (1)
{
// Place your code here
if (charuch_pin_status==1)
{
if (PINC.0==0)
{
charuch_pin_status=0;
segment_puts(int_Number);
int_Number++;
}
}
if (PINC.0==1)
{
charuch_pin_status=1;
}
if (PINC.1==0) // RESET
int_Number=0;
segment_puts(int_Number);
};
}
ممنون میشم اگه راهنمایی کنید.
دیدگاه