سلام من یه برنامه برای سون سگمنت نوشتم طبق اموزش ها و پست هایی که تو سایت دیدم برای یه سون سگمنت کاتد مشترک سه تایی
ولی سون سگمنت اون عدد درست نشون نمیده و اصلا عدد نشون نمیده
من تو اینجا دو تا سنسور به میکرو وصل کردم و سنسور برای هر بار خواندن نیاز به وقفه ای دو ثانیه ای داره من برای نمایش اطلاعات روی سون سگمنت به جای وقفه یه حلقه تعریف کردم که اعداد رو رویه سون سگمنت نشون بده انقدر تکرار کنه تا زمان تلف شده به دو ثانیه برسه.
و برنامه رو طوری نوشتم یک بار مقدار سنسور اول و یک بار مقدار سنسور دوم رو رویه سون سگمنت نشون بده برنامم هم به صورت زیر هست
پورت avr به سون سگمنت
اتصال نامی پایه های سون سگمنت به میکرو به صورت بالا هست
متغییر ارایه برای سون سگمنت:
برنامه نمایش روی سون سگمنت t دارای یک مقدار سه رقمی و h دارای یک مقدار دو رقمی:
کل برنامه:
با تشکر از این وقت گذاشتید و سوالمو خوندین با تشکر
ولی سون سگمنت اون عدد درست نشون نمیده و اصلا عدد نشون نمیده
من تو اینجا دو تا سنسور به میکرو وصل کردم و سنسور برای هر بار خواندن نیاز به وقفه ای دو ثانیه ای داره من برای نمایش اطلاعات روی سون سگمنت به جای وقفه یه حلقه تعریف کردم که اعداد رو رویه سون سگمنت نشون بده انقدر تکرار کنه تا زمان تلف شده به دو ثانیه برسه.
و برنامه رو طوری نوشتم یک بار مقدار سنسور اول و یک بار مقدار سنسور دوم رو رویه سون سگمنت نشون بده برنامم هم به صورت زیر هست
پورت avr به سون سگمنت
کد:
PORTA.0=A PORTA.1=B PORTA.2=C PORTA.3=D PORTA.4=E PORTA.5=F PORTA.6=G 1=PORTC.7 2=PORTC.6 3=PORTC.5
متغییر ارایه برای سون سگمنت:
کد:
unsigned char seg[10]={0xfc,0x60,0xd8,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
کد:
if(b=2){ a[1]=h%10; a[0]=(h/10)%10; for(b=0;b<300;b++){ PORTC.7=1; seg_port=seg[a[0]]; delay_ms(4); PORTC.7=0; PORTC.6=1; seg_port=seg[a[1]]; delay_ms(4); PORTC.6=0; } b=1; } else{ a[2]=t%10; a[1]=(t/10)%10; a[0]=(t/100)%10; for(b=0;b<200;b++){ PORTC.7=1; seg_port=seg[a[0]]; delay_ms(4); PORTC.7=0; PORTC.6=1; seg_port=seg[a[1]]; delay_ms(4); PORTC.6=0; PORTC.5=1; seg_port=seg[a[2]]; delay_ms(4); PORTC.5=0; } b=2; }
کد:
#include <io.h> #include <dht21.h> #asm .equ __w1_port=0x18 .equ __w1_bit=1 #endasm #include <ds18b20.h> #include <1wire.h> #include <string.h> #define seg_ddr DDRA #define seg_port PORTA void main(void) { unsigned char seg[10]={0xfc,0x60,0xd8,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; int a[3],b; unsigned char rom_codes[1][9]; int temp=0,t2; int humidity=0; float t3; int t,h; DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); seg_ddr=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0); seg_port=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (1<<PORTA3) | (1<<PORTA2) | (1<<PORTA1) | (1<<PORTA0); PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); delay_ms(2000); seg_port=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); w1_search(0xf0,rom_codes); ds18b20_init(&rom_codes[0][0],0,80,3); while (1) { // Place your code here read_dht11(&temp,&humidity); t3=ds18b20_temperature(&rom_codes[0][0]); t2=t3*10; h=humidity; t=t2; if(b=2){ a[1]=h%10; a[0]=(h/10)%10; for(b=0;b<300;b++){ PORTC.7=1; seg_port=seg[a[0]]; delay_ms(4); PORTC.7=0; PORTC.6=1; seg_port=seg[a[1]]; delay_ms(4); PORTC.6=0; } b=1; } else{ a[2]=t%10; a[1]=(t/10)%10; a[0]=(t/100)%10; for(b=0;b<200;b++){ PORTC.7=1; seg_port=seg[a[0]]; delay_ms(4); PORTC.7=0; PORTC.6=1; seg_port=seg[a[1]]; delay_ms(4); PORTC.6=0; PORTC.5=1; seg_port=seg[a[2]]; delay_ms(4); PORTC.5=0; } b=2; } } }
دیدگاه