标题:
单片机独立按键状态机源码
[打印本页]
作者:
农村人
时间:
2018-5-18 12:32
标题:
单片机独立按键状态机源码
蓝桥杯独立按键状态机单片机源程序如下:
/*
例程:按键实验例程
作者:电子设计工坊
*/
#include "reg52.h"
/*独立按键状态机*/
//#define key_input P3
//#define key_state_0 0 //判断是否按下
//#define key_state_1 1 //判断是否为抖动
//#define key_state_2 2 //判断是否弹起
//
//char read_key(void)
//{
// static char key_state = 0;
// char key_press, key_return = 0;
// key_press = key_input&key_mask;
// switch (key_state)
//{
// case key_state_0:
// if (key_press!=key_mask) key_state = key_state_1;
// break;
//
// case key_state_1:
// if (key_press==(key_input&key_mask))
// {
// if(key_press==0x0e) key_return = 1; //S7
// if(key_press==0x0d) key_return = 2; //S6
// if(key_press==0x0b) key_return = 3; //S5
// if(key_press==0x07) key_return = 4; //S4
// key_state = key_state_2;
// }
// else
// key_state = key_state_0;
// break;
// case key_state_2:
// if (key_press==0x0f) key_state = key_state_0;
// break;
//}
//return key_return;
//}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
/*独立按键三行*/
unsigned char Trg;
unsigned char Cont;
#define KEYPORT P3
void Key_Read( void )
{
unsigned char ReadData = KEYPORT^0xff;
Trg = ReadData & (ReadData ^ Cont);
Cont = ReadData;
}
/*矩阵按键*/
#define KEY P3
#define key_state_0 0 //判断是否按下
#define key_state_1 1 //判断是否为抖动
#define key_state_2 2 //判断是否弹起
char read_KBD(void)
{
static char key_state = 0;
unsigned char key_return=0, key_press;
unsigned char key1,key2;
KEY=0xf0;
key1=KEY&0xf0;
KEY=0x0f;
key2=KEY&0x0f;
key_press =key1|key2;
switch (key_state)
{
case key_state_0: //
if (key_press!=0xff) key_state = key_state_1;
break;
case key_state_1:
if (key_press !=0xff)
{
if(key_press==0xde) key_return = 1; //S15 其他键值大家自行推算
if(key_press==0xdd) key_return = 2; //S14
key_state = key_state_2;
}
else
key_state = key_state_0;
break;
case key_state_2:
if (key_press==0xff) key_state = key_state_0;
break;
}
return key_return;
}
sbit buzzer = P0^6;
void main()
{
unsigned char key_val;
while(1)
{
//矩阵键盘的实验
key_val=read_KBD();
if(key_val==1)//S15
{
P2=0xa0;buzzer=1;P2=0x00;
}
if(key_val==2)//S14
{
P2=0xa0;buzzer=0;P2=0x00;
}
//三行独立按键的实验
// Key_Read();
// if(Trg & 0x08)//S4
// {
// P2=0xa0;buzzer=1;P2=0x00;
// }
// if(Trg & 0x04)//S5
// {
// P2=0xa0;buzzer=0;P2=0x00;
// }
//独立按键状态机的实验
// key_val=read_key();
// if(key_val==1)//S7
// {
// P2=0xa0;buzzer=1;P2=0x00;
// }
// if(key_val==2)//S6
// {
// P2=0xa0;buzzer=0;P2=0x00;
// }
Delay10ms();
}
}
复制代码
所有资料51hei提供下载:
6.KEY_课后练习.rar
(24.97 KB, 下载次数: 62)
2018-5-18 12:31 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
mick32
时间:
2018-5-26 04:07
Thanks for code listing
作者:
wdliming
时间:
2018-7-23 22:27
谢谢分享!!!
作者:
初学者10086
时间:
2019-8-3 09:51
谢谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1