• 大小: 24KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签:   状态  

资源简介

单片机矩阵键盘,状态机法消抖,完整代码,下载可直接使用。

资源截图

代码片段和文件信息

#include “stc15.h“
#define uchar unsigned char
#define uint unsigned int
#define NO_KEY  0xff
#define STATE0  0
#define STATE1  1
#define STATE2  2
sbit BUZZ = P0^6;
sbit RELAY = P0^4;
bit key_flag;
uchar dspbuf[8] = {1010101010101010};
code unsigned char duan[12] = {0xc00xf90xa40xb00x990x920x820xf80x800x900xff};
code unsigned char wei[8] = {0x010x020x040x080x100x200x400x80};
void Timer0Init(void) //1ms@11.0592MHz
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0xCD;
TH0 = 0xD4;
TF0 = 0;
TR0 = 1;
  ET0 = 1;
  EA = 1;
}
uchar KBD_SCAN()
{
static uchar STATE = STATE0;
uchar key_val = 0;
uchar tempkey1key2;
P30=0;P31=0;P32=0;P33=0;P34=1;P35=1;P42=1;P44=1;
if(P44 == 0)  key1 = 0x70;
if(P42 == 0)  key1 = 0xb0;
if(P35 == 0)  key1 = 0xd0;
if(P34 == 0)  key1 = 0xe0;
if((P44==1)&&(P42==1)&&(P35==1)&&(P34==1))  key1 = 0xf0;

P30=1;P31=1;P32=1;P33=1;P34=0;P35=0;P42=0;P44=0;
if(P30 == 0)  key2 = 0x0e;
if(P31 == 0)  key2 = 0x0d;
if(P32 == 0)  key2 = 0x0b;
if(P33 == 0)  key2 = 0x07;
if((P30==1)&&(P31==1)&&(P32==1)&&(P33==1))  key2 = 0x0f;   //
temp = key1|key2;
switch(STATE)
{
case STATE0:
if(temp!=NO_KEY)
{
STATE = STATE1;
}
break;
case STATE1:
if(temp == NO_KEY)
{
STATE = STATE0;
}
else
{
switch(temp)
{
case 0x77: key_val = 4;break;
case 0x7b: key_val = 5;break;
case 0x7d: key_val = 6;break;
case 0x7e: key_val = 7;break;

case 0xb7: key_val = 8;break;
case 0xbb: key_val = 9;break;
case 0xbd: key_val = 10;break;
case 0xbe: key_val = 11;break;

case 0xd7: key_val = 12;break;
case 0xdb: key_val = 13;break;
case 0xdd: key_val = 14;break;
case 0xde: key_val = 15;break;

case 0xe7: key_val = 16;break;
case 0xeb: key_val = 17;break;
case 0xed: key_val = 18;break;
case 0xee: key_val = 19;break;
}
STATE = STATE2;
}
break;
case STATE2:
if(temp == NO_KEY)
{
STATE = STATE0;
}
break;
}
return key_val;
}
void main()
{
uchar num;
P2 = ((P2&0x1f)|0xa0);
BUZZ = 0;
RELAY = 0;
P0&=0x1f;
Timer0Init();
while(1)
{
if(key_flag)
{
key_flag = 0;
num = KBD_SCAN();
if(num == 4)
{
P2 = ((P2&0x1f)|0xa0);
RELAY = 1;
BUZZ = 0;
P2&=0x1f;
}
}
}
}
void Timer0() interrupt 1
{
static uint count;
if(++count == 10)
{
count = 0;
key_flag = 1;
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-28 17:07  矩阵键盘-状态机消抖法\
     目录           0  2018-03-30 21:03  矩阵键盘-状态机消抖法\Listings\
     文件        5635  2018-03-30 21:03  矩阵键盘-状态机消抖法\Listings\main.lst
     文件        9455  2018-03-30 21:03  矩阵键盘-状态机消抖法\Listings\矩阵键盘.m51
     目录           0  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\
     文件        9969  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\main.obj
     文件        9178  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\矩阵键盘
     文件        1099  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\矩阵键盘.build_log.htm
     文件        1877  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\矩阵键盘.hex
     文件          97  2018-03-30 21:03  矩阵键盘-状态机消抖法\objects\矩阵键盘.lnp
     文件        2540  2018-03-30 21:03  矩阵键盘-状态机消抖法\main.c
     文件       70940  2018-08-28 17:07  矩阵键盘-状态机消抖法\矩阵键盘.uvgui.房轩
     文件        4743  2018-08-28 17:07  矩阵键盘-状态机消抖法\矩阵键盘.uvopt
     文件       12097  2018-08-28 17:07  矩阵键盘-状态机消抖法\矩阵键盘.uvproj

评论

共有 条评论