c语言键盘驱动程序,c语言键盘扫描程序

描述

c语言键盘扫描程序

4*4键盘扫描C语言程序

/*  4x4矩阵键盘的扫描程序

测试通过*/

#includesbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit P1_2=P1^2;

sbit P1_3=P1^3;

sbit P2_7=P2^7;

sbit P3_7=P3^7;

unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4

0x92,0x82,0xF8,0x80,0x90, //5~9

0x88,0x83,0xC6,0xA1,0x86,0x8E}; //A~F

void KeyScan();

void delay10ms(unsigned char time);

void Dispaly(unsigned char k);

void buzzer();

unsigned char key,temp;

void main() //主程序

{

while(1)

{

KeyScan();

}

}

void KeyScan() //按键扫描子程序

{

P1=0xFF;

P1_0=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{buzzer();

delay10ms(10);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0xE0:

key=0;break;

case 0xD0:

key=4;break;

case 0xB0:

key=8;break;

case 0x70:

key=12;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_1=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{buzzer();

delay10ms(10);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0xE0:

key=1;break;

case 0xD0:

key=5;break;

case 0xB0:

key=9;break;

case 0x70:

key=13;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_2=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{buzzer();

delay10ms(10);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0xE0:

key=2;break;

case 0xD0:

key=6;break;

case 0xB0:

key=10;break;

case 0x70:

key=14;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_3=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{buzzer();

delay10ms(10);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0xE0:

key=3;break;

case 0xD0:

key=7;break;

case 0xB0:

key=11;break;

case 0x70:

key=15;break;

}

Dispaly(key);

}

}

}

//延时程序

void delay10ms(unsigned char time)

{

unsigned char i;

while(time--)

{

for(i=0;i<120;i++) ;

}

}

void Dispaly(unsigned char k) //显示程序

{

P0=table[k];

P2_7=0;

}

void buzzer()

{

P3_7=0;

delay10ms(20);

P3_7=1;

}

6x3扫描键盘驱动程序(C语言编写)

〖说明〗18个按键扫描驱动程序,横向扫描第一行:p0.6  第二行:p0.7  第三行:p2.6

纵向扫描:第一行:p0.0  第二行:p0.1  第三行:p0.2  第四行:p0.3  第五行:

p0.4  第六行:p0.5

〖文件〗key.c  2002/12/10

〖作者〗鞠春阳

〖信箱〗jcygood@163.net   jcygood@sina.com

〖版本〗v1.00a build

--------------------------------------------------------------------------------*/

//#i nclude "reg51.h"

//#i nclude "lcd12864.h"

#define   port    p0  //定义p0口

sbit      p2_6=p2^6;  //定义p2.6口

unsigned int zdtime=0;

unsigned int pingbaotime=0;

/*定义18个按键的返回值*/

#define  runkey                 1

#define  stopkey                2

#define  upkey                  3

#define  downkey                4

#define  a_c                    5

#define  d_f                    6

#define  g_i                    7

#define  j_l                    8

#define  m_o                    9

#define  p_s                    10

#define  t_v                    11

#define  w_z                    12

#define  pageupkey              13

#define  pagedownkey            14

#define  enterkey               15

#define  backkey                16

#define  chineseorenglish       17

#define  cancelkey              18

//按键扫描函数

unsigned char getkey()

{

unsigned char a,b;

unsigned int delay=0; //延时变量

port=0xff;          //p0口复位

p2_6=1;             //p2.6复位

//扫描第三行

p2_6=0;

while(!(port&0x01))

{

if(++delay>0x1ff0) {  return(pagedownkey);}

}

while(!(port&0x02))

{

if(++delay>0x1ff0) {  return(chineseorenglish);}

}

while(!(port&0x04))

{

if(++delay>0x1ff0) {  return(backkey);}

}

while(!(port&0x08))

{

if(++delay>0x1ff0) {  return(pageupkey);}

}

while(!(port&0x10))

{

if(++delay>0x1ff0) {  return(cancelkey);}

}

while(!(port&0x20))

{

if(++delay>0x1ff0) {  return(enterkey);}

}

port=0xff;          //p0口复位

p2_6=1;             //p2.6复位

//扫描第一行

port=0x7f;

delay=0;

while(!(port&0x01))

{

if(++delay>0x1ff0) {  return(downkey);}

}

if(delay>0xff0)  { return(downkey); }

while(!(port&0x02))

{

if(++delay>0x1ff0) {  return(stopkey);}

}

if(delay>0xff0)  { return(stopkey); }

while(!(port&0x04))

{

if(++delay>0x5fd0) {  return(w_z);}

}

if(delay>0xff0)  { return(w_z); }

while(!(port&0x08))

{

if(++delay>0x5fd0) {  return(t_v);}

}

if(delay>0xff0)  { return(t_v); }

while(!(port&0x10))

{

if(++delay>0x5fd0) {  return(p_s);}

}

if(delay>0xff0)  { return(p_s); }

while(!(port&0x20))

{

if(++delay>0x5fd0) {  return(m_o);}

}

if(delay>0xff0)  { return(m_o); }

port=0xff;          //p0口复位

p2_6=1;             //p2.6复位

//扫描第二行

port=0xbf;

delay=0;

while(!(port&0x01))

{

if(++delay>0x1ff0) {  return(upkey);}

}

if(delay>0xff0)  { return(upkey); }

while(!(port&0x02))

{

if(++delay>0x1ff0) {  return(runkey);}

}

if(delay>0xff0)  { return(runkey); }

while(!(port&0x04))

{

if(++delay>0x5fd0) {  return(j_l);}

}

if(delay>0xff0)  { return(j_l); }

while(!(port&0x08))

{

if(++delay>0x5fd0) {  return(g_i);}

}

if(delay>0xff0)  { return(g_i); }

while(!(port&0x10))

{

if(++delay>0x5fd0) {  return(d_f);}

}

if(delay>0xff0)  { return(d_f); }

while(!(port&0x20))

{

if(++delay>0x5fd0) {  return(a_c);}

}

if(delay>0xff0)  { return(a_c); }

return(0);

}

3x4矩阵键盘的扫描程序(C语言)

/*  3x4矩阵键盘的扫描程序

按相应的按键,数码管显示相应的数字,星号键和井号键分别显示为E和F

*********************************

Create by:左秀龙

support:

Tel:0755-82879296

email: cutedesign@tom.com

Date: 2005/06/23

*********************************

测试通过*/

#include

unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4

0x92,0x82,0xF8,0x80,0x90, //5~9

0x88,0x83,0xA7,0xA1,0x86,0x8E}; //A~F

void KeyScan();

void delay10ms(unsigned char time);

void Dispaly(unsigned char k);

unsigned char key,temp;

void main() //主程序

{

while(1)

{

KeyScan();

}

}

void KeyScan() //按键扫描子程序

{

P1=0xFF;

P1_3=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

delay10ms(1);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0x70:

key=1;break;

case 0xB0:

key=2;break;

case 0xD0:

key=3;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_2=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

delay10ms(1);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0x70:

key=4;break;

case 0xB0:

key=5;break;

case 0xD0:

key=6;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_1=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

delay10ms(1);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0x70:

key=7;break;

case 0xB0:

key=8;break;

case 0xD0:

key=9;break;

}

Dispaly(key);

}

}

P1=0xFF;

P1_0=0;

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

delay10ms(1);

temp=P1;

temp&=0xF0;

if(temp !=0xF0)

{

temp=P1;

temp&=0xF0;

switch(temp)

{

case 0x70:

key=14;break;

case 0xB0:

key=0;break;

case 0xD0:

key=15;break;

}

Dispaly(key);

}

}

}

//延时程序

void delay10ms(unsigned char time)

{

unsigned char a,b,c;

for(a=0;afor(b=0;b<10;b++)

for(c=0;c<120;c++)

;

}

void Dispaly(unsigned char k) //显示程序

{

P0=table[k];

P2_1=0;

}

打开APP阅读更多精彩内容

点击阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值