打印
[PIC®/AVR®/dsPIC®产品]

AVR328P的按键操作

[复制链接]
279|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuanhuanzi|  楼主 | 2019-10-17 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AVR, se, TE, AD, pad
#include <avr/io.h>
#include <util/delay.h>

//*******************************
#define KEYPAD_PORT         PORTB
#define KEYPAD_DDR           DDRB
#define KEYPAD_PIN           PINB

#define Segment_PORT        PORTD
#define Segment_DDR        DDRD
//*******************************

typedef unsigned char BYTE;

int key_scan(void) {
        BYTE KEY;
        BYTE temp_SW;

        //read Port D
        KEY = KEYPAD_PIN & 0x07;
        //get only low 3 bits
        //KEY &= 0x07;

        temp_SW = 0;

        if (KEY != 0x07)  //if a key is pressed
                        {
                //     KEY = PIND;
                //     KEY &= 0x0f;
                //          if(KEY != 0x0f)
                //          {
                switch (KEY) {
                case 0x03: //00000011
                        temp_SW = 1;
                        break;
                case 0x05: //00000101
                        temp_SW = 2;
                        break;
                default:
                        temp_SW = 3;
                }
                //          }
        }

        return temp_SW;
}

int main(void) {
        BYTE bKey;
        BYTE SEG[12] = { 0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XD8, 0X80, 0X90,
                        0X88, 0X8e };

        Segment_DDR = 0xff;  // 7 segments
        Segment_PORT = 0xff;

        // high 4bits: output
        // low 4bits: input
        KEYPAD_DDR = 0xF8; 0x11111000

        while (1) {
                KEYPAD_PORT = 0xF7; // only bit 6 low, 0b11110111
                //PORTD = ~_BV(2); // only bit 6 low, 0b1011
                _delay_ms(20);
                bKey = key_scan();
                if (bKey == 1)
                        Segment_PORT = 3;
                else if (bKey == 2)
                        Segment_PORT = 6;
                else if (bKey == 3)
                        Segment_PORT = 9;

                KEYPAD_PORT = 0xE8; // only bit 5 low, 0b1101
                //PORTD = ~_BV(1); // only bit 6 low, 0b1101
                _delay_ms(20);
                bKey = key_scan();
                if (bKey == 1)
                        Segment_PORT = 2;
                else if (bKey == 2)
                        Segment_PORT = 5;
                else if (bKey == 3)
                        Segment_PORT = 8;

                KEYPAD_PORT = 0xD8;  // only bit 4 low, 0b1110
                //PORTD = ~_BV(0); // only bit 6 low, 0b1110
                _delay_ms(20);
                bKey = key_scan();
                if (bKey == 1)
                        Segment_PORT = 1;
                else if (bKey == 2)
                        Segment_PORT = 4;
                else if (bKey == 3)
                        Segment_PORT = 7;
        }
}


使用特权

评论回复
沙发
wanduzi| | 2019-10-17 16:50 | 只看该作者
基本的操作,入门必备

使用特权

评论回复
板凳
CoolSilicon| | 2019-10-18 09:57 | 只看该作者
注意防抖哦!

使用特权

评论回复
地板
zljiu| | 2019-11-13 13:06 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

154

主题

2079

帖子

2

粉丝