原理图:
/************单片机教育试验板 ******************/
/*功用描绘:学习板全体演示程序 */
/*作者:郑 文 */
/*编写时刻:2011.3.1 */
/*接外部晶振11.0592 MHZ */
/*功用描绘*/
/*4*4矩阵按键操练*/
#include
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit speaker=P1^3; //蜂鸣器
sbit A13=P2^5; //
sbit R_D=P3^7; //
sbit D4=P0^4; //
sbit D5=P0^5; //
sbit D6=P0^6; //
sbit D7=P0^7; //
sbit LED_CS=P1^4;
void Key_Beep(void);
void Delay_Beep(unsigned int count);
/*****************按键声响********************/
void Key_Beep(void)
{ uchar i;
for (i=0;i<250;i++)
{ speaker=1;
Delay_Beep(5);
speaker=0;
Delay_Beep(5);
}
speaker=1;
}
/**************************************************/
/***************************蜂鸣器延时子程序start**********************/
void Delay_Beep(unsigned int count)
{
unsigned int i,j;
for(i=0;i
}
/***************************蜂鸣器延时子程序end************************/
/************主程序*************/
void main(void)
{
uchar key_num;
LED_CS=0;
A13=0;
R_D=0;
P0=0Xff;
Key_Beep();
Delay1ms(1000);
Key_Beep();
while(1)
{
;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
Matrix_Key.h
/*****Program Author : ZhengWen(ClimberWin) *****/
/*************************************************************/
/*****File Function : 4*4 key *****/
/*****Compile Date : 2009/2/1 *****/
/*****Edition Info : V1.0 *****/
/*****Amend Date : *****/
/*************************************************************/
/*************************功用描绘****************************/
/*********************4*4矩阵按键使用*************************/
/*******************P2为矩阵按键的接口************************/
#ifndef __Matrix_Key__
#define __Matrix_Key__
#include
#define uchar unsigned char
#define uint unsigned int
uchar Matrix_Key();//回来值(00-15)16个按键
/********4*4矩阵按键程序******/
uchar Matrix_Key()
{
uchar key;
uchar temp1,temp2;
uchar key_num;
key=0x55;//初始键值
P2=0x0f;
temp1=P2&0x0f;
if(!(temp1==0x0f))
{
P2=0xf0;
temp2=P2&0xf0;
switch(temp1|temp2)
{
case 0xee:key=0; break;
case 0xde:key=1; break;
case 0xbe:key=2; break;
case 0x7e:key=3; break;
case 0xed:key=4; break;
case 0xdd:key=5; break;
case 0xbd:key=6; break;
case 0x7d:key=7; break;
case 0xeb:key=8; break;
case 0xdb:key=9; break;
case 0xbb:key=10;break;
case 0x7b:key=11;break;
case 0xe7:key=12;break;
case 0xd7:key=13;break;
case 0xb7:key=14;break;
case 0x77:key=15;break;
default: ;key=0x55;break;
}
}
else
{;}
return(key);//回来键值
}
#endif