单片机独立式键盘
- 格式:ppt
- 大小:2.78 MB
- 文档页数:16
桂林电子科技大学
实验报告
2016-2017 学年第一学期
开课单位海洋信息工程学院
适用年级、专业 14级机械设计制造及其自动化
课程名称《单片微型计算机与接口技术-课内实验》
主讲教师周旋
课程序号 BS1615000_03
课程代码 BS1615000 实验名称《独立按键识别》
学号 1416010516 - 17 姓名林亦鹏卢炳荣
独立按键识别实验报告
电路采用无源蜂鸣器,从P1.5口形成脉冲来驱动。
因为单片机开机初始化瞬间,其I/O口为高电平,会有误响动作。
单片机的独立键盘使用的是P1口。
当有键按下时,P1口相应位为低电平。
、查找资料说明按键抖动的原因。
、延时程序是怎么实现延时的?
定义蜂鸣器的连接端口--//。
中州大学工程技术学院单片机课程设计说明书课题名称秒表专业机械制造与自动化学生XX 马振杨班级机制一班学号7指导教师沈娣丽完成日期2013年9月25日目录摘要 (1)一.系统设计要求 (2)二.设计思路分析 (2)三.秒表电路原理图设计 (2)3.1系统总电路图 (2)3.2时钟电路设计 (3)3.3 输入模块电路设计 (3)3.4显示模块电路设计 (3)四.系统硬件电路设计 (3)4.1秒表显示模块 (4)4. 2控制器模块单片机的选择 (4)4. 3键盘的选择 (5)五.简易秒表软件系统设计 (6)5.1定时模块 (6)5.2 主程序流程图 (8)六.系统的调试 (8)七.心得体会 (11)八.参考文献 (12)摘要单片机在日用电子产品中的应用日益广泛,单片机控制秒表是基于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低、平安性高使用方便等优点。
秒表是人们日常生活中常常需要用到的一种工具。
本文采用AT89S51单片机从硬件和软件两方面介绍了一款简易的秒表设计过,并对硬件原理图和程序流程图作了简洁的描述。
关键字:单片机AT89C51,LED,秒表,计数器引言:随着单片机技术的不断开展,单片机在日用电子产品中的应用越来越广泛,而本文设计并制作了一款基于AT89C51的3位数码管显示的秒表,其电路简单,软硬件构造模块化,易于实现。
产品和技术革新的日新月异都让人非常惊讶。
在电子科学技术高速开展的今天,高科技产品越来越多的应用在我们的日常生活中,给我们的生活带来了非常大的方便,每时每秒我们都能感受到产品的更新换代。
像平常我们工作所用的电脑、手机和生活所用的电视机,收音机,Mp3等等,这些高科技产品给我们带来了极大的方便,但这要归功于科学技术的高速开展。
一、设计要求⑴硬件设计:根据任务要求,完成单片机最小系统及其扩展设计。
⑵软件设计:根据硬件设计完成显示功能要求,完成控制软件的编写与调试;⑶功能要求:用S1启动秒表和停顿秒表,S2键将秒表归零,按一下S1,即开场定时,在数码管上每秒加1,加到60,归零。
单片机的键盘和显示实验报告㈠实验目的1.掌握单片机I/O的工作方式;2.掌握单片机以串行口方式0工作的LED显示;3.掌握键盘和LED显示的编程方法。
㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台㈢实验内容及要求实验硬件线路图见附图从线路图可见,8051单片机的P1口作为8个按键的输入端,构成独立式键盘。
四个LED显示器通过四个串/并移位寄存器74LS164接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。
编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。
注:①通过按键来选择加、减、乘、除四种运算方式。
②输入两个数字均为一位十进制数,可预先放在内存中。
㈣实验框图(见下页)㈤思考题1.当键盘采用中断方式时,硬件电路应怎样连接?P1.4~P1.7是键输出线,P1.0~P1.3是扫描输入线。
输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051的外部中断输入端。
2.74LS164移位寄存器的移位速率是多少?实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。
其实这个问题确实不知道怎么回答。
LED 显示用的段码与教科书所提供的不同,本实验采用如下段码:显示数符段码显示数符段码0BBH A DBH109H B F1H2EAH C B2H36BH D E9H459H E F2H573H F D2H否有否P1口置输入读P1口开 始显示“0000”是否有键按下?延迟消抖是否有键按下?是读键码加法运算减法运算除运算6F3H—40H70BH.04H8FBH┗┛A1H97BH┗┛1AH灭00H P DAH实验代码:ORG 0000HAJMP MAINORG 0030HMAIN:MOV 41H,#0BBH ;对几个存放地址进行初始化MOV 42H,#0BBHMOV 43H,#0BBHMOV 44H,#0BBHMOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示KEY:MOV R3,#08H;用来存放两个数据MOV R4,#02HMOV P1,#0FFH ;初始化P1口MOV A,P1 ;读取按键状态CPL A ;取正逻辑,高电平表示有键按下JZ KEY ;A=0时无键按下,重新扫描键盘LCALL DELAY1;消抖MOV A,P1 ;再次读取按键状态CPL AJZ KEY ;再次判别是否有键按下PUSH AKEY1:MOV A,P1CPL AANL A,#0FH ;判别按键释放JNZ KEY1 ;按键未释放,等待LCALL DELAY1;释放,延时去抖动POP AJB ACC.0,ADD1 ;K1按下转去ADD1JB ACC.1,SUB1 ;K1按下转去SUB1JB ACC.2,MUL1 ;K1按下转去MUL1JB ACC.3,DIV1 ;K1按下转去DIV1LJMP KEYADD1:LCALL BUFFER ;显示加数和被加数MOV 43H,#049HLCALL DISPLAY ;显示加号MOV A,R3ADD A,R4DA AMOV R3,A ;相加结果放入R6ANL A,#0FHMOV R4,A ;结果个位放入R7MOV A,R3SWAP A ;半字节交换,高四位放入低四位ANL A,#0FHMOV R3,A ;结果的高位放入R6LCALL L;显示缓存区设置LCALL DELAY2;延时一秒后显示LCALL DISPLAYLJMP KEYSUB1:LCALL BUFFER ;显示减数和被减数MOV 43H,#40HLCALL DISPLAY ;显示减号MOV A,R3CLR CY ;CY清零SUBB A,R4 ;做减法PUSH ARLC A ;带进位循环左移,最高位放入CYJC F ;判断最高位,若为1则跳转到负数ZHENG: POP AMOV R4,AMOV R3,#00H ;高位清零SJMP OUTFU:POP ACPL A ;取绝对值INC AMOV R4,AMOV R3,#11H ;显示负号OUT: LCALL L ;显示缓存区设置LCALL DELAY2 ;延时1s后显示LCALL DISPLAYLJMP KEYMUL1:LCALL BUFFER ;显示两位乘数MOV 43H,#99HLCALL DISPLAY ;显示乘号MOV A,R3MOV B,R4MUL AB ;结果放入AB,A中是低8位,B中是高8位MOV B,#0AHDIV AB ;十进制转换MOV R4,B ;结果个位放入R7MOV R3,A ;结果的十位放入R6LCALL LLCALL DELAY2LCALL DISPLAY ;延时1s后显示LJMP KEYDIV1:LCALL BUFFER ;显示除数和被除数MOV 43H,#62HLCALL DISPLAY ;显示除号MOV A,R3MOV B,R4DIV AB ;A除以BMOV R4,B ;余数放在R4中MOV R3,A ;商放在R3中MOV A,R4MOVC A,@A+DPTR ;调用段选号MOV 41H,A ;显示余数MOV A,R3MOVC A,@A+DPTRMOV 43H,A ;显示商MOV 42H,#00HMOV 44H,#00HLCALL DELAY2 ;延时1S后显示LCALL DISPLAYLJMP KEYBUFFER: MOV 41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号MOV DPTR,#TABLMOV A,R4MOVC A,@A+DPTRMOV 42H,AMOV A,R3MOVC A,@A+DPTRMOV 44H,ARETDISPLAY:MOV R5,#04H;共四位需要显示MOV R0,#41HDISPLAY1:MOV A,@R0MOV SBUF,ADISPLAY2:JNB TI,DISPLAY2;是否传完了CLR TIINC R0DJNZ R5,DISPLAY1RETL:MOV A,R4MOVC A,@A+DPTRMOV 41H,A ;R4对应的段码MOV A,R3MOVC A,@A+DPTRMOV 42H,A ;R3对应的段码MOV 43H,#00HMOV 44H,#00HRETDELAY1: ;普通延时MOV R1,#20HDS1:MOV R2,#0FFHDS2:DJNZ R2,DS2DJNZ R1,DS1RETDELAY2:MOV R6,#14H ;定时1SMOV TMOD,#01HDS3:MOV TH0,#3CHMOV TL0,#0B0H ;50msSETB TR0LOOP:JNB TF0,LOOPCLR TF0CLR TR0DJNZ R6,DS3 ;1s到,中断返回RETTABL:DB 0BBH 09H 0EAH 6BH ;段码表DB 59H 73H 0F3H 0BHDB 0FBH 7BH 00H 0DBHDB 0F1H 0B2H 0E9H 0F2HDB 0D2H 40H实验结果及分析按键1:8+2= 结果:10按键2:8-2= 结果: 6按键3:8*2= 结果:16按键4:8/2= 结果:4从上面的结果可以看出,本次实验基本完成了实验要求。
单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。
二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。
常见的键盘有独立式键盘和矩阵式键盘两种类型。
独立式键盘是每个按键单独占用一根 I/O 线,其优点是电路简单,编程容易,但缺点是占用较多的 I/O 口资源。
矩阵式键盘则是将按键排列成矩阵形式,通过行线和列线的交叉来识别按键。
这种方式可以有效地节省 I/O 口资源,但电路和编程相对复杂一些。
在本次实验中,我们采用了矩阵式键盘。
其工作原理是通过逐行扫描或者逐列扫描的方式,检测行线和列线的电平状态,从而确定按下的按键。
三、实验设备及材料1、单片机开发板一块2、计算机一台3、编程软件(如 Keil C51)4、下载工具(如 STCISP)四、实验步骤1、硬件连接将矩阵式键盘与单片机的 I/O 口进行连接,注意行线和列线的对应关系。
连接好电源和地线,确保硬件电路正常工作。
2、软件编程打开编程软件,创建一个新的工程。
编写初始化程序,包括设置 I/O 口的工作模式、中断等。
编写键盘扫描程序,通过循环扫描行线和列线的电平状态,判断是否有按键按下。
当检测到按键按下时,根据按键的编码执行相应的操作,如在数码管上显示按键值、控制 LED 灯的亮灭等。
3、编译和下载对编写好的程序进行编译,检查是否有语法错误。
如果编译成功,使用下载工具将程序下载到单片机中。
4、实验调试观察硬件电路的工作状态,看是否有异常现象。
按下不同的按键,检查程序的响应是否正确。
如果出现问题,通过调试工具(如单步调试、断点调试等)查找并解决问题。
五、实验代码以下是本次实验的部分关键代码:```cinclude <reg51h>//定义键盘的行和列define ROW_NUM 4define COL_NUM 4//定义行线和列线的端口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 code KeyCodeMapROW_NUMCOL_NUM ={{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'','0','','D'}};//键盘扫描函数void KeyScan(){unsigned char i, j, temp;unsigned char keyValue = 0;//逐行扫描for (i = 0; i < ROW_NUM; i++){//先将所有行线置高电平ROW1 = ROW2 = ROW3 = ROW4 = 1;//将当前行线置低电平switch (i){case 0: ROW1 = 0; break;case 1: ROW2 = 0; break;case 2: ROW3 = 0; break;case 3: ROW4 = 0; break;}//读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4;//如果有列线为低电平,则表示有按键按下if (temp!= 0xF0){//延迟去抖动delay_ms(10);//再次读取列线的电平状态temp = COL1 | COL2 | COL3 | COL4; if (temp!= 0xF0){//确定按下的按键for (j = 0; j < COL_NUM; j++){if ((temp &(1 << j))== 0){keyValue = KeyCodeMapij;break;}}//执行相应的操作switch (keyValue){case '1'://具体操作break;case '2':break;//其他按键的操作}}}}}//主函数void main(){while (1){KeyScan();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。
独立键盘检测
单片机检测按键的原理:我们把按键的一端接地,另一端与单片机的I/O口相连,开始时先给该I/O口赋一高电平,然后让单片机不断地检测该I/O口是否变成低电平,当按键闭合时,即相当于该I/O口通过按键与地相连接,变成低电平,程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。
实际波形在按下和释放的过程中都存在抖动现象,抖动时间长短和按键的机械特性有关,一般为5~10ms通常我们手动按下键然后立即释放,这个动作中稳定闭合的时间超过20ms。
因此单片机在检测键盘是否按下时要加上去抖延时。
延时去抖程序段举例:
if(key==0)
{
delay(10);
if(key==0)
{
num=0;
while(!key)
}
}
其中,delay(10)是去抖延时。
在确认按键被按下后,while(!key)是等待按键释放。
矩阵键盘检测
与独立键盘检测原理不同的是,矩阵键盘两端都与单片机I/O口相连,因此在检测时先送一列为低电平,其余几列为高电平然后立即检测一次各行是否有低
电平,若检测到某一行为低电平,则可确认被按下的按键是哪一行哪一列的。
矩阵键盘的4行分别与单片机的P3.0~P3.3相连,矩阵键盘的4列分别与单片机的P3.4~P3.7相连。