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

代码片段和文件信息
#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 矩阵键盘-状态机消抖法\ob
文件 9969 2018-03-30 21:03 矩阵键盘-状态机消抖法\ob
文件 9178 2018-03-30 21:03 矩阵键盘-状态机消抖法\ob
文件 1099 2018-03-30 21:03 矩阵键盘-状态机消抖法\ob
文件 1877 2018-03-30 21:03 矩阵键盘-状态机消抖法\ob
文件 97 2018-03-30 21:03 矩阵键盘-状态机消抖法\ob
文件 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
- 上一篇:netbeans图书管理系统
- 下一篇:基于openmv和舵机机械臂的物料颜色识别
相关资源
- AsyncTask文件控制暂停和继续,在状态
- 一个labview仿真的函数信号发生器.vi
- 易语言:一键cf基址源码
- 右键属性文件校验插件可同时生成十
- http请求状态代码
- 键盘记录器7.1 绿色注册版(破解版)
- DAS1302蜂鸣 独立按键 闹钟设定 IIC存储
- [免费]msp430f149控制PS2键盘并用1602显示
- web js虚拟键盘(中英文切换)
- QQCOOKIES状态维护、防掉线
- Verilog按键代码
- HOOK 记录和模拟 Keyboard Mouse
- 项目周报格式(excel格式报表)
- 课程设计蔬菜大棚自动控制系统,包
- 120项注册表优化键
- CH454键盘与数码管显示程序
- 编译词法分析器识别关键字常数和符
-
AutoCAD ob
jectARX二次开发实例-状态栏 - 键盘输入监控
- 浅埋特大采高综采工作面关键层&ldq
- 厚硬岩层直覆沿空留巷顶板关键块结
- 基于数字摄影测量的结构面、关键块
- 8051单片机教程第二十六课:矩阵式键
- 三极管的工作原理详细解说
- imx6q ch452驱动矩阵键盘扫描
- ch452串口键盘驱动程序
- USB调试模式一键设置
- 基于89C51计算机锁定加密键盘设计
- 在s = 13 $$ \\ sqrt {s} = 13 $$ TeV的质子-质
- 在s = 13 $$ \\ sqrt {s} = 13 $$ TeV的质子-质
评论
共有 条评论