c语言4x4矩形列互换,线反转法4x4键盘C语言程序问题.急...

我发一个C的给你参考一下

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

*  描述:                                                                       *

*         矩阵键盘数码管显示键值                                               *

*                                                                              *

*         矩阵键盘定义:                                                       *

*         P1.0-P1.3为列线,P1.4-P1.7为行线                                      *

*        喇叭接P3.7口  矩阵键盘P1口, 数码管数据P0口,数码管控制P2口           *

#include

#define uchar unsigned char

#define uint  unsigned int

uchar table[17]= {0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//数码管代码

sbit BEEP = P3^7;         //蜂鸣器驱动线

uchar dis_buf;            //显示缓存

uchar  temp;

uchar  key;               //键顺序吗

void beep();              //蜂鸣器

void delay0(uchar x);      //x*0.14MS

//--------------------------------------------------

/* 延时子程序*/

void  delay(uchar x)

{ uchar j;

while((x--)!=0)

{ for(j=0;j<125;j++)

{;}

}

}

//--------------------------------------------------

/*键扫描子程序*/

void  keyscan(void)

{

P1=0x0F;         //低四位输入

delay(1);

temp=P1;         //读P1口

temp=temp&0x0F;

temp=~(temp|0xF0);

if(temp==1)

key=0;

else if(temp==2)

key=1;

else if(temp==4)

key=2;

else if(temp==8)

key=3;

else

key=16;

P1=0xF0;        //高四位输入

delay(1);

temp=P1;          //读P1口

temp=temp&0xF0;

temp=~((temp>>4)|0xF0);

if(temp==1)

key=key+0;

else if(temp==2)

key=key+4;

else if(temp==4)

key=key+8;

else if(temp==8)

key=key+12;

else

key=16;

dis_buf=table[key]; //查表得键值

}

//--------------------------------------------------

/*判断键是否按下*/

void  keydown(void)

{

&nbsp

8e530af0fcc3960ba420e2b09475f592.gif1=0xF0;

if(P1!=0xF0)

{

keyscan();

beep();

// while(P1!=0xF0);  //等待键释放

}

}

//--------------------------------------------------

void beep()

{

unsigned char i;

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

{

delay0(4);

BEEP=!BEEP;       //BEEP取反

}

BEEP=1;           //关闭蜂鸣器

delay(250);       //延时

}

//--------------------------------------------------

void delay0(uchar x)    //x*0.14MS

{

unsigned char i;

while(x--)

{

for (i = 0; i<13; i++) {}

}

}

//--------------------------------------------------

main()

{

P0=0xFF;        //置P0口

P2=0xFF;        //置P2口

dis_buf=0xBF;

while(1)

{

keydown();

P0 = dis_buf;   //键值送显示

delay(2);

P2 = 0x7F;

}

}

//--------------------------------------------------

[此贴子已经被作者于2007-7-17 16:07:18编辑过]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值