?? 鍵盤.c
字號:
//ICC-AVR application builder : 2008-10-16 19:41:41
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
unsigned char A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x5f,0x3f,0x79,0x71};
//延時子程序
void delay(unsigned int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<8000;j++)
;
}
//鍵值計算
unsigned char read_key(unsigned char i)
{
unsigned char j,k,l,key_value=0;
PORTD=0x0F; //設置端口電平
//DDRD=0xF0;
if((PIND&0X0f)==0x0f) return 0xff; //讀取端口電平,若無鍵按下則返回
else
{delay(5); //延時消抖
if((PIND&0x0f)==0x0f) return 0xff;
else
for(i=4;i<8;i++) //掃描行
{
PORTD=~(1<<i)| 0x0f;
for(j=0;j<4;j++) //掃描列
{
if((PIND&(1<<j))==0)
key_value=(i-4)*4+j; //鍵值計算
}
}
return key_value;
}
}
void main()
{
unsigned char m;
PORTA=0xFF;
DDRA=0xFF;
PORTD=0x0F;
DDRD=0xF0;
while(1)
{
m=read_key(4); //以下為測試句,
switch(m)
{
case 0:PORTA=A[0];break;
case 1:PORTA=A[1];break;
case 2:PORTA=A[2];break;
case 3:PORTA=A[3];break;
case 4:PORTA=A[4];break;
case 5:PORTA=A[5];break;
case 6:PORTA=A[6];break;
case 7:PORTA=A[7];break;
case 8:PORTA=A[8];break;
case 9:PORTA=A[9];break;
case 10:PORTA=A[10];break;
case 11:PORTA=A[11];break;
case 12:PORTA=A[12];break;
case 13:PORTA=A[13];break;
case 14:PORTA=A[14];break;
case 15:PORTA=A[15];break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -