微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机实验板2011_V1.1-矩阵按键练习

单片机实验板2011_V1.1-矩阵按键练习

时间:11-18 来源:互联网 点击:

原理图:

/************单片机教学实验板 ******************/
/*功能描述:学习板整体演示程序 */
/*作者:郑 文 */
/*编写时间: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;ifor(j=0;j<10;j++);
}
/***************************蜂鸣器延时子程序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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top