单片机控制多个按键的方法
- 格式:docx
- 大小:11.04 KB
- 文档页数:3
51单片机矩阵键盘原理51单片机矩阵键盘原理矩阵键盘是一种常用的输入设备,可以通过少量的I/O口控制多个按键。
51单片机作为嵌入式系统中常用的控制器,也可以通过控制矩阵键盘来实现输入功能。
1. 矩阵键盘的结构矩阵键盘由多个按键组成,每个按键都有一个引脚与其他按键共用,形成了一个按键矩阵。
例如,4x4的矩阵键盘有16个按键,其中每行和每列各有4个引脚。
2. 矩阵键盘的工作原理当用户按下某一个按键时,该按键所在行和列之间会形成一个电路通路。
这时,51单片机可以通过扫描所有行和列的电路状态来检测到用户所按下的具体按键。
具体实现过程如下:(1)将每一行引脚设置为输出状态,并将其输出高电平;(2)将每一列引脚设置为输入状态,并开启上拉电阻;(3)逐一扫描每一行引脚,当发现某一行被拉低时,则表示该行对应的某一个按键被按下;(4)记录下该行号,并将该行引脚设置为输入状态,其余行引脚设置为输出状态;(5)逐一扫描每一列引脚,当发现某一列被拉低时,则表示该列对应的是刚才所记录下的行号及其对应的按键;(6)通过行号和列号确定具体按键,并进行相应的处理。
3. 代码实现下面是一个简单的51单片机矩阵键盘扫描程序:```c#include <reg52.h> //头文件sbit row1 = P1^0; //定义引脚sbit row2 = P1^1;sbit row3 = P1^2;sbit row4 = P1^3;sbit col1 = P1^4;sbit col2 = P1^5;sbit col3 = P1^6;sbit col4 = P1^7;unsigned char keyscan(void) //函数定义{unsigned char keyvalue; //定义变量while(1) //循环扫描{row1=0;row2=row3=row4=1; //设置行状态 if(col1==0){keyvalue='7';break;} //读取按键值 if(col2==0){keyvalue='8';break;}if(col3==0){keyvalue='9';break;}if(col4==0){keyvalue='/';break;}row2=0;row1=row3=row4=1;if(col1==0){keyvalue='4';break;}if(col2==0){keyvalue='5';break;}if(col3==0){keyvalue='6';break;} if(col4==0){keyvalue='*';break;}row3=0;row1=row2=row4=1; if(col1==0){keyvalue='1';break;} if(col2==0){keyvalue='2';break;} if(col3==0){keyvalue='3';break;} if(col4==0){keyvalue='-';break;}row4=0;row1=row2=row3=1; if(col1==0){keyvalue='C';break;} if(col2==0){keyvalue='0';break;} if(col3==0){keyvalue='=';break;} if(col4==0){keyvalue='+';break;}}return keyvalue; //返回按键值}void main() //主函数{unsigned char key;while(1) //循环读取{key = keyscan(); //调用函数}}```以上代码实现了一个简单的矩阵键盘扫描程序,可以通过调用`keyscan()`函数来获取用户所按下的具体按键值。
单个按键控制4个LED(入门级实验)实验介绍:通过单个按键控制4个LED灯的亮灭状态。
正常情况下,一个按键控制1个灯。
在本次实验中,要求使用1个按键,控制4个LED灯。
通过按键按下的次数,控制LED的亮灭状态。
按下1次,1个LED灯点亮,按下2次,2个LED 灯点亮,按下3次,3个LED灯点亮,按下4次,4个LED灯点亮,按下5次,所有LED灯都熄灭,如此循环。
如此就可以通过单个按键控制4个LED灯的亮灭。
在照明场所,控制LED灯的点亮个数,就可以控制亮度。
实验目的:在使用单片机等控制器控制周边元件的时候,经常会遇到I/O口不够用的情况。
因此在使用的时候,尽量省着用。
本次实验通过单个按键控制4个LED灯的亮灭状态,正常情况下需要4个按键,因而达到了节省单片机I/O口的目的。
通过此次实验室,学习单片机按键的编程控制方法,学习LED灯输出的控制方法。
学习最简单的输入设备(按键)控制最简单的输出设备(LED灯)的控制方法。
仿真原理图:在仿真软件Proteus中绘制仿真原理图如上图所示。
(注意事项:在进行实物制作时,发光二极管串联的电阻可以省略,因为单片机引脚灌电流的能力有限,限制了通过发光二极管电流的大小。
在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。
)编程思路:当单片机上电后,所有的I/O口默认高电平,因而四个发光二极管在单片机上电后,都为熄灭状态。
此时,我们按下按键后,就可以调节各个发光二极管的亮灭状态。
当按一次按钮,将P2口的状态进行左移一位,同时将P2的最低位清零,就可以达到按一次按钮后,LED灯多亮一个。
如,当前只有P2口控制的最低位连接的LED点亮,当我们按一次按键,单片机首先将P2的状态循环左移一位,则刚才的最低位变为次低位,也就是倒数第二位点亮,同时将P2口的最低位清零,也就是倒数第一位连接的LED灯点亮,即按一次按钮后,倒数第一位和倒数第二位灯点亮。
其他状态与上述过程类似,这里不再赘述。
单⽚机-4个独⽴按键的控制程序1 #include "8051.h"2 typedef unsigned char u8;3 typedef unsigned int u16;4 u8 smgduan[]= {5/*0 1 2 3 4 5 6 7 */60x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,7/*8 9 A B C D E F */80x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};910// P0⼝为数码管的位选的8位输⼊引脚11// P0 = 0x00;121314void Delayms(u16 ms);15void shumaguan(u8 n);16void DigDisplay();1718void main()19 {20while (1)21 {22/*23 * 不推荐此做法24 * 此做法占⽤内存⾼25*/26if (!K1)27 {28// 软件延时消除抖动29 Delayms(10);30if (!K1)31 {32 LED_1 = !LED_1;33 }34// 确认按键已经按下35while(!K1);36 }37if (!K2)38 {39// 软件延时消除抖动40 Delayms(10);41if (!K2)42 {43 LED_2 = !LED_2;44 }45while(!K2);46 }47if (!K3)48 {49// 软件延时消除抖动50 Delayms(10);51if (!K3)52 {53 LED_3 = !LED_3;54 }55while(!K3);56 }57if (!K4)58 {59// 软件延时消除抖动60 Delayms(10);61if (!K4)62 {63 LED_4 = !LED_4;64 }65while(!K4);66 }67 }68 }697071void Delayms(u16 ms)72 {73 unsigned int i, j;74for(i = ms; i > 0; i--)75for(j = 110; j > 0; j--);76return;77 }7879void shumaguan(u8 n)80 {81switch(n)82 {83case0:84 LSA = 0;LSB = 0;LSC = 0;break;85case1:86 LSA = 1;LSB = 0;LSC = 0;break;87case2:88 LSA = 0;LSB = 1;LSC = 0;break;89case3:90 LSA = 1;LSB = 1;LSC = 0;break;91case4:92 LSA = 0;LSB = 0;LSC = 1;break;93case5:94 LSA = 1;LSB = 0;LSC = 1;break;95case6:96 LSA = 0;LSB = 1;LSC = 1;break;97case7:98 LSA = 1;LSB = 1;LSC = 1;break;99 }100 }101102void DigDisplay()103 {104 u8 i1 = 0;105 u8 i2 = 0;106 u8 i3 = 0;107 u8 i4 = 0;108 u8 i5 = 0;109 u8 i6 = 0;110 u8 i7 = 0;111 u8 i8 = 0;112113114115116for (i8 = 0; i8 < 10; i8++)117for (i7 = 0; i7 < 10; i7++)118for (i6 = 0; i6 < 10; i7++)119for (i5 = 0; i5 < 10; i5++)120for (i4 = 0; i4 < 10; i4++)121for (i3 = 0; i3 < 10; i3++)122for (i2 = 0; i2 < 10; i2++)123for (i1 = 0; i1 < 10; i1++)124 {125 u16 cnt = 10;126while (cnt--)127 {128 shumaguan(0); //选中第⼀个数码管129 P0 = smgduan[i1]; //给他送⼀个数字130 Delayms(1); //稍微延时⼀下下131 shumaguan(1); //然后切换到第⼆个数码管。
东北石油大学实习总结报告实习类型生产实习实习单位东北石油大学实习基地实习起止时间 2018年7月7日至2018年7月16日指导教师刘东明、孙鉴所在院(系)电子科学学院班级电子科学与技术15-2学生姓名学号 022018年 7月 16日目录第1章按键控制流水灯设计 (1)实习目的.............................. 错误!未定义书签。
实习要求.............................. 错误!未定义书签。
第2章电路工作原理 (2)STC89C52单片机工作原理 (2)LED工作原理 (3)按键工作原理 (3)整体电路图 (5)本章小结 (6)第3章 C程序设计 (7)程序设计流程图 (7)实验结果 (8)本章小结 (9)总结及体会 (10)参考文献 (11)附录 (12)第1章按键控制流水灯设计1.1实习目的本次实习以STC89C52单片机为控制核心。
通过它实现对八盏LED 灯的亮灭进行设定,并在设定完成之后能够按照之前的设定实现流水灯效果。
外部电路为按键控制流水灯。
P0口控制八盏灯,P1口控制矩阵键盘,P2口控制独立按键,程序利用单片机内部计时器中断实现流水效果。
要求流水灯能够自行设定、暂停、复位,工作稳定,可靠性高。
生产实习的主要目的是培养理论联系实际的能力,提高实际动手操作能力。
本专业的生产实习旨在广泛了解实际单片机电子产品工作的全过程,熟悉电子产品的主要技术管理模式,并在实习的操作过程中学习掌握电子产品的焊接安装调试的实际操作技能。
巩固和加深理解所学的理论,开阔眼界,提高潜力,为培养高素质大学本科人才打下必要的基础。
透过学习,是理论与实际相结合,能够使学生加深对所学知识的理解,并为后续专业课的学习带给必要的感性知识,同时直接了解本业的生产过程和生产资料,为将来走上工作岗位带给必要的实际生产知识。
1.2实习要求1.深入学习单片机开发软件Keil的使用,熟悉单片机电路设计,根据实际应用电路对程序进行调试。
stc8h案例程序摘要:一、STC8H案例程序简介1.STC8H系列单片机简介2.案例程序的作用和意义二、STC8H案例程序实例1.程序实例一:点亮单个LED灯2.程序实例二:流水灯效果3.程序实例三:按键控制LED灯闪烁三、STC8H案例程序实现步骤1.准备工具和材料2.编写程序代码3.下载程序至单片机4.测试程序效果四、STC8H案例程序的拓展应用1.实现更多种控制方式2.与其他元件连接实现复杂功能正文:一、STC8H案例程序简介STC8H是一款高性能、低功耗的8位单片机,广泛应用于各种嵌入式系统中。
为了帮助开发者更好地了解和掌握STC8H单片机的编程,这里提供了一些STC8H案例程序,通过实例演示了如何使用STC8H单片机实现简单的功能。
二、STC8H案例程序实例1.程序实例一:点亮单个LED灯此实例通过STC8H单片机控制一个LED灯的点亮和熄灭,以验证单片机的基本功能。
2.程序实例二:流水灯效果此实例通过STC8H单片机控制多个LED灯的流水灯效果,展示了单片机在并发控制方面的能力。
3.程序实例三:按键控制LED灯闪烁此实例通过STC8H单片机读取按键输入,控制LED灯的闪烁频率,实现了简单的交互功能。
三、STC8H案例程序实现步骤1.准备工具和材料需要准备的工具和材料有:STC8H单片机开发板、LED灯、按键、杜邦线、下载器等。
2.编写程序代码根据实例要求,编写相应的程序代码。
这里需要注意合理地设置单片机的工作模式,以及正确地配置相关寄存器。
3.下载程序至单片机将编写好的程序通过下载器下载至STC8H单片机中。
4.测试程序效果将程序下载至单片机后,观察实例功能是否实现。
如发现问题,检查程序代码并进行修改。
四、STC8H案例程序的拓展应用1.实现更多种控制方式在掌握基本实例的基础上,可以尝试实现更多种控制方式,如通过串口通信、定时器控制等。
2.与其他元件连接实现复杂功能将STC8H单片机与其他传感器、执行器等元件连接,实现更复杂的功能,如环境监测、智能家居等。
单片机按键原理在单片机系统中,按键是一种常见的输入设备,用于向单片机输入外部信号。
按键原理是单片机系统中的基础知识之一,下面我们来详细了解一下单片机按键原理。
1. 按键的基本原理。
按键是一种开关设备,通过按下或释放按钮来改变其导通状态。
在单片机系统中,按键通常由两个金属片组成,当按下按键时,两个金属片接触,形成通路,使得电流可以流通;释放按键时,两个金属片分开,断开通路,电流无法通过。
单片机通过检测按键的状态来判断用户的操作,从而实现相应的功能。
2. 按键的连接方式。
在单片机系统中,按键可以采用两种连接方式,串联和并联。
串联连接是将多个按键连接在一起,形成一个按键组,将按键组的两端分别连接到单片机的两个引脚上,通过检测引脚的电平变化来判断用户的操作。
并联连接是将多个按键分别连接到单片机的不同引脚上,每个按键对应一个引脚,通过检测不同引脚的电平变化来判断用户的操作。
3. 按键的检测原理。
单片机通过检测按键引脚的电平变化来判断按键的状态。
在按键释放时,引脚上的电平为高电平;在按键按下时,引脚上的电平为低电平。
单片机通过定时检测按键引脚的电平变化,来实时监测按键的状态,从而判断用户的操作。
4. 按键消抖原理。
在实际应用中,按键可能会出现抖动现象,即在按键按下或释放的过程中,由于机械结构的原因,按键可能会产生多次开关动作,导致单片机检测到多次按键触发。
为了解决这个问题,通常会在软件中加入按键消抖算法,通过软件延时或状态判断来滤除按键抖动,确保单片机能够正确识别用户的操作。
5. 按键的应用。
按键广泛应用于各种单片机系统中,如嵌入式系统、电子设备、工业控制等领域。
通过按键,用户可以向单片机输入各种指令或数据,实现对系统的控制和操作。
在实际应用中,按键的设计和布局需要根据具体的系统需求来进行合理规划,以确保按键操作的准确性和可靠性。
总结。
单片机按键原理是单片机系统中的基础知识,了解按键的基本原理、连接方式、检测原理和消抖原理,对于设计和开发单片机系统具有重要意义。
51单片机按键使用及注意事项如下:
1.按键工作原理:按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时,开
关断开。
在开发板上使用的按键及内部简易图按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态,如果按键按下,初始导通状态变为断开,初始断开状态变为导通。
2.按键电路接法:上拉是为了让引脚默认是高电平,但是上拉的力量扛不住接地,所以按键没有按
下时上拉的力量保证了IO引脚输入为1,而按下后绝对为0。
3.按键抖动:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械点的弹性
作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,因而在闭合和断开的瞬间均伴随着一连串的抖动。
抖动时间的长短由按键的机械特性决定的,一般为5ms到10ms。
4.按键消抖:有两种方式,一种是硬件消抖,另一种是软件消抖。
5.注意事项:CPU通过监测按键连接的IO引脚的电平输入是1还是0来得知外部有没有人按下
这个按键。
CPU在按键被按下的一瞬间检测到的信号是很多次的忽高忽低的电平信号,这种信号是不稳定
的。
因此,需要使用按键消抖的算法使单片机获取到正常稳定的信号。
总的来说,51单片机按键使用需要注意按键的电路接法、抖动以及消抖等问题。
在使用过程中,需要遵循相应的原理和注意事项,以确保按键的正常工作。
单片机控制多个按键的方法
在很多嵌入式系统中,通常会用到按键进行输入。
单个按键的控制可能相对简单,但是如果需要控制多个按键,就需要用到一些特殊的控制方法。
常用的按键控制方法主要有以下几个方面:
1、轮询法:采用逐个扫描的方式来检测按键状态。
2、中断法:接入外部中断口,当按键被按下时,会触发中断,系统会响应中断并执行相应的程序。
3、计时器法:通过计时器的方式来检测按键状态,利用定时器可以定时检测按键的状态。
如果需要控制多个按键,就需要采用一些特殊的控制方法:
1、矩阵按键法:将多个按键以矩阵的方式进行排列,通过某种方法对行和列进行扫描,以检测按键的状态。
三、常用的按键检测程序
以下是一个常用的按键检测程序,可以用于单片机控制多个按键:
void key_scan(void)
{
unsigned char read_date, key1, key2, key3, key4;
// 初始化按键控制端口为输入模式
P3M0 = 0x00;
P3M1 = 0x00;
// 所有按键端口均拉高,等待按键输入
P3 = 0xff;
// 等待按键输入
Delay_ms(20);
// 读取P3端口状态
// 获得按键1状态
key1 = read_date & 0x01;
// 获得按键2状态
key2 = read_date & 0x02;
// 获得按键3状态
key3 = read_date & 0x04;
// 获得按键4状态
key4 = read_date & 0x08;
// 判断按键1是否被按下
if (key1 == 0)
{
// 按键1被按下,执行相应的操作 }
// 判断按键2是否被按下
if (key2 == 0)
{
// 按键2被按下,执行相应的操作 }
// 判断按键3是否被按下
if (key3 == 0)
{
// 按键3被按下,执行相应的操作 }
// 判断按键4是否被按下
{
// 按键4被按下,执行相应的操作
}
}
四、总结
单片机控制多个按键的方法,需要采用特殊的控制方法,例如矩阵按键法和编码按键法等。
同时,需要注意按键的输入状态和按键控制端口的初始化。
如果需要多次使用单片机控制多个按键,可以将常用的按键检测程序封装成函数,以便在其他程序中调用。