矩阵键盘——线反转法控制
2012-09-14 20:26
176 查看
/*行线接P1.0-P1.3,列线接P1.4-P1.7。
根据线反转法扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示。
开机时,数码管显示“-”。*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7; //数码管最右端一位亮
sbit fmq=P3^6; //蜂鸣器
uchar key;
unsigned char code disp_code[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //存放显示16位数字和“-”对应的十六进制数位
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //存放16个矩阵键盘按键的对应值
void delay1ms(uint i)
{
uchar j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++) //500us基准延时程序
{
;
}
}
void beep() //产生1KHZ频率声音的函数
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j; //scan1:行接线值,scan2:列接线值
P1=0xf0;
scan1=P1;
delay1ms(20); //延时20ms
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f; //线反转法的核心
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key);
}
}
}
else
P1=0xff; //P1口写1 输入状态
return (16);//"-"
}
main()
{
uchar tt;
P0 = 0xbf;
P27 =0; //数码管显示"-"
P1 = 0xff;
while(1)
{
P1=0xf0;
if((P1&0xf0)!=0xf0){
keyscan();
P0=disp_code[key];
for(tt=0;tt<200;tt++)
{
beep();
}
fmq=1;
delay1ms(300);
}
}
}
根据线反转法扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示。
开机时,数码管显示“-”。*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit P27=P2^7; //数码管最右端一位亮
sbit fmq=P3^6; //蜂鸣器
uchar key;
unsigned char code disp_code[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //存放显示16位数字和“-”对应的十六进制数位
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //存放16个矩阵键盘按键的对应值
void delay1ms(uint i)
{
uchar j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++) //500us基准延时程序
{
;
}
}
void beep() //产生1KHZ频率声音的函数
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j; //scan1:行接线值,scan2:列接线值
P1=0xf0;
scan1=P1;
delay1ms(20); //延时20ms
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f; //线反转法的核心
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key);
}
}
}
else
P1=0xff; //P1口写1 输入状态
return (16);//"-"
}
main()
{
uchar tt;
P0 = 0xbf;
P27 =0; //数码管显示"-"
P1 = 0xff;
while(1)
{
P1=0xf0;
if((P1&0xf0)!=0xf0){
keyscan();
P0=disp_code[key];
for(tt=0;tt<200;tt++)
{
beep();
}
fmq=1;
delay1ms(300);
}
}
}
相关文章推荐
- 基于Proteus+8051汇编应用实例系列之四--4×4键盘矩阵控制条形LED显示
- 矩阵键盘反转扫描
- [置顶] ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- 矩阵键盘控制0到F
- 【练习4.7】使用键盘控制透视变换和仿射变换的变换矩阵:实现拉伸、收缩、扭曲、旋转
- [置顶] ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
- linux下4x4矩阵 键盘驱动,用了定时器控制扫描程序来抗抖。
- 51 线反转法 实现矩阵键盘检测 [李园7舍_404]
- 控制反转(IoC)与依赖注入(DI)——自己的理解
- 控制反转(IoC)
- 2.1Java基础语法(运算符、键盘录入、流程控制语句)
- deepmind_lab 编译quake3de linux32位版本在ubuntu32里面测试的结果------------用键盘控制-----无法用鼠标
- 控制反转(IoC)与依赖注入(DI)
- 用颜色矩阵类实现图象颜色的反转效果
- Spring框架中IoC(控制反转)的原理
- 第二章 深入探讨控制反转(Ioc)和依赖注入(DI)
- PHP依赖注入(DI)和控制反转(IoC)详解
- 实例讲解Java的Spring框架中的控制反转和依赖注入
- spring如何实现反转控制
- POJ 1222 EXTENDED LIGHTS OUT(矩阵反转问题)