به نام خدا : سلام خدمت دوستان ؛ این پروژه ساده avr یه شمارنده هست که وقتی شما رو کلید کلیک میکنید سون سگمنت عدد ۰ رو نشون میده حالا اگه دوباره کلیک کنید عدد ۱ رو نشون میده و… در کل اینا برنامه های ساده هستن ولی برا شروع بدک نیستن.(البته این پروژه فک کنم ۲ تا مشکل داره که در آینده میتونید بفهمید مشکلاتش رو )
شمارنده تک رقمی با کلید
شماتیک پروژه :
کد پروژه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <mega8.h> #include <delay.h> void main() { unsigned char cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; int i=0; DDRD=0xff; PORTD=0x00; DDRC.0=0; PINC.0=0; while(1) { if(PINC.0==1) { PORTD=cathode_seg[i]; i=i+1; if(i==10) i=0; } delay_ms(500); } } |
دانلود پروژه این مطلب از سرور سایت
سوالی بود در خدمتیم….البته اگه بلد بودم
مهمان
سلام من یک برنامه ای میخوام که با فشردن کلید های ۱تا ۹ عدد متناظر با آنهارو روی سون سگمنت نمایش بده
مهمان
سلام اقا مهدی این پروژه را با اتمگا 16 smd اس ام دی انجام دادم و نتیجه گرفتم خدا روشکر دارم میره سراغ سون سگمنت دوتایی بعد انشاالله پیشرفته تر از اون و این با smd شدنی هست
مهمان
سلام اگه بخوام این شمارنده رو بادوتا سون سگمنت بنویسم که دورقمو بشماره چه تغییراتی باید به برنامه بدم؟
مهمان
سلام
خیلی عالی بود
مهمان
سلام
ممنون از سایت خوبتون
مهمان
سلام روزبخیر.اگه همین برنامه رو بخواهیم با forبنویسیم و یک سوییچ بذاریم که هروقت سوییچ قطع شد سون سگمنت رو همون عددی که هست متوقف بشه و بعد از اینکه دوباره کلید رو زدیم از همون عددی که متوقف شده ادامه بده به شمردن چجوریاس؟؟؟؟؟؟
مهمان
سلام

روز جمعتون بخیر
من میخواستم یک برنامه شبیه به این بنویسم که با فشار دادن کلید یک واحد 7seg ام افزایش پیدا کنه
میشه کمکم کنید
مهمان
سلام اقا مهدی طاعاتتون قبول
حاجی نگاه من هنوز در حد وقفه ADC تایمر کانتر نیستم چرا دروغ قبل خ افتضاح بودم
این برنامه رو ببین من اومدیم با SWCASEنوشتم ولی ایراد داره بنظرت چکارکنم
http://s9.picofile.com/file/8334195434/7SEQ2.rar.html
مهمان
سلام اقا مهدی فکر نکنی دیونما پشت هم پیام میدم
دارم پروژه 2سون سگمنت مینویسم ولی هی این ارور گیر میده به این ایف چرا
http://s9.picofile.com/file/8334121892/2.jpg
نویسنده این مطلب
سلام مجدد – خط 151 نقطه ویرگول ( ; ) نزاشتی – سوال پرسیدن چه ربطی به اینی که میگی داره – یعنی الان که من بعضا تو eca میام 3-4 تا سوال پشت سر هم میپرسم و بعد میرم چند ماه دیگه یا سال دیگه سوال میپرسم دیونم؟ خخخخ
مهمان
سلام اقا مشکل حل شد نشستم 10تا برنامه نوشتم رسیدم به برنامه ای که تو نوشتی که خوبترینش بنظرم فقط دوتا مساله پیش میاد
یکی اینکه تو پروتئوس من(مال تو اینطوری نیست نمیدونم چرا)با یک لحظه کلید کردن روی کلیدعدد از صفرنمیشماره یعنی چندبار با مکث باید کلید بزنی تا بره روصفر وشمارشو اغاز کنه
دوم اینکه این برنامه یه مشکل داره اگر کلید گیرکنه مستمر میشماره ویک مشکل اساسی تو برنامس
یه بار یه جا نحوه کد نویسیش دیده بودم که چطور میشه این مشکلوبرطرف کرد ولی یادم رفت(همش تقصیر خدمته)
دقیقا اونفردی که توضیح میداد میگفت بچه های برنامه نویس حرفه ای این کد مینویسن که به قضیه گیر کلید برخورد نکنن
درنهایت یک سوال چرا برای ifدوم پرانتز نذاشتی ؟؟؟
الان دارم رودوتا سگمنت کار میکنم
نویسنده این مطلب
سلام-با پروتئوس کار نکن – در عمل کار کن –
دستورات شرطی که زیر مجموعش یک خط ( یک دستور ) هستش – الزامی به گزاشتن پرانتز نیست – ولی بیش از دو دستور بشه کدهای if، باید پرانتز استفاده کرد حتما.
کد+شماتیکت رو بفرست.
میتونی از وقفه خارجی استفاده کنی تا این داستانا ایجاد نشه – چون شما در برنامه هاتون از Dealy استفاده میکنید و timer این مشکل کلید زنی رخ میده – چون میکرو سر اون Dealy ها گیر میکنه و طرف هم مثلا 0.5 ثانیه یا کمتر کلید رو فشار میده و بعد ول میکنه ولذا تو برنامه میکرو – میکرو نمیتونه رخ دادن اون کلیدو تشخیص بده.
مهمان
ببببخشید اشتپ شد
من همون مدار تورو گذاشتم فقط پول اپ کردم پین کلیدو
if (PINC.0==0 && i=10){
i=0 ;
PORTD=cathode_seg[0x3F]
نویسنده این مطلب
مقاومت پول دان باید بزاری نه پول آپ
مهمان
سلام مشکل این چیه چرا ارور میده و اجرا نمیشه
if (PINC.0==0 && i=10){
i=0 ;
PORTD=cathode_seg[0x3F]
}
نویسنده این مطلب
سلام
نمیدونم این کدی که نوشتی رو کجای کد این مطلب قرار دادی و چه تغیرااتی دادی ولی یه موردی – برای اون کلید – یه مقاومت پول دان بزار – تو شماتیک تو مطلب من نزاشتم الان که دیدم که خب این مورد مشکل ایجاد میکنه.
مهمان
ببخشید خیلی سوال میپرسم تو پروتئوس باید برای مقاومت بعد از کلید چی سرچ کنیم
نویسنده این مطلب
مقاومت res باید باشه
مهمان
سلام مشکل این چیه از رو کد شما نوشتم ولی خواستم دو رقمیش کنم
unsigned char cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0}x7F,0x6F
نویسنده این مطلب
سلام
اون دو تا متغییر آخری چرا خارج از پرانتزه؟
مهمان
نه همه داخلن تو سایت خواستم بنویسم اینجوری شد
تو کدویژن که مینویسم این خط ارور میده
نویسنده این مطلب
این درستشه :
unsigned char Cathode_seg[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F };
مهمان
و اینکه با atmega 32 هم میشه ؟
نویسنده این مطلب
شدنش میشه ولی خب باید یه بررسی کنی ببینی تو پورت و پایه هایی که داریم استفاده میکنیم تفاوتی نباشه و اگه بود درستش کنیم.
مهمان
سلام میشه بگین کدش چجوری میشه اگه بخوام دو رقمیش کنم ولی با کلید هم باشه ؟ اتصالاتش هم که مثل شمارنده ٠ تا ٩٩ هست که گذاشتین ؟
نویسنده این مطلب
کد نمینویسم برا کسی.خودتون برید بنویسید.
مهمان
با سلام و خسته نباشید
مطالب بسیار عالی بودن . فقط یه سوال > میشه راهتمایی کنین که یک شمارنده 0 تا 9 روی سون سگمنت کاتد مشترک باشه که دارای کلید باشه به طوری که اگه کلید بسته بود شمارنده بالا شمار و اگر باز بود پایین شمار باشد .
ممنون میشم که راهنمایی کنین .
نویسنده این مطلب
سلام-کد نوشته نمیشه.
مهمان
سلام. من رشتم کامپیوتره… و به دلیل کار کردن یه جلسه هم سر کلاس نرفتم:| خخ و استاد هم همچین چیزی ازم خواست…


درکل الان شب امتحانمه و من دارم اینو براش آماده میکنم. ممنون نجاتم دادی
آموزش خارجی هم زیاد دیدم ولی درکل همش خطا میداد… و یا مثلا keil میخواست و این خطارو میداد
The selected compiler ‘Keil for 8051’ is not installed.
Compilation failed. Check the Project Settings.
اینو هم براش نصب کردم ولی فایده نداشت. درکل ممنون
مهمان
ممنون بابت پاسختون لطف کردین جناب مهندس من تازه شروع بع یادگیری کردم کتاب مهندس جابر الوندی رو گرفتم ولی خیلی کلی یه سری چیزا رو تئضیح دادن اگر یه کتابی یا مرجعی معرفی کنین که کمی جزیی تر مسایل رو بررسی کرده باشه ممنون میشم
نویسنده این مطلب
سلام-والا من خودم با همین کتاب شروع کردم بعدش دیگه از گوگل هرچی میخواستم پیدا میکردم و پیدا میکنم – گوگل منبع خوبیه.
مهمان
سلام وقتتون بخیر ممنون میشم اگر توضیح مختصری در باره این خط بدین 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F که منظور از 0x ها پشت هگز در تعریف کد های سون سگمت چیست ممنون از لطفتون
نویسنده این مطلب
سلام
به کامپایلر میگیم اینا عدد هگز هستن
مهمان
سلام خسته نباشید!هگز شمارنده با کلید بعد دانلود باز نمیشه!!!
نویسنده این مطلب
سلام
تو سایت آپلود کردم
مهمان
ببخشید شما تو توضیحات فرمودین با هربار زدن کلید یه شماره میشمره ولی این برنامه دفه اول بعد از زدن پوش باتن خودش خودکار تا ۹ میشمره!
نویسنده این مطلب
سلام
مطلب زیر رو بخونید متوجه میشید مشکل کار رو.
بعد بگید ببینم درست متوجه شدید یا نه
https://dmf313.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-%D9%85%DB%8C%DA%A9%D8%B1%D9%88%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1-avr-%D8%AC%D9%84%D8%B3%D9%8712/
مهمان
کاملا متوجه شدم هگز برنامه شما تو پروتئوسی که گذاشتین درست کار میکنه اما تو پروتئوس من بعد وصل کلید اتوماتیک کار میکنه حتی برنامه رو هم دوباره نوشتم ولی …
پروتئوس من نسخه ۷ هست شاید مشکل از اونه!
نویسنده این مطلب
خب معلوم میشه که مطلبی که گفتم رو نخوندید ..
باید بگم که برا اون دکمه(باتن) باید یه مقاومت پول دان بزاری تا مشکل حل بشه.
توضیحات کامل در این زمین هدر اون مطلبی که گفتم داده شده است
مهمان
پس معلوم شد با بی دقتی خوندم
!درست شد مرسی!دمتون گرم!
مهمان
ببخشيد با زبان بيسيك اشناي دارم
مهمان
سلام مهدي جان ممنون ميشم كمكم كني راستش من با زبان بيسيك اشناي ندارم و با سي اشناي ندارم .ميخواستم بدونم اگه بجاي كليد كيپد بذاريم وخروجي پنج عدد سون سگمنت باشه برنامه به چه صورتي نوشته ميشه . تشكر بابت اين سايت اموزنده موفق باشي
نویسنده این مطلب
سلام
الان من باس کدش رو بزارم یا چی دیگه ای؟
متوجه نشدم دقیقا…
نویسنده سایت
ولی خیلی با مرامی دمت گرم
نویسنده این مطلب
برو فک کن چن دقیقه ….. ۲۰ دقیقه….مردونه فک کن….چون خودت به جواب برسی خیلی خیلی بهتره….به نکته و به اشکال کار پی میبری….ولی اگه من برات حل کنم….مشکل کار رو متوجه نمیشی
در هر صورت اگه متوجه نشدی در خدمتیم…..
نویسنده سایت
مهدی جان شرمنده خیلی سوال می کنم

من دوباره این برنامه رو جور دیگه نوشتم بقه صورتی که با یک کلید یک واحد افزایش و با یک کلید یک واحد کاهش پیدا کنه
اینم برنامم اما بازم به مشکل برخردم به نظرت کجاش ایراد داره
#include
#include
flash unsigned char cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x6F,0x76};
void main(void)
{int i=0;
DDRD=0xff;
PORTD=0x00;
DDRC.1=0;
PINC.1=0 ;
DDRC.0=0;
PINC.0=0;
while(1)
{
if(PINC.0==1){ PORTD=cathode_seg[i];
i=i+1; }
if(PINC.1==1)
i=i-1 ;
if(i==18)i=0;
delay_ms(500);
}}
نویسنده این مطلب
اولا ازز این به بعد فایل پروژه رو بفرست…
دوما
مردونه ۲۰ دقیقه بشین فک کن….اگه نشد درخدمتیم
نویسنده این مطلب
چون اگه من جواب بدم جالب نیست…خودش مشکل رو پیدا کنی خیلی خیلی بهتره….
نویسنده سایت
اره دیلای بای اینه که میکرو فرصت تصمیم گیری داشته باشه


و این که اعداد سریع عوض نشن درسته
دستور ایف هم فهمیدم
نویسنده این مطلب
برای اینه که…..اگه داخل نباشه مشکل زیر پیش میاد
چک میکنه پورت سی رو(در حد میکرو ثانیه…مثلا…)….۱ ثانیه صبر
چک میکنه پورت سی رو(در حد میکرو ثانیه…مثلا…)….۱ ثانیه صبر
.
.
.
————-
در واقع همش صبر و دیلای داره تا این که بخواد پایه رو چک کنه…..
ولی وقتی دیلای داخل باشه…..هی چک میکنه و هی چک میکنه و هی….تا این که پایه C.0 یک بشه و بعد کارش رو انجام میده(نمایش عدد در ۷S و افزایش ۱ واحدی متغییر) و بعد دیلای ۱ ثانیه
OK?
نویسنده سایت
اول : خخخخخخ

بعد اره فهمیدم چون اگه تعخیر نداشت مثل فرفره می چرخید
سوال دوم
منضور م اینه که چرا ایف دوم داخل دستورات ایف اولیه }{ منضورم چرا از } { برا ایف استفاده کردی
نویسنده این مطلب
میگم فهمیدی که چرا دیلای رو داخل
if(PINC.0==1)
گزاشتم و خارجش(مثل کد اولی خودت) نزاشتم؟؟؟؟
———————————————————
برا تمامی if ها باید از {} استفاده کد و کد های if رو داخلش نوشت ولی اگه داخل if فقط یه کد بود….میشه }{ رو قرار نداد…
if دومی هم با توجه به پروژه فرق نداره داخل if اولی باشه یا نباشه…..
نویسنده سایت
دو تا سوال داشتم


چرا در حلقه ایف دیلی اسفاده کردی
دوم چرا شرط دوم ایف داخل برنامه های اجرایی ایف اولی
منضور مکان ایف اول و ایف دوم
نویسنده این مطلب
سوال۱) خودت بشین ۲ دقیقه فک کن..
سوال۲) نفهمیدم
مهمان
داداش این دستورا رو چجوری توی این صفحه مشکی خوشگل میذاری؟؟ بگو ما هم ازین کارا کنیم ملت کف کنن
نویسنده این مطلب
افزونه هستش….
تو نت سرچ کن افزونه گزاشتن کد در سایت
کلی مطلب میاد بالا
مهمان
گزاشت؟ یا گذاشت؟؟؟ O_o
18 تمام !
نویسنده این مطلب
مهمان
منضورم اینکه به جای این که ولتاژ پنج ولت وصل کنیم
به زمین وصل کنیم اون موثع برنامه چه جوری میشه (توی یکام دیبانس بود اگه اشتباه نکنم
راستی
VOID main ()n
void main(void)
چه فرقی می کنه
نویسنده این مطلب
میشه….
هیچی میگی هر موقع فلان پایه ۰ شد فلان کار رو کن….البته بهتره همیشه برا دکه ها یا همون باتن ها یه مقاومت پول آپ یا پول دان گزاشت…..که در این جا باید یه مقاومت پول آپ گزاشت….
اینی که تو نوشتی
VOID main ()n void main(void)
معنی نداره
ولی اگه منظورت اینه
VOID main (void) void main(void)
سمت چپی غلط هستش
>>>تو C حروف کوچک و بزرگ با هم فرق دارن و جدا از هم هستن…….
void اولی برا تعیین اینه که تابع چیزی ارسال میکنه یا نه
و void داخل پرانتز برا اینه که بینیم تابع متغییری دریافت میکنه یا نه
مهمان
سلام و خسته نباشید



یک سوال چرا اول وقتی ورودی رو تعریف کردی بعد برابر با صفر قرار دادی
من فکر می کنم بخاطر اینکه وقتی کلید وصل شد و قطع شد ورودی راحت تر به به حالت قبل برگرده
دومین سوال:
اگر قرار باشه ورودی به جای یک شدن صفر باشه چکار کنم
سومین سوال:
در قسمت ایف
در یک جا امدی2 تا مساوی گزاشتی تو یک جا دیگه یکی
من فکر می کنم یک مساوی یعنی برابر بایکش کن
و دو مساوی یعنی اینه گه مقایسه کن
درسته
شرمنده داداش انقدر سوال می کنم
نویسنده این مطلب
سلام
—- زیاد مهم نیست به نظرم
اینو میگی؟؟
DDRC.0=0;
PINC.0=0;
خط دوم مقدار اولیه هستش…..اصلا من اکثر موارد تا لازم نشه اصلا از استفاده نمیکنم……همیشه هم همین طور مینویسم
————————
متوجه نشدم
——————
سوال۳: بله
——————
سوالات زیاد نبود که…..سوال بود بپرس درخدمتیم