سلام دوستان.این ترم پروزه ساخت کرنومتر دارم با برنامه نویسی کد ویزن. :cry: :cry: هنوز برنامه نویسیش انجام ندادم.وخواهش میکم کمکم کنید
اطلاعیه
Collapse
No announcement yet.
ساخت کرنومتر و برنامه نویسی ان با کد ویزن
Collapse
X
-
پاسخ : ساخت کرنومتر و برنامه مویسی ان
خب الان کجای قضیه برات مشکله؟؟؟؟
توی نت یا همین انجمن های اینجا بگردی کلی مطلب هست.
کجای کار گیر کردی؟؟؟... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
-
پاسخ : ساخت کرنومتر و برنامه مویسی ان
خب برنامه اش رو همینجا بذار تا ببینم داره داخلش چه اتفاقی میفته :smile:... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه مویسی ان
#include <mega8.h>
#include <delay.h>
int s,start;
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
if (start==1){
s++; }
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
int a,m,h,a1,a2,a3,a4,a5,a6,a7,a8,st,p;
char sega[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0};
PORTB=0x00;
DDRB=0x38;
PORTC=0x00;
DDRC=0x7F;
PORTD=0x00;
DDRD=0xFF;
ASSR=0x08;
TCCR2=0x05;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x40;
#asm("sei"
while (1)
{
//************************************************** *********************
if ((PINB.1==1) && (p==0)) {
a=0;
s=0;
m=0;
h=0;
p=1;
start=0;
PORTB.5=0; }
if ((PINB.1==0) && (p==1)) {
p=0; }
if ((PINB.0==1) && (st==0)) {
start++;
st=1;
if(start==1){
a=a*2.55;
TCNT2=a;} }
if ((PINB.0==0) && (st==1)) {
st=0; }
if(start==2){
start=0; }
//************************************************** *********************
if(start==1) {
a=TCNT2;
if(a>128){
PORTB.5=1;}
else{
PORTB.5=0;}
a=a/2.55;
if (s>59){
s=0;
m++;}
if(m>59){
m=0;
h++;}
if (h>99){
h=0;} }
//************************************************** *********************
a1=s%10;
a2=s/10;
//**********
a3=m%10;
a4=m/10;
//**********
a5=h%10;
a6=h/10;
//**********
a7=a%10;
a8=a/10;
//************************************************** *********************
PORTC.0=1;
PORTD=sega[a1];
delay_ms(4);
PORTC.0=0;
PORTC.1=1;
PORTD=sega[a2];
delay_ms(4);
PORTC.1=0;
PORTC.2=1;
PORTD=sega[a3];
delay_ms(4);
PORTC.2=0;
PORTC.3=1;
PORTD=sega[a4];
delay_ms(4);
PORTC.3=0;
PORTC.4=1;
PORTD=sega[a5];
delay_ms(4);
PORTC.4=0;
PORTC.5=1;
PORTD=sega[a6];
delay_ms(4);
PORTC.5=0;
PORTB.3=1;
PORTD=sega[a7];
delay_ms(4);
PORTB.3=0;
PORTB.4=1;
PORTD=sega[a8];
delay_ms(4);
PORTB.4=0;
};
}
این برنامه نویسی با سون سگمنت انجام شده ما میخوایم رو lcd نمایشش بدیم.باید چه تغییراتی انجام بدیم؟
char sega[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x1 0} اینجا منظورش چیه؟
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
همون کد خودتون فقط یک سری تغییرات دادم:
کد:#include <mega8.h> #include <delay.h> #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <stdio.h> int s,start; // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { if (start==1){ s++; } } // Declare your global variables here void main(void) { // Declare your local variables here int a,m,h,a1,a2,a3,a4,a5,a6,a7,a8,st,p; char buffer[16]; PORTB=0x00; DDRB=0x38; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFF; ASSR=0x08; TCCR2=0x05; TCNT2=0x00; OCR2=0x00; TIMSK=0x40; #asm("sei") lcd_init(); while (1) { //*********************************************************************** if ((PINB.1==1) && (p==0)) { a=0; s=0; m=0; h=0; p=1; start=0; PORTB.5=0; } if ((PINB.1==0) && (p==1)) { p=0; } if ((PINB.0==1) && (st==0)) { start++; st=1; if(start==1){ a=a*2.55; TCNT2=a;} } if ((PINB.0==0) && (st==1)) { st=0; } if(start==2){ start=0; } //*********************************************************************** if(start==1) { a=TCNT2; if(a>128){ PORTB.5=1;} else{ PORTB.5=0;} a=a/2.55; if (s>59){ s=0; m++;} if(m>59){ m=0; h++;} if (h>99){ h=0;} } //*********************************************************************** a1=s%10; a2=s/10; //********** a3=m%10; a4=m/10; //********** a5=h%10; a6=h/10; //********** a7=a%10; a8=a/10; sprintf(buffer,"%d%d:%d%d:%d%d:%d%d",a8,a7,a6,a5,a4,a3,a2,a1) lcd_gotoxy(0,0); lcd_putsf(buffer); delay_ms(10); //*********************************************************************** }; }
آخرش هم تمام متغیرهایی که صدم ثانیه و ثانیه و دقیقه و ساعت کورنومتر رو حساب میکنه از طریق دستور sprintf درون buffer ریخته و روی lcd نشون داده... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
:applause: تشکررررر.
اگه امکانش هست این قسم از برنامه برام توضیح بدین ممنون میشم
if ((PINB.1==1) && (p==0)) {
a=0;
s=0;
m=0;
h=0;
p=1;
start=0;
PORTB.5=0; }
if ((PINB.1==0) && (p==1)) {
p=0; }
if ((PINB.0==1) && (st==0)) {
start++;
st=1;
if(start==1){
a=a*2.55;
TCNT2=a;} }
البته خودم یک برنامه نوشتم خیلی ساده تر ولی جواب نمیده متاسفانه::::
برنامه خودم:
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B
#endasm
void main(void) {
int m=0,a=1,s=0,f=0;
int g=0,i=0;
char d[30];
GICR=0xE0;
MCUCR=0x0A;
while (1) {
while (a==1) {
GIFR=0xE0;
TIMSK=3;
TCNT0=6;
TCCR0=1;
#asm("sei"
while (m<=400) {
if (TIFR==1) {
m++;
TIFR=0;
TCNT0=6;
} }
}
TCCR0=0;
s=s+1;
i=s;
}}
interrupt [EXT_INT0] v1(void){
char d[f]=i;
if (g==6) {
a=0; }
else {g++;
};
}
interrupt [EXT_INT1] v2(void){
}
interrupt [EXT_INT2] v3(void)
{
}
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
شماتیک رو هم باید بذاری... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
این کد تصحیح شده برنامه:
کد:#include <mega8.h> #include <delay.h> #asm .equ __lcd_port=0x12 ;PORTD #endasm #include <lcd.h> #include <stdio.h> int s,start; // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { if (start==1){ s++; } } // Declare your global variables here void main(void) { // Declare your local variables here int a,m,h,st,p; char buffer[18]; PORTB=0x00; DDRB=0x38; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0xFF; ASSR=0x08; TCCR2=0x05; TCNT2=0x00; OCR2=0x00; TIMSK=0x40; #asm("sei") lcd_init(16); while (1) { //*********************************************************************** if ((PINB.1==1) && (p==0)) { a=0; s=0; m=0; h=0; p=1; start=0; } if ((PINB.1==0) && (p==1)) { p=0; } if ((PINB.0==1) && (st==0)) { start++; st=1; if(start==1){ a=a*2.55; TCNT2=a;} } if ((PINB.0==0) && (st==1)) { st=0; } if(start==2){ start=0; } //*********************************************************************** if(start==1) { a=TCNT2; a=a/2.55; if (s>59){ s=0; m++;} if(m>59){ m=0; h++;} if (h>99){ h=0;} } //*********************************************************************** sprintf(buffer,"%d%d:%d%d:%d%d:%d%d",h/10,h%10,m/10,m%10,s/10,s%10,a/10,a%10); lcd_gotoxy(0,0); lcd_puts(buffer); delay_ms(10); //*********************************************************************** }}
برنامه رو اجرا کنید متوجه او قسمتی از کد که خودتون سوال کردید میشید... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
:applause: :wow: ممنون واقعا عالی بود.اگه بخوام برا 6 نفر این کرنومتر استفاده کنم و هربار هم سیوش کنم باید 6 تا متغیر براش تعریف کنمو برابر صفر قرار بدم و فرکانس کاری و مدت زمانش بدست بیارم.درسته؟ فرکانس کاری شد :7.8125khz و n=1024 و مدت زمان هم شد 32.768ms . الان برا برنامه نویسیش باید چکار کنم؟
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
شما یک آرایه تعریف کن و کنارش یک متغیر برای شمارش و یکی از پایه ها رو هم به عنوان ورودی استفاده کن.
توی همون حلقه while(1 هروقت کلید فشرده شد مقادیر a رو در این آرایه ذخیر کنه. چون برای 6 نفر میخواید این کار رو انجام بدید پس باید آرایه دوبعدی باشه.... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
#include <mega8.h>
#include <delay.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
int s,start;
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
if (start==1){
s++;
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
int a,m,h,st,p,j,i;
float arraye[7][7];
char buffer[18];
PORTB=0x00;
DDRB=0x38;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ASSR=0x08;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x40;
#asm("sei"
lcd_init(16);
while (1)
{
//************************************************** *********************
if ((PINB.1==1) && (p==0)) {
a=0;
s=0;
m=0;
h=0;
p=1;
start=0; }
if ((PINB.1==0) && (p==1)) {
p=0; }
if ((PINB.0==1) && (st==0)) {
start++;
st=1;
if(start==1){
a=a*2.55;
TCNT2=a;} }
if ((PINB.0==0) && (st==1)) {
st=0; }
if(start==2){
start=0; }
//************************************************** *********************
if(start==1) {
a=TCNT2;
a=a/2.55;
if (s>59){
s=0;
m++;}
if(m>59){
m=0;
h++;}
if (h>99){
h=0;} }
if(start==1){
a=arraye[7][7];
}
//************************************************** *********************
for(i=0;i<7;i++)
for(j=0;j<7;j++)
cin>>arraye[7][7];
for(i=0;i<7;i++)
for(j=0;j<7;j++)
cout<<arraye[7][7];
sprintf(buffer,"%d%d:%d%d:%d%d:%d%d",h/10,h%10,m/10,m%10,s/10,s%10,a/10,a%10);
lcd_gotoxy(0,0);
lcd_puts(buffer);
delay_ms(10);
//************************************************** *********************
}}
برنامه که نوشتم این هستش ولی cin و cout تعریف نشده باید چی بنویسم؟
پورتc از قبل تعریف شده بود ولی استفاده ای ازش نمیشد گذاشتمش برا ارایه
برا پروتوسش باید چه تغییراتی انجام بدم؟
یک متغیر برا شمارش منظورتون i و j هستش که تعریفش کردم؟
دیدگاه
-
پاسخ : ساخت کرنومتر و برنامه نویسی ان با کد ویزن
این برنامه جدید:
کد:#include <mega8.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #include <delay.h> #include <stdio.h> unsigned char buffer[24],i=0,c=0; unsigned int hold[6][4],korno[4],counter; bit a=1; void show(char d,int e); // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { #asm("cli") TCCR2=0; TCNT2=0; counter=0; korno[3]=korno[2]=korno[1]=korno[0]=0; delay_ms(100); a=0; #asm("sei") } // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { #asm("cli") counter++; if (counter>2000) counter=0; #asm("sei") } void main(void) { int e=0; PORTB=0x00; DDRB=0xFF; PORTC=0x01; DDRC=0x00; PORTD=0x7; DDRD=0x00; ASSR=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off GICR|=0x40; MCUCR=0x02; GIFR=0x40; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x40; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") show(0,0); while (1) { a=1;c=0; while(PINC.0); delay_ms(900); TCCR2=0x02; while(PINC.0 && a) { korno[0]=counter/20; if (korno[0]>98) {korno[1]++;counter=korno[0]=0;} if (korno[1]>59) {korno[1]=0;korno[2]++;} if (korno[2]>59) {korno[2]=0;korno[3]++;} if (korno[3]>24) {korno[3]=0;} show(0,0); if (!PIND.1) { hold[c][3]=korno[3]; hold[c][2]=korno[2]; hold[c][1]=korno[1]; hold[c][0]=korno[0]; c++; if (c==6) c=0; delay_ms(900); } }; TCCR2=0; show(0,0); delay_ms(800); while ((PIND.1) & a); delay_ms(800); while ((PINC.0) & a) { if (PIND.1==0) e++; delay_ms(400); if (e==6) e=0; show(1,e); delay_ms(400); } show(0,0); } } void show(char d,int e){ if (!d) { sprintf(buffer,"%d%d:%d%d:%d%d:%d%d ",korno[3]/10,korno[3]%10,korno[2]/10,korno[2]%10,korno[1]/10,korno[1]%10,korno[0]/10,korno[0]%10); lcd_gotoxy(0,0); lcd_puts(buffer);} else { sprintf(buffer,"%d%d:%d%d:%d%d:%d%d %d",hold[e][3]/10,hold[e][3]%10,hold[e][2]/10,hold[e][2]%10,hold[e][1]/10,hold[e][1]%10,hold[e][0]/10,hold[e][0]%10,e+1); lcd_gotoxy(0,0); lcd_puts(buffer);} return; }
اول اینکه حق میدم اگر درک برنامه اش یکم سخت باشه اما هرجایی نامفهوم بود ( بعد از این که کلی خودت باهاش ور رفتی و نفهمیدی) بگو تا برات توضیح بدم
فرکانس میکرو 4 مگاهرتز بذار حتما.
کلید هولد رو که فشار میدی یک لحظه مقدار در حال شمارش می ایسته که نگرانش نباش چون در همون موقعی که می ایسته کار شمارش به خوبی در حال انجامه و اصلا وقفه ای در شمارش ایجاد نمیشه :smile:... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآهاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآها، خاطره همتآهاى بلند را از یادها محو کرده است. (نهجآالبلاغه، خطبه211)
امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)
دیدگاه
دیدگاه