资源简介
单片机矩阵键盘,状态机法消抖,完整代码,下载可直接使用。
代码片段和文件信息
#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和舵机机械臂的物料颜色识别
相关资源
- 汇编实现显示键盘的字母的ASCII 和扫
- 单片机lcd矩阵键盘计算器
- 触摸式感应按键的设计原理及指南
- verilog实现pwm输出按键控制数码管显示
- 解决安卓嵌套H5软键盘遮挡问题以及导
- 矩阵键盘原理图+PCB
- 北航计组P1-Verilog简单部件与状态机
- 北航计组P0-Logisim简单部件与状态机
- qt4.8软键盘(通过点击输入框呼出)
- 单片机代码LED灯,蜂鸣器,按键,流
- 一键分享_share.js
- 仿站小工具,一键网页所有资源
- 无法在左侧上创建goodsync状态文件夹
- 进程状态模拟转换.docx
- 根据关键词使用scrapy爬取今日头条网
- 基于FPGA状态机的流水灯VHDL程序
- qt 嵌入式键盘插件源码
- 一键隐藏窗口.rar
- Qt 5.1 全局快捷键 win8.1 可用
- Qt实现全局钩子拦截鼠标键盘消息修改
- table表格,让thead固定,tbody有滚动条
- 键盘记录器klogger
- CH452键盘数码管驱动程序配有电路图
- C51+1602液晶+矩阵键盘+三相步进电机
- 类似按键精灵,带动作录制功能
- 触摸按键PCB板layout注意事项
- 触摸按键PCB设计要点
- 简易c51单片机矩阵式键盘密码锁
- 键盘加速器 最新更新
- 030 矩阵键盘 电子琴 仿真 51单片机
评论
共有 条评论