<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > AVR簡(jiǎn)單好用的4x4矩陣鍵盤(pán)

AVR簡(jiǎn)單好用的4x4矩陣鍵盤(pán)

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
// Target : ATMEGA16

// Crystal: 8.0000Mhz

本文引用地址:http://dyxdggzs.com/article/201611/317335.htm

//key.h

#ifndef _4X4_H_
#define _4X4_H_

#define No_key 255

#define key_port PORTB
#define key_port_ddr DDRB
#define key_port_pin PINB


unsigned char keyboard_Scan(void);

#endif

//key.c

#include
#include

#include "key.h"

const unsigned char key_table[16] =
{
1, 2, 3,12,
4, 5, 6,13,
7, 8, 9,14,
10,0,11,15,
};

void delay_1ms(void)//1ms延時(shí)函數
{
unsigned int i;
for (i=0;i<1140;i++);
}

void delay_nms(unsigned int n)//N ms延時(shí)函數
{
unsigned int i=0;
for (i=0;i delay_1ms();
}

//4x4矩陣鍵盤(pán)掃描函數

unsigned char keyboard_Scan(void)
{
unsigned char temp,key,row,Column;

key_port_ddr = 0b00001111;// 高四位輸入行線(xiàn)/低四位輸出列線(xiàn)
key_port= 0b11110000;// 高四位打開(kāi)上拉電阻/低四位輸出低電平
delay_nus(5);// 延時(shí)5us
if((key_port_pin & 0xF0)!= 0xF0)// 作初檢查有否鍵按下,沒(méi)有,就返回
{// 如果行線(xiàn)不全為1,可能有鍵按下
delay_nms(5);// 延時(shí)去抖動(dòng)

//設置列線(xiàn)初始值3~0=1110
for(Column=0,key_port=0b11111110;Column<4;Column++)
{
for(row=0,temp=0b11101111;row<4;row++)// 設置行線(xiàn)初始值7~4=1110
{
while((key_port_pin & 0xF0)==(temp & 0xF0))// 輸入行線(xiàn),查看這行有否鍵按下
{
key=4*row+Column;// 鍵編碼=4*行輸入值+列掃描值
key=key_table[key];// 鍵盤(pán)編碼轉換鍵值
return (key);
}
temp<<=1;// 行線(xiàn)左移1位
}
key_port=((key_port<<1)|0x01);// 列線(xiàn)掃描值左移1位,掃描下一行
}
}
return (No_key);
}

//main.c

#include
#include

#include "key.h"

voidmain(void)
{
unsigned char Key;
while(1)
{
Key = keyboard_Scan();// 鍵盤(pán)掃描
switch(Key)
{
case 0:
break;

......

default:
break;
}
}
}

主函數中的延時(shí)個(gè)人覺(jué)得最好還是用定時(shí)器

電路接法不同可修改key_table數組



關(guān)鍵詞: AVR4x4矩陣鍵

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>