بسم الله الرحمن الرحیم : پروژه ساعت ساده قابل تنظیم با ۷segment و lpc1768 ؛ سلام بر آنانی که در پنهان خود بهاری برای شکفتن دارند؛ عیدتون پیشاپیش مبارک؛ دوباره با یه پروژه دیگه با lpc1768 اومدیم خدمتتون.
پروژه ساعت ساده قابل تنظیم با ۷segment و lpc1768
وسایل لازم برای پروژه ساعت با LPC1768 :
- هدربرد lpc1768 شرکت eca
- سون سگمنت ۴ رقمه کاتد مشترک
- دو تا پوش باتن
- چند تا مقاومت
توضیح پروژه ساعت با LPC1768
خب نحوه کار این ساعت اینجوریه که ما دو تا دکمه داریم که یکیش برای set و دیگری برای افزایش رقم هاست.
- حالت کار عادی
- زدن دکمه set
- تنظیم ساعت شمار
- زدن دکمه set
- تنظیم دقیقه شمار
- زدن دکمه set و حالت عادی کار
توجه : این پروژه فقط ثانیه و دقیقه رو نشون میده و ساعت رو نه.
پروژه ساعت دیجیتال با lpc1768
عکس پروژه در عمل : اول مطلب پبوست شده.
شماتیک پروژه :
کد پروژه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#include <lpc17xx.h> unsigned char zamin[4]={0X7,0XB,0XD,0XE}; unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; signed char a=0,b=0,c=0,d=0,set=0; ///////////////////////////////////////////////////////////////////// void delayMs( uint32_t delayInMs ) { LPC_TIM1->TCR = 0x02; // reset timer LPC_TIM1->PR = 0x00; // set prescaler to zero LPC_TIM1->MR0 = delayInMs * ((SystemCoreClock/4)/(1000-1)); LPC_TIM1->IR = 0xff; // reset all interrrupts LPC_TIM1->MCR = 0x04; // stop timer on match LPC_TIM1->TCR = 0x01; // start timer while (LPC_TIM1->TCR & 0x01);// wait until delay time has elapsed } ////////////////////////////////////////////////////////////////////////// //tabe vaghfe baraye shomarande timer void TIMER0_IRQHandler(void) { LPC_TIM0->IR=(1<<0); //disable interrupt a++; //increase minutes } ///////////////////////////////////////////////////////////////////////// //tabe vaghfe baraye moshakhas kardane halat kar yani(tanzim saat or tanzim daghighe or halat addi) void EINT3_IRQHandler(void) { LPC_TIM0->TCR=0X2; //rset timer0 NVIC_DisableIRQ(TIMER0_IRQn); //disable interrupt for timer0(shomarande timer) LPC_GPIO2->FIOPIN=0XF<<8; //turn off all 7seg while(!(LPC_GPIO0->FIOPIN & 0X1)){;} //wait for stable swith delayMs(100); LPC_GPIOINT->IO0IntClr=(1<<0); //clear interrupt set++; if(set==3) { set=0; NVIC_EnableIRQ(TIMER0_IRQn); //enable interrupt LPC_TIM0->TCR=0X1; //start counter timer } } int main() { SystemInit(); LPC_GPIO2->FIODIR=0XFFF; //set as output //-------------------------------------------------- //TIMER0 BARAYE KAR KOLY SAAT LPC_TIM0->TCR=0X2; LPC_TIM0->MR0=25000000; LPC_TIM0->PR=59; //har 60 clock 1 bar afzayesh TnTC LPC_TIM0->MCR|=(1<<0)|(1<<1); //reset and interrupt NVIC_EnableIRQ(TIMER0_IRQn); LPC_TIM0->TCR=0X1; //-------------------------------------------------- //GPIO INTREERUPT LPC_GPIO0->FIODIR=0X0; LPC_PINCON->PINMODE0|=(1<<1)|(1<<3)|(1<<5); //tri state LPC_GPIOINT->IO0IntEnF=0X01; //interrupt on falling edge NVIC_EnableIRQ(EINT3_IRQn); //--------------------------------------------------- while(1) { ////////////////////////////////////////tanzim saat shomar////////////////////////////////////////////// while(set==1) { LPC_GPIO2->FIOPIN=num[c]|zamin[2]<<8; delayMs(5); LPC_GPIO2->FIOPIN=num[d]|zamin[3]<<8; delayMs(5); //---------------------------------------zadan dokme afzayesh----- if((LPC_GPIO0->FIOPIN & 1<<1)==0) { delayMs(20); LPC_GPIO2->FIOPIN=0XF<<8; while(!(LPC_GPIO0->FIOPIN & 1<<1)); c++; if(c==10) {c=0;d++;} if(d==2&&c==4) {c=0;d=0;} LPC_GPIO2->FIOPIN=num[c]|(0XC<<8 & 0XCFF); LPC_GPIO2->FIOPIN=num[d]|(0XC<<8 & 0XCFF); } } //////////////////////////////////////tanzim daghighe shomar///////////////////////////////////////// while(set==2) { LPC_GPIO2->FIOPIN=num[a]|zamin[0]<<8; delayMs(5); LPC_GPIO2->FIOPIN=num[b]|zamin[1]<<8; delayMs(5); //----------------------------------------------------zadan dokme afzayesh--------- if((LPC_GPIO0->FIOPIN & 1<<1)==0) { delayMs(20); LPC_GPIO2->FIOPIN=0XF<<8; while(!(LPC_GPIO0->FIOPIN & 1<<1)); a++; if(a==10) {a=0;b++;} if(b==6) {a=0;b=0;} LPC_GPIO2->FIOPIN=num[a]|(0X3<<8 & 0X3FF); LPC_GPIO2->FIOPIN=num[b]|(0X3<<8 & 0X3FF); } } /////////////////////////////////////////////halat addi kar saat//////////////////// if(a==10){a=0;b++;} LPC_GPIO2->FIOPIN=num[a]|zamin[0]<<8; delayMs(1); //------------------------------------------------------------ if(b==6){b=0;c++;} LPC_GPIO2->FIOPIN=num[b]|zamin[1]<<8; delayMs(1); //------------------------------------------------------------ if(c==9){c=0;d++;} LPC_GPIO2->FIOPIN=num[c]|zamin[2]<<8; delayMs(1); //------------------------------------------------------------ if(d==2&&c==4){d=0;c=0;} LPC_GPIO2->FIOPIN=num[d]|zamin[3]<<8; delayMs(1); //------------------------------------------------------------ } } |
فیلم پروژه : ساعت دیجیتال قابل تنظیم با سون سگمنت و lpc1768 ARM
تو این هیایوی عید و شلوغیاش یاد فقرا باشین مخصوصا اونایی که آبرومند هستن؛ مهم تر ازون ایام عید برای کسایی سخت و دلگیره که کنار دوست و آشناشون و خونوادشون نیستن؛ یاد کسی باشیم که اصل بهار ایشون هستند ولی غریبن؛ احسن الحال ما انشاء الله زمان ظهوره مولامونه؛ عیدتون بازم مبارک؛ یا علی
مهمان
سلام
مقاومت ها باید چند اهمی باشن؟؟؟
و اینکه چطوری باید بفهمیم چند اهمی بذاریم
مهمان
سلام دوست عزیز
میخواستم از کارت چند تا انتقاد کنم !
امیدوارم ناراحت نشی چون اینا همش خودم تجربه کردم
شماتیکی که من دیدم چند یه اشکال خیلی بزرگ داره!
پورت های ۱۷۶۸ جریان خیلی کمی در اختیار کاربر قرار میده البته درمقایسه با AVR
بنابراین برای درایو کردن یه قطعه خارجی مثل این سونسگمنت ها بهتره از یه بافر یا یه چیز مثل درایور استفاده کنی
من پیشنهاد میکنم از ۷۴HC244 استفاده کنی
موفق باشی
مدیر سایت
سلام – ممنون از شما – عیدتون هم مبارک
نویسنده این مطلب
بله حق با شماست
ولی امکانات محدوده و بیشتر هدف از این پروژه برنامه نویسیش هستش