با سلام ،
دوست عزیز شما در حال استفاده از ورژنی قدیمی از اینترنت اکسپلورر هستید ، برای اینکه مشکلات ناشی از نمایش را نداشته باشید ، لطفا اقدام به دریافت مرورگری مناسب کرده و یا از ورژن قدیمی ما استفاده نمایید.


امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل کمک در ساخت شمارنده avr
#1
WleSmile سلام، من دوستان من می خواستم یک پروژه طراحی کنم که در اون دو عدد بدم و میکرو هم بعد از انجام چند عملیات آن عددی که بین این دو عدد مشترک است رو شناسایی کنه و بعد از رسیدن این دو عدد به یکدیگر توی lcd بنویسه ok . WleSmile

ولی مشکل من چی:
 من طبق این برنامه زیر دو متغیر از نوع بایت معرفی کرده‌ام و برای متغییر A عدد 11 رو دادم و به متغییر B عدد 1 رو دادم و بعد توی حلقه نوشتم از متغییر A کم کن و به متغییر B اضافه کن.
و بعد دو عدد شرط گذاشتم که اگر متغییر A  برابر 1 باشه، متغییر A رو 11 قرار بده. و در شرط بعد نوشته ام اگه B  بیشتر از 11 باشه، متغییر B رو 1 قرار بده.
در دستور های بعدی هم گفته ام متغییر ها رو رویLCD نمایش بده.
در دستور آخر هم شرط گذاشتم که اگه متغییر های A و B با هم برابر باشند توی LCD بنویسه OK.


کد:
$regfile = "m8def.dat"
$crystal = 8000000
'------------------------------------------------------------------------------
Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.2 , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6
Config Lcd = 16 * 2
Cursor Off
'-------------------------------------------------------------------------------
Dim A As Byte
Dim B As Byte
'-------------------------------------------------------------------------------
A = 11
B = 1
'-------------------------------------------------------------------------------
Do
'-------------------------------------------------------------------------------
Decr A
Incr B
'-------------------------------------------------------------------------------
If A = 1 Then A = 11
If B < 11 Then B = 1
'-------------------------------------------------------------------------------
Locate 1 , 1
Lcd A
'-------------------------------------------------------------------------------
Locate 2 , 1
Lcd B
'-------------------------------------------------------------------------------
If A = B Then
Locate 1 , 10
Lcd "ok"
End If
'-------------------------------------------------------------------------------
Loop
'-------------------------------------------------------------------------------
End

ولی توی پروتئوس کلا یک چیزه دیگه نشون می ده. WleFacepalm

WleCrying لطفا توی برنامه نویسی کمکم کنید. Sign_help

دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.


          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
#2
داداش پروتیوس کرک شدس بعضی وقتا درست کار نمیکنه تو واقعیت مدارتو ببند
پاسخ
#3
(3 مهر 1394، 12:31 صبح)MohammadMers نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
داداش پروتیوس کرک شدس بعضی وقتا درست کار نمیکنه تو واقعیت مدارتو ببند
ممنون از پیشنهاد شما ولی در اینجا که هستم دسترسی به بردبورد ندارم ولی توی خونه با بردبورد بستم مثل پروتئوس عمل میکنه. فکر کنم برنامه مشکل داشته باشه چون با ARDUINO هم ساختم نشد.
          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
#4
سلام دوست عزیز یه قسمت از کدتو اشتباه کرده بودی اصلاحش کردم ببین منظورت همین بوده
کد:
$regfile = "m8def.dat"
$crystal = 8000000
'------------------------------------------------------------------------------
Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.2 , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6
Config Lcd = 16 * 2
Cursor Off
'-------------------------------------------------------------------------------
Dim A As Byte
Dim B As Byte
'-------------------------------------------------------------------------------
A = 11
B = 1
'-------------------------------------------------------------------------------
Do
'-------------------------------------------------------------------------------
Decr A
Incr B
'-------------------------------------------------------------------------------
If A = 1 Then A = 11
If B > 11 Then B = 1
'-------------------------------------------------------------------------------
Waitms 100
Locate 1 , 1
Lcd A
'-------------------------------------------------------------------------------
Locate 2 , 1
Lcd B
'-------------------------------------------------------------------------------
If A = B Then
Locate 1 , 10
Lcd "ok"
End If
'-------------------------------------------------------------------------------
Loop
'-------------------------------------------------------------------------------
End

پاسخ
#5
(3 مهر 1394، 01:46 صبح)mehranviva نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
سلام دوست عزیز یه قسمت از کدتو اشتباه کرده بودی اصلاحش کردم ببین منظورت همین بوده


کد:
$regfile = "m8def.dat"
$crystal = 8000000
'------------------------------------------------------------------------------
Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.2 , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6
Config Lcd = 16 * 2
Cursor Off
'-------------------------------------------------------------------------------
Dim A As Byte
Dim B As Byte
'-------------------------------------------------------------------------------
A = 11
B = 1
'-------------------------------------------------------------------------------
Do
'-------------------------------------------------------------------------------
Decr A
Incr B
'-------------------------------------------------------------------------------
If A = 1 Then A = 11
If B > 11 Then B = 1
'-------------------------------------------------------------------------------
Waitms 100
Locate 1 , 1
Lcd A
'-------------------------------------------------------------------------------
Locate 2 , 1
Lcd B
'-------------------------------------------------------------------------------
If A = B Then
Locate 1 , 10
Lcd "ok"
End If
'-------------------------------------------------------------------------------
Loop
'-------------------------------------------------------------------------------
End
دوست عزیز باز هم نمیشه این هم عکسش. در واقع طبق دستور متغییرA وقتی که به 1 رسید باید 11 بشه و متغییر B هم بعد از بیشتر شدن از عدد 11 باید 1 بشه که نمیشه WleFacepalm
İmage
          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
#6


سلام
میشه کدی که در آردوینو نوشتید رو بذارید. (بسکام بلد نیستم WleFacepalm )
پاسخ
#7
(3 مهر 1394، 02:27 عصر)robot12 نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
سلام
میشه کدی که در آردوینو نوشتید رو بذارید. (بسکام بلد نیستم WleFacepalm )
سلام، این هم لینک .
دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.

          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
#8
ظاهراً وقتی length هر نوشته کم میشود رقم سمت راست در lcd میماند. یعنی مثلا کد زیر:
کد:
lcd.setCursor(0,0);
 lcd.print('abc');
lcd.setCursor(0,0);
 lcd.print('11');
نتیجه زیر را میدهد:
کد:
11c

پس قبل از print باید clear شود.
کد:
#include <LiquidCrystal.h>
LiquidCrystal lcd(1 , 2 , 3 , 4 , 5 , 6);
byte a  = 11;
byte b  = 1;

void setup() {
 lcd.begin(16,2);
}

void loop() {
 a--;
 b++;
 delay(500);
 lcd.clear(); //<------
 if (a == 1){a = 11;}
 if (b > 11) {b = 1;}
 lcd.setCursor(0,0);
 lcd.print(a);
 lcd.setCursor(0,1);
 lcd.print(b);
 
 if (a == b) {lcd.setCursor(10,0); lcd.print("ok");}
}
البته شرط دوم هم باید علامت بزرگتر باشد if b > 11
پاسخ
#9
(3 مهر 1394، 03:14 عصر)robot12 نوشته است: دیدن لینک ها برای شما امکان پذیر نیست. لطفا ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید.
ظاهراً وقتی length هر نوشته کم میشود رقم سمت راست در lcd میماند. یعنی مثلا کد زیر:


کد:
lcd.setCursor(0,0);
 lcd.print('abc');
lcd.setCursor(0,0);
 lcd.print('11');
نتیجه زیر را میدهد:


کد:
11c

پس قبل از print باید clear شود.


کد:
#include <LiquidCrystal.h>
LiquidCrystal lcd(1 , 2 , 3 , 4 , 5 , 6);
byte a  = 11;
byte b  = 1;

void setup() {
 lcd.begin(16,2);
}

void loop() {
 a--;
 b++;
 delay(500);
 lcd.clear(); //<------
 if (a == 1){a = 11;}
 if (b > 11) {b = 1;}
 lcd.setCursor(0,0);
 lcd.print(a);
 lcd.setCursor(0,1);
 lcd.print(b);
 
 if (a == b) {lcd.setCursor(10,0); lcd.print("ok");}
}
البته شرط دوم هم باید علامت بزرگتر باشد if b > 11

ممنون از جواب شما این درست شد توی عدد 6 ok مینویسه ولی چه طوری این دو متغییر در عدد 11 هم به هم می رسند.
          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
#10
درست شد ممنون
          چو عاشق می‌شدم گفتم که بردم گوهر مقصود  ندانستم که این دریا چه موج خون فشان دارد 

پاسخ
مشترک شدن در این موضوع


پرش به انجمن:

کاربرانِ درحال بازدید از این موضوع: 1 مهمان

انتخاب پوسته :

دسترسی سریع
درباره ما
انجمن سرزمین الکترونیک در 20 شهریور 91 تاسیس شده ، که همیشه سعی کرده با ظاهری متفاوت و سرعتی خوب رضایت کاربران را جلب کند ، امیدواریم توانسته باشیم گامی کوچک در پیشرفت فناوری در ایران برداشته باشیم...
نیرو گرفته از MyBB 1.8.6 با فارسی سازی مای بی بی ایران - طراحی شده در : ملت دیزاین
© تمامی حقوق برای انجمن سرزمین الکترونیک محفوظ می باشد .

پوسته‌ی انجمن: