:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
|
|
نشاط [ مشتاق الله ]
قوة السمعة:0
|
|
21-09-2016, 08:59 AM
المشاركة 1
|
|
بسم الله الرحمن الرحيم
السلام عليم و رحمة الله و بركاته
اخوتى الاعزاء ان شاء الله اقدم لكم محاولة لمشروع عداد مواتير و التحكم في تشغيل و ايقاف موتور اللف , و هذه النسخة الاولى و قابلة للتعديل او التطوير لاى اقتراح عليها .
باستخدام ميكروسي AVR :
كود:
/*
PROJECT : TRANSFORMER TURNS COUNTER AND CONTROLLER .
MCU: AVR ATMEGA 8 OR ELSE .
CRYSTAL : INTERNAL ANY VALUE .
INPUT PIN : INPUT PIN FROM COUNTER is ( INT1 ).
MOTOR PIN : PORTC PIN 0.
BUZZER PIN : PORTC PIN 1.
KEYPAD : 4X3 .
DISPLAY : LCD 16X2.
start motor : press ( # ).
delete entered number : press ( * )
VERSION : V1.0 .
DATE : 2016.
*/
#define STARTMOTOR (PORTC=1)
#define STARTBUZZER (PORTC=2)
sbit LCD_RS at PORTD1_bit;
sbit LCD_EN at PORTD2_bit;
sbit LCD_D4 at PORTD4_bit;
sbit LCD_D5 at PORTD5_bit;
sbit LCD_D6 at PORTD6_bit;
sbit LCD_D7 at PORTD7_bit;
sbit LCD_RS_Direction at DDD1_bit;
sbit LCD_EN_Direction at DDD2_bit;
sbit LCD_D4_Direction at DDD4_bit;
sbit LCD_D5_Direction at DDD5_bit;
sbit LCD_D6_Direction at DDD6_bit;
sbit LCD_D7_Direction at DDD7_bit;
// End LCD module connections
char keypadPort at PORTB;
char keypadPort_Direction at DDRB;
// End Keypad module connections
char kp;
unsigned int counter=0 , maxTurns=0;
void interruptcounter()iv IVT_ADDR_INT1
{
counter++ ;
GIFR |= 1<< INTF1;
}
void startCount(){
SREG_I_BIT=1;
GICR |= 1<<INT1;
MCUCR |= 0X08;// external counter T1 on falling edge
}
void firstScreen(){
lcd_out(1,1," HELLOW");
lcd_out(2,1,"TRANSF. COUNTER");
delay_ms(1000);
lcd_cmd(_lcd_clear);
lcd_out(1,1,"MAX 65000 TURNS");
delay_ms(1000);
lcd_cmd(_lcd_clear);
lcd_out(1,1,"NUMBER :0 ");
lcd_out(2,1,"OK= # | NO=*");
}
void displayCounter(){
lcd_cmd(_lcd_clear);
lcd_out(1,1," TURNS:");
delay_ms(1000);
}
void displayValue(char row, char column, int value ){
lcd_chr( row,column,(value/10000+48 ));
lcd_chr( row,column+1,((value%10000)/1000 + 48));
lcd_chr( row,column+2,(((value%10000)%1000)/100 + 48));
lcd_chr( row,column+3,((((value%10000)%1000)%100)/10 + 48));
lcd_chr( row,column+4,((((value%10000)%1000)%100)%10 + 48));
}
void main() {
DDRC = 0XFF;
lcd_init();
Keypad_init();
firstScreen();
while(1){
do{ kp=0;
kp = Keypad_Key_click();
}
while(!kp) ;
switch (kp) {
case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
// case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
// case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
// case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
// case 16: kp = 68; break; // D
}
if(kp==42){ maxTurns = 0; // '*'
lcd_out(1,9,"0 ");
}
else if(kp==35){displayCounter(); // '#'
startCount();
STARTMOTOR;
while(1)
{
displayValue(1,11,counter);
if(counter == maxTurns){
STARTBUZZER ;
}
}
}
else {
maxTurns = maxTurns * 10 + (kp-48);
displayValue(1,9,maxTurns);
}
}
}
ارجو من الله ان ينفع بنا .
و على الله قصد السبيل .
الله ولى التوفيق
اللهم اجعلنا مؤمنين حقا
و علمنا ما ينفعنا و ينفع بنا
اللهم اكتب لنا الحج و العمرة و اهلنا
|