多语言展示
当前在线:191今日阅读:26今日分享:39

STC89C52单片机入门第四课

本节主讲“矩阵键盘”按键扫描和接线,以及switch和逻辑与的应用讲的过程也许跟网上视频教程差异较大,但都是抽简单,正确的来教
工具/原料

16个轻触按键(如果开发板自带,则免)

方法/步骤
1

首先要了解,什么是矩阵键盘,像一般按键,一个按键,则需占用1个I/O口这样的话,按键多的情况下,很浪费I/O口,矩阵键盘,就是用较少的I/O口来做更多的按键。

2

首先是接线(面包板使用者须看,开发板使用者,跳到后面程序段)把16个按键连接起来,上图是示意图,应该认真看,动手在面包板上接线以及LED灯,也按图接上,VCC只的是5V电源,也是单片机第40脚

3

下面开始写程序,开头的那些就不再细说了,包含头文件、写上主函数写上1个1MS(1毫秒)的延时函数(不懂可以参照上节课)在主函数内,定义2个变量unsigned char key,num;这2个变量是unsigned char型,也就是无符号整形,0到256

4

在while(1)这个循环内,写入P1=0x0f;key=P1;上面这两句语句的意思是,P1设置为;然后key等于P1要懂得,单片机只有高电平和低电平电压大于2V,视为高电平,也就是1电压低于2V,视为低电平,也就是00x0f也就是把P1.0、P1.1、P1.2、P1.3置为高电平P1.4、P1.5、P1.6、P1.7置为低电平

5

检测key!=0x0f也就是说,key不等于0x0f,那么表示有按键按下也可能是因为抖动引起的误判的,所以,这里需要再延时一些再把P1赋值0x0f,把key等于P1结果就是(key=)如果按键按下时,(通俗的说0会把1吃掉),那么key也就不等于了这时候,就应该判断,到底按下了哪个按键(通俗的说,看看哪个1被吃掉)key=P1&0x0f这个指令是逻辑与的意思也就是把P1跟0x0f进行逻辑与比较,结果放在key

6

这里说明下switch()这个判断语句switch(key)则是判断中括号内的变量,或者语句,是等于什么后面case 0x07: num=4; break;意思是,如果key等于0x07那么num赋值4如果不是,则判断下一个case,如果全都不是,则执行default: break;这里先不详细说明switch,免得新手迷糊,先懂就可以了

7

逻辑与的意思:必须都为1,否则即为0比方:1&1=1;1&0=0;0&0=0;0&1=0;假设P1是0000 1101 0x0f  也是0000 1111它们与完的结果则是 0000 1101十六进制是0x0d那则表示,在P1.1所在的那一行有按键按下把目标锁定在P1.1所在行的4个按键

8

那怎么判断,是这4个按键的哪一个呢?这时,就要给P1赋值为0xf0;也就是把P1.7、P1.6、P1.5、P1.4置为高电平P1.0、P1.1、P1.2、P1.3置为低电平

9

然后再判断key,如果key等于0x70,那么就是0111 0000 也就是说在P1.1这行,第1个按键S5按下那给num这个变量不变 如果是0xb0;那就是1011 0000也就是P1.1这行,第二个按键按下,则num+4那么结果就是按S1按键num=1  按S2按键,num=5按S5按键num=2 按S6按键num=6按S9按键num=3 按S10按键num=7按S13按键num=4按S14按键num=8竖立键盘,当然要改成横的也不难,但这个留给新手朋友去练习吧最后,加上1个循环,等待按键松手,以及让LED灯显示

注意事项
1

4脚轻触开关,应该注意引脚,不懂可以万用表测试

2

琢磨下switch和逻辑与

推荐信息