历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2019年02月15日 | (C51学习三)按键

2019-02-15 来源:eefocus

1.独立按键


原理:


独立按键比较简单,先在单片机开发板的配套资料中找出案件的原理图,如下图:



以K1为例,当K1按下时,P3.4就相当于接地GND,所以当K1按下时,P3.4为低电平。即P3.4=0


代码:


下面写一个按下K1就亮起LED0灯:


找出LED的原理图:



可以发现LED0对应的引脚为P1.0



#include

sbit K1=P3^4;

sbit LED0=P1^0;

 

void main()

{

while(1)

{

LED0=K1;

}

}




2.矩阵键盘


为什么要用矩阵键盘:


因为矩阵键盘相对于独立键盘可以节省I/O口。例如16个按键,用独立键盘需要16个I/O口 ,而用矩阵键盘只需要 4X4这个矩阵,只需8个I/O。


同理,100个案件,独立键盘需要100个I/O口,而矩阵键盘只需要10X10这个矩阵,共20个I/O口。


原理:


先看原理图:



其中P3的8个端口,分成两组P3.0~P3.3作为输出端,P3.4~P3.7作为输入端。


矩阵键盘需要一行一行地检测,例如监测第一行(P3.0那一行),把P3设置为0xFE;P3.4~P3.7:1111 P3.0~P3.3:1110


由于第一行已经被设置为0,这时候当S1按下时,P3.4这个引脚就会是0,因此P3:0xEE,其他按键同理。


然后扫描完第一行,就扫描第二,三,四行(分别把P3.1,P3.2,P3.3设0)




代码:


16个按键,按下去后在数码管显示响应的数字10~16用ABCDEF代替



#include

sbit DU=P2^6;

sbit WE=P2^7;

 

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

 

void display(unsigned char num)

{

DU=1;

P0=table[num];

DU=0;


WE=1;

P0=0xfe;

WE=0;

}

 

void main()

{

while(1)

{

unsigned char temp;

/*扫描第一行*/

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe)

{

temp=P3;

switch(temp)

{

case 0xee:display(0);break;

case 0xde:display(1);break;

case 0xbe:display(2);break;

case 0x7e:display(3);break;

}

}


/*扫描第二行*/

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfd)

{

temp=P3;

switch(temp)

{

case 0xed:display(4);break;

case 0xdd:display(5);break;

case 0xbd:display(6);break;

case 0x7d:display(7);break;

}

}


/*扫描第三行*/

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfb)

{

temp=P3;

switch(temp)

{

case 0xeb:display(8);break;

case 0xdb:display(9);break;

case 0xbb:display(10);break;

case 0x7b:display(11);break;

}

}


/*扫描第四行*/

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf7)

{

temp=P3;

switch(temp)

{

case 0xe7:display(12);break;

case 0xd7:display(13);break;

case 0xb7:display(14);break;

case 0x77:display(15);break;

}

}

}

}



推荐阅读

史海拾趣

AUREL公司的发展小趣事

AUREL公司深知人才是企业发展的核心动力。因此,公司一直注重人才的引进和培养。通过与高校和研究机构的合作,公司吸引了大批优秀的研发人才和管理人才。同时,公司还建立了完善的人才激励机制和培训体系,为员工提供了广阔的职业发展空间。这些举措使得AUREL公司的人才队伍不断壮大,为公司的持续发展提供了有力保障。

FINDER公司的发展小趣事

随着电子市场竞争的加剧,AUREL公司意识到单纯的技术创新已不足以维持竞争优势。于是,公司开始注重品质管理,引入了先进的生产流程和严格的质量控制体系。这一举措大大提高了产品的可靠性和稳定性,赢得了客户的信赖和好评。通过持续改进和优化,AUREL公司的产品质量逐渐在行业中树立了良好的口碑。

Auris公司的发展小趣事

在不断追求技术创新的道路上,Auris公司并未止步。近年来,该公司正在积极研发柔性机器人技术,这种技术有望在治疗喉咙、肺和肠胃疾病方面发挥重要作用。柔性机器人的研发不仅展示了Auris在技术创新方面的持续努力,也为其在未来的医疗市场中抢占先机提供了有力支持。

这五个故事展示了Auris公司在电子行业中的发展历程,从创始人的科技愿景到技术突破获得认可,再到与强生的合作以及柔性机器人的研发,每一步都体现了Auris对于技术创新和市场拓展的不懈追求。这些事实性的故事不仅展现了Auris公司的成长轨迹,也反映了电子行业中技术创新和市场竞争的激烈态势。

ARMKEIL Microcontroller Tools公司的发展小趣事

ARMKEIL Microcontroller Tools公司的起点可以追溯到Keil公司的成立。1985年,Keil Elektronik GmbH(凯尔电子有限责任公司)在德国慕尼黑正式成立,由一群热衷于嵌入式系统开发的工程师创立。起初,公司的主要业务是开发和销售嵌入式系统的开发工具,这些工具为当时的电子工程师提供了强大的支持。随着业务的发展,Keil逐渐在嵌入式系统开发领域崭露头角。

Datatronic公司的发展小趣事

随着全球化趋势的加速,Datatronic公司开始将目光投向国际市场。公司通过参加国际展览、设立海外办事处等方式,积极拓展海外市场。同时,公司还加强了与国际企业的合作,引进先进的技术和管理经验。这些努力使得Datatronic公司在国际市场上逐渐获得了认可,品牌影响力得到了提升。

AURORA公司的发展小趣事

AURORA公司成立于2016年,初出茅庐便面临着巨大的挑战。然而,公司的三位联合创始人Chris Urmson、J. Andrew Bagnell和Sterling Anderson均来自自动驾驶汽车领域的顶尖团队,拥有丰富的经验和深厚的技术背景。他们凭借对自动驾驶技术的深刻理解和前瞻性眼光,为AURORA的发展奠定了坚实的基础。在初创时期,AURORA通过与多家汽车制造商合作,共同设计和开发传感器、软件和数据服务,逐渐在自动驾驶领域崭露头角。

问答坊 | AI 解惑

99 SE里设置问题

我在99SE 里面有个问题要大侠帮我解决一下,就是我在打开一个如PCB文件后,里面不作修改,关闭之后就会出现几个新的备份文件;请问在99SE里面那里可以设置一下?好烦的。…

查看全部问答>

香主帮忙鉴定一下,是不是芯片问题?

我的评估版,EK-STM32F是 ST 2007年开研讨会,现场买的!最近想学习STM32就那出来用,刚开始就遇到问题,程序用软件可以仿真,可以用评估版就是不行!我用的是MDK3.22!例如:设置GPIO Remap USART2,这个语句AFIO->MA ...…

查看全部问答>

闲了

大三了,没课了…

查看全部问答>

使用Altium Designer进行多通道设计

上传了两份技术文档,讲述了如何使用AD经行多通道设计,以及分层设计的结构和方法。…

查看全部问答>

我这里还有好多资料,一起传了

你们看看,有什么好的,自己下载啊,哈哈…

查看全部问答>

串口实验波特率

sopc builder中设置波特率是9600,串口工具设置9600,发送36时,接收是FB,串口调试工具设置19200,则收到的是36,这是什么问题啊 QQ截图20120323203513.png (28.18 K) 2012-3-23 20:36:10#include \"system.h\"#include \"unistd.h\"#includ ...…

查看全部问答>

我们老师让我们用LM324N芯片做测温

我们老师让我们用LM324N芯片做测温,但是我不知道测温的程序的流程是怎么样的,哪位大虾能告诉我下啊…

查看全部问答>

ZigBee四种绑定方式在Z-Stack中的应用(转)

本文是作者根据TI Z-Stack开发文档,ZigBee Specification-2007,《Zigbee Wireless Networking》等英文资料整合和翻译而成,采用中英双语对照方便读者理解,文中翻译不当之处,望广大同行不吝赐教。推广ZigBee技术,提高国 内电子行业的国际影响力 ...…

查看全部问答>

求大神帮忙

在用KEil时,编译出现这样一段话 Build target \'Target 1\' compiling 灯.c... C51 FATAL-ERROR -   ACTION:  PARSING SOURCE-FILE   ERROR:    PREPROCESSOR: MACROS TOO NESTED C51 TERMINATED. ...…

查看全部问答>

51的程序 转换为PIC德程序

大家好  我在网上看到一个51写的12864串口显示汉字的程序。想改成PIC16F1937的,来用PROTEUS进行仿真。结果老不显示。  帮忙看看 需要怎么改啊,,是不是只改端口定义? #include #include #define    uchar&nb ...…

查看全部问答>