c语言4x4矩形列互换,线反转法4x4键盘C语言程序问题.急...
发布日期:2021-06-24 12:11:23 浏览次数:2 分类:技术文章

本文共 1896 字,大约阅读时间需要 6 分钟。

我发一个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编辑过]

转载地址:https://blog.csdn.net/weixin_32661831/article/details/117289539 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android服务开启线程,android之service与intentService的不同
下一篇:android 程序更换字体,Android修改自己程序字体的方法详解

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月05日 20时47分22秒