Visits: 1990
در این مثال می خواهیم یک شمارنده دو رقمی بالا شمار طراحی کنیم. متغییر counter به عنوان شمارنده در حلقه تکرار به صورت افزایشی مقدار آن تغییر میکند. در تابع main دو پورت D و C به صورت خروجی تعریف میشوند و در حلقه تکرار مقدار متغییر counter به دو رقم کم ارزش و با ارزش شکسته شده و سپس در اشاره گر آرایه قرار میگیرد و کد متناظر با آن عدد از آرایه استخراج و روی پورت قرار میگیرد.
همانطور که میدانیم اگر یک عدد دو رقمی را بر 10 تقسیم کنیم در خارج قسمت مقدار با ارزش عدد را خواهیم داشت و در باقیماند مقدار کم ارزش را داریم، که در اینجا با کمک دستور / تقسیم و % باقیمانده این کار را انجام میدهیم. شرطی هم برای جلوگیری از سرریز برقرار میکنیم تا اگر شمارنده بزرگتر از 99 شد ریست شود. تاخیر هم سرعت شمارش را تعیین میکند که در اینجا 100 میلی ثانیه می باشد.
#include#define F_CPU 1000000 #include unsigned char counter,cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; int main(void) { PORTD=0x00; DDRD=0xFF; PORTC=0x00; DDRC=0xFF; while(1) { PORTC=cathode_seg ; PORTD=cathode_seg; counter++; if(counter>99) counter=0; _delay_ms(100); } }