资源简介
用有限状态机思想实现矩阵按键扫描,初学者做实验可参考,写的很好,51单片机矩阵按键控制实验51单片机矩阵按键控制实验51单片机矩阵按键控制实验
代码片段和文件信息
// 尝试利用有限状态机思想完成行列矩阵键盘的扫描。
#include
#define uchar unsigned char
#define uint unsigned int
#define key_state0 0 //状态0,此时无按键按下
#define key_state1 1 //状态1,此时处于确定按键是否按下
#define key_state2 2 //状态2,此时判断按键是否释放
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
code uchar codenum[] = {
0x3f 0x06 0x5b 0x4f
0x66 0x6d 0x7d 0x07
0x7f 0x6f 0x77 0x7c
0x39 0x5e 0x79 0x71
0x00};
uint flag = 0; //按键扫描标志,每中断一次,扫描一次
void Display_init()
{
P0 = 0x00; //将所有的位选打开,所有数码管同时亮,
wela = 1;
wela = 0;
P0 = 0x00; //将段选关闭,也就是刚开始的时候数码管都不亮
dula = 1;
dula = 0;
}
void Display(uchar num1)
{
dula = 1;
P0 = codenum[num1];
dula = 0;
}
uchar Keyscan()
{
uchar key_state; //状态指示
uchar key_value; //键值返回
uchar key_temp;
uchar key1 key2;
P3 = 0xf0;
key1 = P3;
key1 = P3 & 0xf0; //确定哪一行的按键按下
P3 = 0x0f;
key2 = P3;
key2 = P3 & 0x0f; //确定哪一列的按键按下
key_temp = key1 | key2; //确定按键位置
switch (key_state) //检测当前状态
{
case key_state0: //之前无按键被按下
if (key_temp != 0xff) //说明有按键按下或者抖动
{
key_state = key_state1; //转换为状态1,然后去判断是否真的按下
}
break;
case key_state1: //状态1,说明之前已经有按键按下或者抖动
if (key_temp == 0xff) //全为高电平,说明是抖动
{
key_state = key_state0; //返回到状态1,
}
else //确实有按键被按下
{
switch (key_temp) //当确定按键按下后,列举所有的按键情况
{
case 0xee:
key_value = 0;
break;
case 0xde:
key_value = 1;
break;
case 0xbe:
key_value = 2;
break;
case 0x7e:
key_valu
- 上一篇:AdressBook.zip
- 下一篇:用混合遗传算法求解物流配送路径优化问题的研究
相关资源
- 单片机音乐倒数定时器的设计
- STC15F
- 51单片机通信采样proteus仿真方波转化
- 51 单片机 红外避障小车 大集合136
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
评论
共有 条评论