Keypad ، میکروکنترلر Avr ، و کامپایلر atmel studio

saalek110

Well-Known Member
Keypad ، میکروکنترلر Avr ، و کامپایلر atmel studio


Screenshot_۲۰۲۴-۰۱-۱۴_۰۳۰۰۴۵.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member

در سایت بالابا اتمل استودیو نوشته و کیپد ، شکلش:

Keypad-with-ATmega32.jpg

۴ در ۴ است.
 

saalek110

Well-Known Member
سالک: کد بالا را من تست نکردم.

تاپیک مرتبط:


 

saalek110

Well-Known Member

سایت انگلیسی.
برای کیپد ۳*۴ است.

یک فایل myutils.h را اینکلود کرده. من هنوز اون فایل را پیدا نکردم.
 
آخرین ویرایش:

saalek110

Well-Known Member
Keypad 3×4 ATMega Atmel Studio


file.c
PHP:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdlib.h>
#include "keypad_lib.h"
 
char read_keypad()
{
    DDR_keypad = 0b00001111;
    /* 1 2 3
       4 5 6
       7 8 9
       * 0 #
    */
 
    PORT_keypad = 0b11111110;
    //scan baris 1
    if(PIN_keypad == 0b11101110)
    {
        return ('1');
    }
    else if(PIN_keypad == 0b11011110)
    {
        return ('2');
    }
    else if(PIN_keypad == 0b10111110)
    {
        return ('3');
    }
 
    //scan baris 2
    PORT_keypad = 0b11111101;
    if(PIN_keypad == 0b11101101)
    {
        return ('4');
    }
    else if(PIN_keypad == 0b11011101)
    {
        return ('5');
    }
    else if(PIN_keypad == 0b10111101)
    {
        return ('6');
    }
 
    //scan baris 3
    PORT_keypad = 0b11111011;
    if(PIN_keypad == 0b11101011)
    {
        return ('7');
    }
    else if(PIN_keypad == 0b11011011)
    {
        return ('8');
    }
    else if(PIN_keypad == 0b10111011)
    {
        return ('9');
    }
 
    //scan baris 4
    PORT_keypad = 0b11110111;
    if(PIN_keypad == 0b11100111)
    {
        return ('*');
    }
    else if(PIN_keypad == 0b11010111)
    {
        return ('0');
    }
    else if(PIN_keypad == 0b10110111)
    {
        return ('#');
    }
    return ('$');
}
file.h
PHP:
#ifndef KEYPAD_LIB_H_
#define KEYPAD_LIB_H_
 
#include <inttypes.h>
#include <avr/pgmspace.h>
 
#define PORT_keypad PORTB
#define PIN_keypad PINB
#define DDR_keypad DDRB
 
extern char read_keypad();
 
#endif /* KEYPAD_LIB_H_ */

سالک: کد بالا را تست نکردم ، فقط نقل کردم.
به کدهای فایل با پسوند h دقت کنید ، مثلا PORT_keypad در فایل با پسوند C خواهد شد PORTB


در پست بعد یک تاپیک برای آموزش کار با پورت ها لینک دادم.
کلمه DDRx مثلا DDRB برای تعریف کردن یک پورت برای ورودی یا خروجی است.
خط زیر:
PHP:
DDR_keypad = 0b00001111;

۴ پین را ورودی اعلام کرده. صفرها ورودی اند.
با کلمه PORT_keypad اومده یک پایه را برق داده ، بعد با کلمه PIN_keypad اومده پین ها را خوانده ببینه کدوم برق دار شده ،
این طوری معلوم میشه کدام دکمه keypad فشار داده شده.. چون keypad که خودش برق نداره ، باید از یک پایه برق بدهیم ببینیم برق وارد کدام پین میشه. یعنی کیپد فقط مثل یک سری شلنگ و شیر است. وقتی یک کلید فشار داده میشه ، مسیر یک شلنگ باز میشه ، و با این برق دادن ها و چک کردن ها میشه فهمید کدوم دکمه فشار داده شده.

چون چهار پین بالا ، صفر(یعنی ورودی) بود ، فکر کنم میشه b7 و b6 و b5 و b4
کیپد ما ۳*۴ است ، یعنی c4 ندارد. پس احتمالا r1 و r2 و r3 و r4 را باید به b7 و b6 و b5 و b4 وصل کرد. چون r ها ۴ تا هستند ولی c ها 3 تا هستند. و ما ۴ تا ورودی داریم.
 
آخرین ویرایش:

saalek110

Well-Known Member
در لینک زیر ، یک برنامه است که از تابع پست قبل یعنی read_keypad استفاده کرده....
طرز استفاده از تابع read_keypad فکر کنم از لینک زیر مشخص میشه.
من نمی دونم برنامه لینک زیر کارش چیه ولی نشون داده چطور از تابع read_keypad استفاده کرده.




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

سالک: فعلا من کدها را استفاده نکردم ، فقط تحلیل کردم....
ولی فکر کنم چون ساختار کیپد خیلی ساده است ، کد بالا جواب بدهد....
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا