单片机 行列式键盘实验报告
实验6行列式键盘
实验六LED显示和行列式键盘实验实验目的掌握行列式键盘及LED的工作原理实验内容:将行列式键盘上的按键转化为字形码输出到LED数码管上显示。
(键盘是3×8式的,即共24键,显示从0到23)实验连线:CS0连CS273,74273的00~07连接LEDA~LEDdp,P1.0~P1.7连RL10~RL17 KA10~KA12接RXD,TXD和INT0,LED1接逻辑低电平。
参考程序:(;通过数码管显示键盘0~9)ORG 0000HLJMP KEY1ORG 4100HPORT EQU 0CFA0HKEY1:LCALL KS1;JNZ LK1;有键按下去抖动AJMP KEY1;无键安按下返回LK1: LCALL DELAY;延时ACALL KS1;再检查有无键按下JNZ LK2;确实有键按下,转逐列扫描AJMP KEY1LK2: MOV R2,#0FEH;MOV R4,#00HLK3: MOV A,R2MOV P1,A;列扫描字送P1口MOV A,P3JB ACC.0, LONE;第0行无键按下转查第1行MOV A,#00HAJMP LKPLONE:JB ACC.1,LTWO;MOV A,#08AJMP LKPLTWO:JB ACC.2,NEXT;;第3行无键按下转查下一列MOV A,#16;LKP:ADD A,R4;求键值并显示MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#PORTMOVX @DPTR,ALCALL DELAYAJMP KEY1NEXT:INC R4;指向下一列,列号加1MOV A,R2JNB ACC.7,KEY1;8列扫描完,返回RL AMOV R2,AAJMP LK3KS1:MOV P1,#00H;判断有无键按下MOV P3,#0FFHMOV A,P3ANL A,#07HCPL ARETDELAY:MOV R1,#127 ;延时0.1sDEL1: MOV R2,#200DEL2: DJNZ R2,DEL2DJNZ R1,DEL1RETTAB:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHEND。
行列式键盘扫描显示
单片机实验六行列式键盘扫描显示一.实验目的1.通过实验掌握查询式键盘的原理和编程方法2.理解按键防抖技术。
二.实验内容数码管为共阴型,P0输出7段码,开机运行数码管显示P,当按键按下时,数码管显示相应的数字键号(1-F)。
三.实验原理图四.实验步骤1.在KEIL4中编写、调试、编译程序。
2.在PRTUSE中设计电路,加载HEX文件运行仿真,按各键观察LED的显示。
3.在实验箱上用杜邦线连接JP4和JP8,JP10和JP3,打开实验箱电源开关,下载*.hex文件到单片机,按键观查运行状态。
五.实验参考程序ORG 0000HAJMP STARTORG 0030HSTART: MOV P0,#73HAN: MOV R1,#0FEHMOV P1,R1JNB P1.4, K1_1JNB P1.5, K2_1JNB P1.6, K3_1JNB P1.7, K4_1MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_2JNB P1.5, K2_2JNB P1.6, K3_2JNB P1.7, K4_2MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_3JNB P1.5, K2_3JNB P1.6, K3_3JNB P1.7, K4_3MOV A,R1RL AMOV R1,AMOV P1,R1JNB P1.4, K1_4JNB P1.5, K2_4JNB P1.6, K3_4JNB P1.7, K4_4AJMP ANK1_1: AJMP K11K1_2: AJMP K12K1_3: AJMP K13K1_4: AJMP K14K2_1: AJMP K21K2_2: AJMP K22K2_3: AJMP K23K2_4: AJMP K24K3_1: AJMP K31K3_2: AJMP K32K3_3: AJMP K33K3_4: AJMP K34K4_1: AJMP K41K4_2: AJMP K42K4_3: AJMP K43K4_4: AJMP K44K11: LCALL DL Y20MSJB P1.4,N0MOV A,#00HLCALL SEG_DISP N0: AJMP ANK12: LCALL DL Y20MSJB P1.4,N1MOV A,#01HLCALL SEG_DISP N1: AJMP ANK13: LCALL DL Y20MSJB P1.4,N2MOV A,#02HLCALL SEG_DISP N2: AJMP ANK14: LCALL DL Y20MSJB P1.4,N3MOV A,#03HLCALL SEG_DISP N3: AJMP ANK21: LCALL DL Y20MSJB P1.5,N4MOV A,#04HLCALL SEG_DISP N4: AJMP ANK22: LCALL DL Y20MSJB P1.5,N5MOV A,#05HLCALL SEG_DISP N5: AJMP ANK23: LCALL DL Y20MSJB P1.5,N6MOV A,#06HLCALL SEG_DISP N6: AJMP ANK24: LCALL DL Y20MSJB P1.5,N7MOV A,#07HLCALL SEG_DISP N7: AJMP ANK31: LCALL DL Y20MSJB P1.6,N8MOV A,#08HLCALL SEG_DISPN8: AJMP ANK32: LCALL DL Y20MSJB P1.6,N9MOV A,#09HLCALL SEG_DISPN9: AJMP ANK33: LCALL DL Y20MSJB P1.6,N10MOV A,#0AHLCALL SEG_DISPN10: AJMP ANK34: LCALL DL Y20MSJB P1.6,N11MOV A,#0BHLCALL SEG_DISPN11: AJMP ANK41: LCALL DL Y20MSJB P1.7,N12MOV A,#0CHLCALL SEG_DISPN12: AJMP ANK42: LCALL DL Y20MSJB P1.7,N13MOV A,#0DHLCALL SEG_DISPN13: AJMP ANK43: LCALL DL Y20MSJB P1.7,N14MOV A,#0EHLCALL SEG_DISPN14: AJMP ANK44: LCALL DL Y20MSJB P1.7,N15MOV A,#0FHLCALL SEG_DISPN15: AJMP ANSEG_DISP: MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ARETDL Y20MS: MOV R6,#14HDL2: MOV R7,#250DL1: NOPNOPDJNZ R7,DL1DJNZ R6,DL2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;/0123456789 DB 77H,7CH,39H,5EH,79H,71H ;/ABCDEFEND。
单片机键盘实验报告
单片机键盘实验报告单片机键盘实验报告引言:单片机是一种集成电路,具备处理器、存储器和各种输入输出接口等功能。
在现代电子设备中,单片机被广泛应用于各种控制系统中。
其中,键盘作为一种重要的输入设备,常用于与单片机进行交互。
本实验旨在通过使用单片机和键盘,实现一个简单的输入输出系统。
实验目的:1. 了解单片机的基本原理和工作方式;2. 掌握键盘的工作原理和使用方法;3. 利用单片机和键盘实现一个简单的输入输出系统。
实验器材:1. 单片机开发板;2. 键盘模块;3. 电脑。
实验步骤:1. 连接键盘模块到单片机开发板的合适接口上;2. 将开发板连接到电脑上;3. 编写单片机程序,实现键盘输入的读取和显示;4. 将程序下载到单片机开发板上;5. 运行程序,测试键盘输入和显示功能。
实验原理:1. 单片机工作原理:单片机通过执行存储在其内部的程序来完成各种任务。
它通过读取输入信号,进行运算处理,然后输出相应的结果。
单片机的核心是中央处理器(CPU),它负责执行指令和控制整个系统的工作。
2. 键盘工作原理:键盘是一种输入设备,通过按下不同的按键产生不同的电信号,然后传输给单片机进行处理。
键盘通常由多个按键组成,每个按键都有一个唯一的编码。
当用户按下某个按键时,键盘会发送相应的编码信号给单片机。
实验结果:经过实验,我们成功实现了一个简单的单片机键盘输入输出系统。
通过按下键盘上的按键,我们可以在电脑上显示相应的字符。
这样的系统可以应用于各种需要用户输入的场景,如密码输入、菜单选择等。
实验总结:通过本次实验,我们深入了解了单片机的基本原理和工作方式,掌握了键盘的工作原理和使用方法。
同时,我们也体验到了单片机和键盘的强大功能,以及它们在现代电子设备中的重要性。
单片机键盘输入输出系统的实现为我们提供了一个基础平台,可以进一步扩展和应用于更复杂的控制系统中。
未来展望:在今后的学习和实践中,我们将进一步研究和应用单片机和键盘技术。
行列式键盘扫描
实验二 行列式键盘扫描一. 实验内容与目的1. 实验内容利用行列式键盘,当按下键盘中的一个键子时会在数码管上显示出相应的键值,要求键盘有去抖功能,数码管显示的键值能进行移位。
2,实验目的学会行列式键盘扫描的原理与方法,进一步强化对MSP430I/O 口使用方法的掌握,加强msp430C 语言编程的能力。
二. 方法与结果键盘扫描:利用P3口进行键盘扫描,如图,令P3.0~P3.3为输出端口,P3.4~P3.7为输入端口,由于P3.4~P3,7接了上拉电阻,所以当没有键子按下时P3.4~P3.7都为‘1’,当有键子按下时P3.4~P3.7就有可能发生变化。
所以键盘扫描式先让P3.0~P3.3都为‘0’,当有键子按下时P3.4~P3.7就会有一个由‘1’变为‘0’,根据哪一个变为‘0’就能判断出相应的列有键子按下,再让P3.0~p3.3逐个变为‘1’判断出哪一行有键子按下进而确定出哪一个键子按下。
11221112221122311224112251122611227112281122911221122#1122*1122A 1122B1122C1122DR2510k R2610kR2710kR2810kP_30P_31P_32P_33P_34P_35P_36P_37P3.0~p3.3为‘0’P3.4~p3.7都为‘1’P3.4~P3.7不都为‘1’ 令P3.0~p3.3逐个为‘1’ 确定列确定行当P3.4~p3.7都为‘1’确定键值数码管显示:数码管位选与段选共用P1.0~P1.3,利用锁存器74HC373分时进行段选和位选,P6.1和P6.2控制74HC373,从而使相应数码管显示相应数。
电路图如下:e 1d 2d p3c 4g 546b 73829f 10a 11112seg4O E 1Q 02D 03D 14Q 15Q 26D 27D 38Q 39G N D 10L E11Q 412D 413D 514Q 515Q 616D 617D 718Q 719V C C 2074HC373_174HC373O E 1Q 02D 03D 14Q 15Q 26D 27D 38Q 39G N D 10L E11Q 412D 413D 514Q 515Q 616D 617D 718Q 719V C C 2074HC373_274HC373R19100R20100R21100R22100R2310k R2410k P_61P_62VCCVCCGND GNDGND GND GNDGNDP_10P_11P_12P_13P_14P_15P_16P_17三. 实验程序#include<msp430.h> void KEYSCAN(); void TUBESCAN();void KEYSLOVE( unsigned int key); unsigned char const table[]={0xff,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0~F 码值 unsigned int s1=0,s2=0,s3=0,s4=0; //s1~s4保存相应键值,进行显示 unsigned int key;void delay1(unsigned int i) {while(i--); }void main() {WDTCTL=WDTPW+WDTHOLD; P1DIR=0xff; P1SEL=0x00; P3SEL=0x00; P3DIR=0x0f;P6DIR=BIT1+BIT2; TUBESCAN(); P3OUT=0xf0; while(1)KEYSCAN();TUBESCAN();}}void KEYSCAN(){P3OUT=0xf0;if(P3IN!=0xf0){switch(P3IN){case (0xe0):P3OUT=0x01;if(P3IN==0xf1) {key=16;break;}P3OUT=0x02;if(P3IN==0xf2) {key=12;break;}P3OUT=0x04;if(P3IN==0xf4) {key=8;break;}P3OUT=0x08;if(P3IN==0xf8) {key=4;break;}case (0xd0):P3OUT=0x01;if(P3IN==0xf1) {key=15;break;}P3OUT=0x02;if(P3IN==0xf2) {key=11;break;}P3OUT=0x04;if(P3IN==0xf4) {key=7;break;}P3OUT=0x08;if(P3IN==0xf8) {key=3;break;}case (0xb0):P3OUT=0x01;if(P3IN==0xf1) {key=14;break;}P3OUT=0x02;if(P3IN==0xf2) {key=10;break;}P3OUT=0x04;if(P3IN==0xf4) {key=6;break;}P3OUT=0x08;if(P3IN==0xf8) {key=2;break;}case (0x70):P3OUT=0x01;if(P3IN==0xf1) {key=13;break;}P3OUT=0x02;if(P3IN==0xf2) {key=9;break;}P3OUT=0x04;if(P3IN==0xf4) {key=5;break;}P3OUT=0x08;if(P3IN==0xf8) {key=1;break;}}P3OUT=0xf0;KEYSLOVE(key);} //键盘扫描函数,得到相应的键值key }void KEYSLOVE( unsigned int key){delay1(200);if(P3IN!=0xf0){while(P3IN!=0xf0) TUBESCAN(); //键盘去抖,保证当手松开时读取键值if(s4==0)s4=s3;s3=s2;s2=s1;s1=key;}else{if(key==16){s1=0;s2=0;s3=0;s4=0;key=0;}}}} //将得到的键值进行处理:移位/重置void TUBESCAN(){P6OUT=0x02;P1OUT=table[s4];P6OUT=0x04;P1OUT=0x01;delay1(400);P6OUT=0x02;P1OUT=table[s3];P6OUT=0x04;P1OUT=0x02;delay1(400);P6OUT=0x02;P1OUT=table[s2];P6OUT=0x04;P1OUT=0x04;delay1(400);P6OUT=0x02;P1OUT=table[s1];P6OUT=0x04;P1OUT=0x08;delay1(400);} //数码管扫描,使数码管保持四.行列式键盘实验总结①做行列是键盘重点是键盘扫描确定键值,键盘扫描也有多种方式,要多思考确定最优方式,采用本实验中的键盘扫描方式当没有键子按下时不必执行键盘扫描的其他程序,将更多的时间给了数码管扫描,挺优的,在着手写程序之前一定要筹划如何去写,要寻求简单易行的方法,写程序规划挺重要的。
行列式键盘--单片机课程设计报告
单片机课程设计报告课题名称行列式键盘学生姓名 xx所在班级 xx学生学号 xx指导教师 xx二○一五年一月目录第一章课程简介 (1)1.1 行列式键盘实现的功能 (1)1.2 技术指标 (1)第二章硬件设计 (2)2.1 最小系统简介 (2)2.1.1 主要管脚说明 (2)2.2 晶振 (3)2.3 行列式键盘的电路介绍 (4)2.4 共阳极数码管的介绍 (5)2.5 发光二极管的介绍 (6)第三章软件设计 (7)3.1 设计流程图 (7)3.2 程序流程图 (8)第四章调试 (9)4.1 硬件调试 (9)4.1.1 电路电源调试 (9)4.1.2 电路下载调试 (9)4.2 软件调试 (9)第五章总结 (10)5.1 课程设计总结 (10)第六章附录 (12)附录A 原理总图 (12)附录B 程序代码 (13)附录C 实物图 (17)第一章课程简介1.1 行列式键盘实现的功能4*4行列式键盘以STC89C52单片机为核心,主要由4*4行列式键盘电路、4位8段数码管显示电路、LED灯电路和数码管位驱动电路等组成,软件选用C语言编程,简洁易懂。
单片机将检测到的按键信号转换成数字量,由数码管显示4*4行列式键盘的行与列的数字信息。
功能如下:按下S1键,数码管显示11,LED灯亮第一个,同时蜂鸣器发出响声;按下S2键,数码管显示12,LED灯亮第二个,同时蜂鸣器发出响声;按下S3键,数码管显示13,LED灯亮第一个和第二个,同时蜂鸣器发出响声;以此类推,按下按键,数码管显示按键的行列坐标数值,LED灯依照8421编码规则进行亮灭,亮代表1,灭代表0,表示0-F这16个数,同时伴随蜂鸣器的响声;行列式键盘控制系统可以提高效率,是进行按键操作管理的有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身的要求。
并能正确、实时、高效地显示按键信息,以提高工作效率和资源利用率。
行列式键盘是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,并通过单片机,显示在LED数码管上。
中断法行列式键盘设计报告
编号毕业论文(设计)(届本科)论文题目:学院:专业:班级:作者姓名:指导教师:职称:完成日期:年月日目录摘要 (3)前言 (3)课题设计 (3)中断法行列式键盘摘要行列式键盘是它的按键均是每只键单独接在一根I/O口线上,构成所谓的独立式键盘。
其特点是电路简单,易于编程,但占用的I/O口线较多,当需要较多按键时可能产生I/O资源紧张问题。
为此,可采用行列式键盘方案,具体做法是,将I/O口分为行线和列线,按键设置在跨接行线和列线的交点上,列线通过上拉电阻接正电源。
中断是指计算机在运行当前程序的过程中,若遇到紧急或突发事件,可以暂停当前程序的运行,转向处理该突发事件,处理完后再从当前程序的间断出接着运行。
中断法行列式键盘是用中断法来控制行列式键盘的工作状态,即只有在有键按下时,才执行键盘扫描程序;如果无键按下,则将键盘视为不存在,从而降低CPU处理信息的时间,大大提高了CPU处理信息的效率和资源的利用率。
同时,采用中断法能够实现分时操作、实时处理和故障处理。
前言中断法行列式键盘主要用于电子产品,比如:计算机等,主要运用中断法控制按键,在有键按下时,才执行键盘扫描程序;如果无键按下,则将键盘视为不存在。
这样,既减轻了CPU处理信息的压力,也节省了资源的利用率,符合电子信息行业的要求,从而在电子信息行业广泛应用。
目前,电子信息行业发展迅速,前景广阔,该项技术在当前及未来的发展过程中有很大的市场,在电子信息行业的发展中能够起到推到作用。
在本设计中,采用的是4x4的行列式键盘。
课题设计1、硬件设计本课题中采用了一组7407集成电路芯片作为行线与单片机I/O口的驱动元件,采用4x4的行列式键盘作为输入设备。
硬件原理设计图如下:2、软件设计行列式键盘的检测课采用软件扫描查询法进行,即根据按键压下前后,所在行线的端口电平是否出现反转,判断有无按键闭合动作。
2.1 分析需要考虑以下三个关键环节:2.1.1、获得按键的键值——检测流程图2.1.2、获得闭合按键的键模——查表比对2.1.3、获得闭合按键的字模——查表思路2.2 键盘列扫描由P3口循环输出一键扫描码,使键盘的4行电平全为1,4列电平轮流有一列为0其余为1.2.3 按键判断利用(P3&0x0f)算法判断有无按键按下。
实验3行列式键盘
一.实验目的
1、了解行列式键盘的工作原理
2、掌握行列式键盘的程序设计方法
二.实验器材
单片机开发板、电脑
三.实验任务
编写行列式键盘的驱动程序,在液晶显示屏上边显示所按键的编号
四.实验原理
1、行列式键盘的硬件电路
4×4的行列式键盘由行线和列线组成。行线对应的接口为P10~P13,列线对应的接口为P14~P17。利用单片机编程扫描是否有按键按下的时候,将行线P10~P13设为高电平1(即输出数字1)。列线P14~P17设为0,再读回行线P10~P13的数值,就可以知道是否有按键按下。如果有键按下,则行线输入的信号就不全为1,例如,K5按下,则行线输入的信号就会变成1101。在行列式的键盘中,通常分三个步骤处来检测、识别和处理键盘的事件。
K13键
11010111
0xd7
K14键
10110111
0xb7
K15键
01110111
0x77
2.键盘识别流程
五.实验步骤
1.建立工程文档key.uv2
2.新建key.c文件,并加入工程项目中。
3.在key.c中加入下列程序代码。如下页所示。
#include "reg52.h"
#defineuintunsignedint
#defineucharunsigned char
/*LCD端口定义*/
//LCD端口要根据实际的连接情况分配IO
#define busy 0x80
sbitRS=P2^5;
sbitRW=P2^6;
sbitE=P2^7;
sfr LCDData=0x80;//0x80--P0,0X90--P1,0xa0--P2,0xb0--P3
单片机 行列式键盘实验报告
}}}
return -1;
}
void main(void) {
char key=0;
P0=0x00;
while(1){
key=getkey();
if(key!=-1)
P0=~led_mod[key];
}}
实验总结:
本次实验遇到了一个问题,就是在运行中仿真结果是正确的,连接实验箱的时候,怎么都不正确。老师提示验箱是共阳极显示,而在Proteus中运行仿真结果是共阴极显示。然后我就在C51程序中对字模进行取反(P0=~led_mod[key]),最后重新把程序烧进开发板,并且在开发板上的显示结果正确。
char getkey(void) {
char key_scan[]={0xef,0xdf,0xbf,0x7f};
char i=0,j=0;
for(i=0;i<4;i++) {
P2=key_scan[i];
if((P2&0x0f)!=0x0f){
for(j=0;j<16;j++) {
if(key_buf[j]==P2) return j;
一、实验内容
1.绘制非中断方式键盘接口电路原理图;
2.参照实例完成教材非中断行列式键盘C51语言程序的编译;
3.练习μVision4程序动态调试方法,实现非中断行列式键盘的功能;
单片机实验五 按键实验
实验五:按键实验一、实验要求实验目的:熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式减半的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时抖动的消除方法,掌握LED静态扫描显示方式。
实验内容:4*4键盘矩阵的横线连接单片机的P1.0~P1.3端口,列线连接P1.4~P1.7端口,1位LED数码管连接单片机的P0口,编程实现:当按下任意一个按键时,LED数码管显示它在4*4键盘矩阵上的序号0~F二、实验原理线反转法的原理线反转法与行扫描法相比更加简练,无论被按键是处于第一行还是最后一行,均经过两步便可获得该键值所在的行列值。
线反转法的工作原理如图1所示,图1中采用8位I/O端口构成一个4*4的矩阵键盘,P1.0~P1.3作为行线,P1.4~P1.7做列线,采用查询方式进行工作。
下面介绍线反转法的具体操作步骤。
第一步:将列线便成为输入线,将行线便成为输出线,并使输出线的输出为全零电平,则列线中的电平由高到低发生变化的列为按键所在列。
第二步:将第一步中的传送方向反过来,即将行线编程位输入线,列线编程位输出线,并输出第一步中的输入列值,则行线中电平由高到低发生变化的行即为按键所在的行。
综合一、二两步的结果,可确定按键所在的行和列,从而识别出按键所在的键。
例如“键9”被按下,第一步在P1.0~P1.3行线输出全零,然后读入列线值位P1.7~P1.4=1101B,即P1.5=0,与P1.5相连的列线有键被按下。
第二步从列线输出刚才得到的值,再读取行线的输入值,则在闭合键所在的行线上值必定为“0”,即从行线读出的值为P1.3~P1.0=1101B。
于是行值和列值合起来得到唯一的一对行列值:11011101B即0DDH,这个值对应“键9”。
可见先反转法非常简单实用。
三、程序设计1、程序流程图图 1 程序流程图2、程序代码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP, #60HKEY0: MOV P1, #0EFHJNB P1.0, K0JNB P1.1, K4JNB P1.2, K8JB P1.3, E1LJMP K12E1: MOV P1, #0DFHJNB P1.0, K1JNB P1.1, K5JNB P1.2, K9JB P1.3, E2LJMP K12E2: MOV P1, #0BFHJNB P1.0, K2JNB P1.1, K6JNB P1.2, K10JB P1.3, E3LJMP K14E3: MOV P1, #07FHJNB P1.0, K3JNB P1.1, K7JNB P1.2, K11JNB P1.3, K15LJMP KEY0K0: MOV P0, #0C0HLCALL DELAYJMP KEY0K1: MOV P0, #0F9HLCALL DELAYJMP KEY0K2: MOV P0, #0A4HLCALL DELAYJMP KEY0K3: MOV P0, #0B0HLCALL DELAYJMP KEY0K4: MOV P0, #99HLCALL DELAYJMP KEY0K5: MOV P0, #92HLCALL DELAYJMP KEY0K6: MOV P0, #082HLCALL DELAYJMP KEY0K7: MOV P0, #0F8HLCALL DELAYJMP KEY0K8: MOV P0, #80HLCALL DELAYJMP KEY0K9: MOV P0, #090HLCALL DELAYJMP KEY0K10: MOV P0, #88HLCALL DELAYJMP KEY0K11: MOV P0, #083HLCALL DELAYJMP KEY0K12: MOV P0, #0C6HLCALL DELAYJMP KEY0K13: MOV P0, #0A1HLCALL DELAYJMP KEY0K14: MOV P0, #086HLCALL DELAYJMP KEY0K15: MOV P0, #08EHLCALL DELAYJMP KEY0DELAY: M OV R3, #60HLP: MOV R4, #0A8HLP1: MOV R5, #0A8HLP2: DJNZ R5, LP2DJNZ R4, LP1DJNZ R3, LPRETEND设计说明:单片机不断查询各列电平,当某列中有某行的电平被置零,则跳转到改行所在语句,在数码管上显示被按键的数字。
单片机实验报告实验5行列式键盘实验
学号姓名专业电气工程及其自动化班级实验5 行列式键盘实验一、实验目的(1)、学习掌握行列式键盘接口方法(2)、学习掌握行列式键盘编程方法。
二、实验内容用单片机P1口接4*4键盘,P0口接共阳数码管,编程实现键字的显示。
P1.0-P1.3为行,P1.4-P1.7为列。
先给端口设处置FEH,相当于给第一行置0,然后分写列值,如果对应的列值为0,说明该行与该列交叉处的键是按下的,接下来扫描第二行,与第一行的操作相同。
这就是行列式键盘扫描原理。
当扫描到某行的键按下时,就退出扫描,然后取键值,再将键值对应的额编码送P0端口显示。
三、实验设备计算机(已安装Keil和Proteus软件)元器件:A T89C51, CAP, CAP-ELEC, CRYSTAL, RES, 7SEG-COM-AN-GRN, RESPACK-7, BUTTON四、实验硬件电路实验源程序:#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x7 1};charkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x 77};char getkey(void){char key_scan[]={0xef,0xdf,0xbf,0x7f};char i=0,j=0;for(i=0;i<4;i++){P1=key_scan[i];if((P1&0x0f)!=0x0f){for(j=0;j<16;j++){if(key_buf[j]==P1)return j;}}}return -1;}void main(void){char key=0;P0=0x00;while(1){key=getkey();if(key!=1)P0=~led_mod[key]; }}五、实验要求(1)、根据实验内容设计相应的调试程序,并通过仿真,运行正确。
实验四行列式键盘实验
2. 程序设计按照实验要求,实验参考程序如下:#include <reg51.h>#include <stdio.h>#define OSC 11059200#define BAUDRATE 9600sbit BUZ_CON= P3^7; // 定义蜂鸣器控制位void Delay1ms(int ms){ int i;while(ms--)for(i=0;i<100;i++); // 可根据晶振频率调整循环次数,使延时约1ms } main(void){ unsigned char Mask,ScanCode,Line,Col,i;TMOD = 0x20;PCON |= 0x80;SCON = 0x50;TH1 = 256 - (OSC/12/16/BAUDRATE);TL1 = 256 - (OSC/12/16/BAUDRATE); // 设置串行口工作模式及波特率发生器初值TR1 = 1; // 启动定时器,产生波特率时钟TI = 1; // 使用printf 函数的要求printf("\r\nKey pad 4X4 test running..."); //输出提示信息printf("\r\nKey pad 4X4 test running...");while(1){ P1 = 0xff; // P1 全部置高,准备扫描Line = 1; // 从第一行开始扫描Mask = 0x01; // 行位置掩码,初始值为指向最低位(第1 行for(i=0;i<4;i++){Col = 0; // 置某行输出为0P1 = ~Mask; // 输入4 列(P1 的高4 位)的状态ScanCode = P1 & 0xf0; // 输入的4 列不全为1 则表示有键按下if(ScanCode != 0xf0){BUZ_CON = 0; // 蜂鸣器鸣响Delay1ms(20); // 按键去抖BUZ_CON = 1; // 蜂鸣器停止鸣响}ScanCode = P1 & 0xf0;switch(ScanCode) //再次读入各列状态{case 0xe0: Col = 1; // P1=11100000b,第1 列有键按下break;1case 0xd0:Col = 2; // P1=11010000b,第2 列有键按下break;case 0xb0:Col = 3; // P1=10110000b,第3 列有键按下break;case 0x70:Col = 4; // P1=01110000b,第4 列有键按下break;default:Col = 0; // 其余情况均不识别break;}if(Col > 0) // 识别到有效按键Col 才能大于0{printf("\r\nKey pressed: Line=%bd,Column=%bd",Line,Col); // 输出按键所在的行、列号while(1) // 等所有按键都释放后再返回{ScanCode = P1 & 0xf0;if(ScanCode == 0xf0) break;}}Mask <<= 1; // 扫描下一行Line ++; // 4 行扫描完成后,退到上层while 循环,重新扫描} }}六、实验体会本次实验让我了解矩阵键盘的工作原理。
单片机实验五报告_单片机键盘实验
单片机实验五报告_单片机键盘实验一、实验目的本次单片机键盘实验的主要目的是让我们深入了解单片机与键盘的接口技术,掌握如何通过编程实现对键盘输入的检测和响应,从而提高我们在单片机应用开发中的实际操作能力。
二、实验原理在单片机系统中,键盘通常是作为输入设备使用的。
常见的键盘有独立式键盘和矩阵式键盘两种类型。
独立式键盘是每个按键单独占用一根 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();}}```六、实验结果及分析在实验过程中,我们成功地实现了对矩阵式键盘的输入检测,并能够根据不同的按键执行相应的操作。
实验四键盘及显示设计实验报告
实验四键盘扫描及显示设计实验报告一、实验要求1. 复习行列矩阵式键盘的工作原理及编程方法。
2. 复习七段数码管的显示原理。
3. 复习单片机控制数码管显示的方法。
二、实验设备1.PC 机一台2.TD-NMC+教学实验系统三、实验目的1. 进一步熟悉单片机仿真实验软件 Keil C51 调试硬件的方法。
2. 了解行列矩阵式键盘扫描与数码管显示的基本原理。
3. 熟悉获取行列矩阵式键盘按键值的算法。
4. 掌握数码管显示的编码方法。
5. 掌握数码管动态显示的编程方法。
四、实验内容根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:1.扫描键盘输入,并将扫描结果送数码管显示。
2.键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。
实验具体内容如下:将键盘进行编号,记作 0~F,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 4 次按下的按键编号。
五、实验单元电路及连线矩阵键盘及数码管显示单元图1 键盘及数码管单元电路实验连线图2实验连线图六、实验说明1. 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动。
抖动时间的长短由按键的机械特性决定,一般为 5~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
键抖动会引起一次按键被误读多次。
为了确保 CPU 对键的一次闭合仅做一次处理,必须去除键抖动。
在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。
按键的抖动,可用硬件或软件两种方法消除。
2. 为了减少键盘与单片机接口时所占用 I/O 线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。
3. 从数码管显示方式看,数码管分为静态显示和动态显示两种方式。
行列扫描键盘实验报告
一、实验目的1. 了解行列扫描键盘的工作原理和设计方法。
2. 掌握行列扫描键盘的硬件电路连接和程序编写。
3. 通过实验验证行列扫描键盘的正确性和稳定性。
二、实验原理行列扫描键盘是一种常用的键盘设计方法,它通过将多个独立按键按照行、列的结构组合起来,形成一个整体键盘。
在这种设计中,行线和列线分别连接到单片机的IO口,通过控制行线和列线的电平状态,可以实现对按键的扫描和识别。
行列扫描键盘的原理如下:1. 将按键按照行、列结构连接,行线连接到单片机的输出端,列线连接到单片机的输入端。
2. 当行线输出低电平时,列线上的按键状态被检测。
如果列线上的电平状态与设定的预期状态不符,则表示有按键被按下。
3. 通过扫描行线和列线,可以确定按键的位置和状态。
三、实验设备1. 单片机:如51单片机、STM32等。
2. 行列扫描键盘:如4x4矩阵键盘。
3. 电源:5V电源。
4. 连接线:用于连接单片机和键盘的导线。
四、实验步骤1. 硬件连接:将行列扫描键盘的行线连接到单片机的输出端,列线连接到单片机的输入端。
同时,将电源连接到键盘的电源端。
2. 程序编写:编写程序实现对行列扫描键盘的扫描和识别。
(1)初始化:设置单片机的IO口为输出或输入模式。
(2)扫描行线:依次将行线输出低电平,读取列线状态,判断是否有按键被按下。
(3)识别按键:根据扫描到的行线和列线状态,确定按键的位置和状态。
(4)按键处理:根据按键的位置和状态,执行相应的操作。
3. 实验验证:将编写好的程序烧录到单片机中,连接键盘和电源,观察按键是否能够被正确识别。
五、实验结果与分析1. 实验结果:在实验过程中,成功实现了行列扫描键盘的扫描和识别功能。
按下键盘上的任意按键,单片机都能够正确识别并执行相应的操作。
2. 实验分析:通过实验,我们了解到行列扫描键盘的设计方法和原理。
在实际应用中,行列扫描键盘具有以下优点:(1)节省单片机的IO口资源:通过将多个按键按照行、列结构连接,可以减少单片机的IO口使用数量。
单片机实验五报告_单片机键盘实验
南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合■设计⃞创新实验日期:2018.05.18 实验成绩:实验五单片机键盘实验(一)实验目的1.掌握单片机键盘控制;2.掌握数码管显示控制。
(二)设计要求1.行列扫描按键键值为0~F;2.按键只支持单键按下,不支持多键同时按下;3.要求用数码管显示按键值。
(三)实验原理1.矩阵式键盘的设计按键数目较多的杨合常采用矩阵式(也称行列式)键盘。
键盘由行线和列线组成,按键位于行、列的交叉点上,如下图所示,一个4×4的行列结构可构成一个16个按键的键盘,需要一个8位的并行I/O口。
很明显,在按键数目较多的场合,矩阵式键盘要比独立式键盘节省较多的I/O口线。
对下图所示的矩阵式键盘的查询扫描,一般包括以下4个步骤。
(1)首先判别整个键盘有无按键按下方法为单片机驱动列线P0.0-P0.3输出全0,然后读行线P0.4-P0.7的状态,若全为1,则键盘上没有闭合键;若P0.4-P0.7,则有键按下。
(2)去除键的抖动当判别出可能有键按下时,软件延时一段时间(10ms左右)再判别键盘的状态,若仍有键闭合,则认为键盘上有确定的键按下,否则是键抖动。
(3)求出按下键的键号上图中的16个按键,键号依次为0,1,...15。
各行的首键号分别为0,4,8,12,列号依次为0,1,2,3。
行线通过上拉电阻接+5V,当无键按下时,行线为高电平,当有按键按下时,对应的行线与列线短接,行线的电平将由此行线相连的列线电平决定。
如果把行线设置为单片机的输入口线,列线设置为单片机的输出口线,则按键号的识别过程是:先令0列线P0.0为低电平0,其余3根列线都为高电平,遂行检查行线状态。
如果行线P0.4-P0.7都为高电平1,则P0.0这列上没有按键闭合,若P0.4-P0.7中有一行为低电平,则该行线与列线交叉的按键按下。
如果P0.0这一列上没有按键闭合,接着再使P0.1为低电平,其余列线为高电平。
单片机按键实验报告
单片机按键实验报告篇一:单片机按键扫描实验报告键盘扫描一.实验目的(1)掌握矩阵键盘接口电路和键盘扫描编程方法。
(2)掌握按键值处理与显示电路设计。
二.实验任务(1)设计4*4键盘,编写各个键的特征码和对应的键值(0~F);(2)编程扫描按键,将按键对应的数字值使用数码管显示出来。
三.实验电路及连线方法1.采用动态显示连线方法:电路由2 片74LS573,1 个六字一体的共阴数码管组成。
由U15 输出段选码,U16 做位选码,与单片机的采用I/O 口连接方式,短路片J22 连接P2.0,J23 连接P2.3,做输出信号锁存。
(实际电路连接是d7-d6-d5-d4-d3-d2-d1-d0?h-c-d-e-g-b-a-f)。
PW12 是电源端。
2.键盘电路连线方法:电路由16 个按键组成,用P1 口扩展4×4 行列式键盘。
J20 是键盘连接端,连接到P1 口。
J21 是行列键盘、独立键盘选择端,当J21 的短路片连接2-3脚时,构成4×4 行列式键盘;当J21 的短路片连接2-1 脚时,可形成3×4 行列式键盘,4 个独立式按键S4、S8、S12、S16,这4 个独立按键分别连接P1.4~P1.7;其他12 个键3×4 行列式键盘。
PW15 是电源端。
四.编程思路1.采用反转法识别按键的闭合。
2.采用动态显示将键值显示出来。
五.算法流程图六.资源分配1.用P1口进行查找按键2.用R3做键值指针3.用R1做动态显示为选码指针。
4.R5为延时指针。
七.程序设计KPIN:ORG MOV MOV ANL MOV 0000H P1,#0F0H A,P1 A,#0F0H B,AMOVP1,#0FHMOVA,P1ANLA,#0FHORLA,BCJNE A,#0FFH,KPIN1AJMP EXITKPIN1: MOVB,AMOVDPTR,#TABKPMOVR3,#0KPIN2: MOVA,R3MOVC A,@A+DPTRCJNE A,B,KPIN3MOVA,R3LOOP: MOVR1,#0FEH;键盘动态显示 LOOP1: MOVA,R3ANLA,#0FHMOV DPTR,#TABMOVC A,@A+DPTRCLRP2.0CLRP2.1MOVP0,ASETB P2.0NOPCLRP2.0LOOP2: MOVA,R1;位选码MOVP0,ASETB P2.1MOVR5,#250LOOP3: DJNZ R5,LOOP3CLRP2.1SJMP LOOPKPIN3: INCR3CJNE A,#0FFH,KPIN2EXIT: RETTABKP: DB0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBHDB 0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,67H,0FFHTAB: DB77H,44H,3EH,6EH,4DH,6BH,7BH,46H,7FH,6FH,5FHDB 79H,33H,7CH,3BH,1BHEND八.调试出现的问题及解决问题1:程序正常运行,但按键显示出现乱码解决:动态显示笔形码错误,并改正。
行列式键盘单片机课程设计报告
单片机课程设计报告课题名称行列式键盘学生姓名 xx所在班级 xx学生学号 xx指导教师 xx二○一五年一月目录第一章课程简介 01.1 行列式键盘实现的功能 01.2 技术指标 0第二章硬件设计 (1)2.1 最小系统简介 (1)2.1.1 主要管脚说明 (1)2.2 晶振 (2)2.3 行列式键盘的电路介绍 (3)2.4 共阳极数码管的介绍 (4)2.5 发光二极管的介绍 (5)第三章软件设计 (6)3.1 设计流程图 (6)3.2 程序流程图 (7)第四章调试 (8)4.1 硬件调试 (8)4.1.1 电路电源调试 (8)4.1.2 电路下载调试 (8)4.2 软件调试 (8)第五章总结 (9)5.1 课程设计总结 (9)第六章附录 (11)附录A 原理总图 (11)附录B 程序代码 (12)附录C 实物图 (16)第一章课程简介1.1 行列式键盘实现的功能4*4行列式键盘以STC89C52单片机为核心,主要由4*4行列式键盘电路、4位8段数码管显示电路、LED灯电路和数码管位驱动电路等组成,软件选用C语言编程,简洁易懂。
单片机将检测到的按键信号转换成数字量,由数码管显示4*4行列式键盘的行与列的数字信息。
功能如下:按下S1键,数码管显示11,LED灯亮第一个,同时蜂鸣器发出响声;按下S2键,数码管显示12,LED灯亮第二个,同时蜂鸣器发出响声;按下S3键,数码管显示13,LED灯亮第一个和第二个,同时蜂鸣器发出响声;以此类推,按下按键,数码管显示按键的行列坐标数值,LED灯依照8421编码规则进行亮灭,亮代表1,灭代表0,表示0-F这16个数,同时伴随蜂鸣器的响声;行列式键盘控制系统可以提高效率,是进行按键操作管理的有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身的要求。
并能正确、实时、高效地显示按键信息,以提高工作效率和资源利用率。
行列式键盘是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,并通过单片机,显示在LED数码管上。
单片机实验五 -键盘实验
电子信息工程系实验报告课程名称:单片机与接口技术实验项目名称:键盘实验 实验时间:2013-5-23班级:通信10 姓名:Microlab_4 学号:实 验 目 的:熟悉keil 仿真软件、proteus 仿真软件的使用和实验板中行列式键盘的使用。
了解并熟悉行列式键盘的电路结构、与单片机的连接方法及其工作原理,理解掌握C51中单片机控制行列式键盘中判断按键是否按下、按键的识别、按键的消抖分别是如何实现的。
实 验 原 理:键盘是单片机系统中通用的输入设备,用于向系统输入数据或控制信息。
键盘中一般矩阵式(行列式)键盘用得较多,适用于按键数量较多的场合。
矩阵式键盘由行线和列线组成,按键位于行线、列线的交叉点上。
当键被按下,则其交点的行线和列线接通。
行和列可分别用两个I/O 口来控制。
判断是否有键按下时,行线通过上拉电阻接+5V 上,而先使所有列线为低电平(I /O 输出0),再读行线状态(输入口),当无键按下时,所有行线为高电平,即读到“全1”数据;当有某键按下时,总会有一根行线为低电平,即读到的数据不全为“1”。
按键的识别(识别键的行列位置)有两种方法:扫描法和反转法。
反转法将行线接一并口,做输出方式;列线接一并口,做输入方式。
使所有行线为低电平(送全“0”),读入列线值,为“0”的那列,即按键所在列;反过来,使行线做输入方式,列线做输出方式。
将刚读到的列线值输出,然后读行线值,为“0”的那行,即按键所在行。
编程时使用P1=0x0f;m=P1;P1=0xf0;n=P1;mn=m|n;即可得到按键的键值,每一个按键都有自己唯一的键值。
按键或键盘都是一个机械开关,键的按下和放开是利用机械触点的闭合和断开来实现的。
由于机械触点的弹性作用,一个按键开关在闭合及断开瞬间均有一连串的抖动,抖动的时间长短由按键的机械特性决定,一般为5~10ms。
为了确保按键动作只确认一次,必须消除抖动的影响。
一般采用延时的方法。
单片机实验上机实验十八 阵列式键盘实验
实验十八阵列式键盘实验一、实验目的1、掌握键盘和显示器的接口方法和编程方法2、掌握阵列式键盘的硬件组成和软件编程方法二、实验说明本实验提供了一个4X4小建盘,向P0口的低四位逐个输出低电平,如果有键盘按下,则相应输出为低,如果没有键按下,则输出为高。
通过输出的列码和读取的行码来判断按下什么键。
在有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。
三、实验步骤及内容1、用一根扁平10线插头连接阵列式键盘实验模块与LED与单片机接口模块。
无键按下或有键按下,发光二极管全亮。
若将A1-A4接地,则发光二极管显示0000XXXX;B1线上有键按下,则发光二极管显示0000XXX,B2线上有键按下,则发光二极管现世0000X0XX,B1和B2均有键按下,则发光二极管显示000000XX……同样可将B1与B4接地,按键与发光二极管显示情况,用户可以自行判断,自由操作。
2、用一根扁平10线插头连接阵列式键盘实验模块与扫描显示实验模块。
无键按下或有键按下,八段LED全亮。
用户参照1,观察键盘与八段LED亮熄的关系。
3、使用静态串行显示模块显示键值。
单片机最小应用系统1的 P1口接阵列式键盘的A1~B4口,单片机最小应用系统1的RXD接串行静态数码显示DIN,TXD接CLK。
4、安装好伟福仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
5、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
6、打开阵列KEY.ASM源程序,编译无误后运行程序,在键盘上按下某个键,观察数显是否与按键值一致。
16位建盘的键值从左至右、从上至下依次为0~F(16进制数)。
7、可把源程序编译成可执行文件,烧录到89C51芯片中。
四、流程图及源程序1、流程图2、源程序ORG 0000H DBUF EQU 30HTEMP EQU 40HMOV A ,#16 MAIN: ACALL DISPMOV 30H, A ACALL KEY1AJMP MAINKEY1: MOV P1, #0FH ;A1-A4输出,B1-B4输入,输 ;入者对应锁存先写“1” MOV A, P1 ;读取键盘状况 CJNE A,#0FH, K11 ;有键按下 K10: AJMP KEY1 ;无键按下 K11: ACALL DELAY ;去抖动 MOV P1, #0FHMOV A, P1 ;再读键盘状况 CJNE A, #0FH, K12 ;确有键盘按下 SJMP K10 ;误动作 K12: MOV B,A ;存列值 MOV P1, #0EFH ;按键在Ai 行 MOV A, P1CJNE A, #0EFH,K13 ;键在A4 MOV P1, #0DFH MOV A, P1主程序框CJNE A, #0DFH,K13 ;键在A3行MOV P1, #0BFHMOV A,P1CJNE A, #0BFH,K13 ;键在A2行MOV P1, #7FHMOV A, P1CJNE A,#7FH, K13 ;键在A1行AJMP K10 ;多键同时按下K13: ANL A, #0F0H ;的行值ORL A, B ;的按下键的行列值MOV B, A ;暂存键值MOV R1, #16 ;16个键MOV R2, #0 ;键码初值MOV DPTR,#K1TAB ;键码表首址K14: MOV A,R2MOVC A, @A+DPTR ;从键值表中取键值CJNE A, B, K16 ;与按下键,键值比较MOV P1,#0FH ;相等,则完成以下步骤K15: MOV A, P1CJNE A, #0FH, K15 ;等释放ACALL DELAY ;去抖动MOV A, R2 ;得键码RETK16: INC R2 ;不相等,则继续访问键值表 DJNZ R1,K14AJMP K10 ;多键同时按下处理K1TAB: DB 0EEH, 0DEH, 0BEH, 07EH ;键值表DB 0EDH, 0DDH, 0BDH, 07DHDB 0EBH, 0DBH, 0BBH, 07BHDB 0E7H, 0D7H, 0B7H, 077HDISP: MOV DBUF,AMOV DBUF+1,#16MOV DBUF+2,#16MOV DBUF+3,#16MOV DBUF+4,#16MOV R0, #DBUFMOV R1, #TEMPMOV R2, #5DP10: MOV DPTR,#SEGTABMOV A, @R0MOVC A, @A+DPTRMOV @R1, AINC R0INC R1DJNZ R2, DP10 MOV R0, #TEMP MOV R1, #5DP12: MOV R2, #8MOV A, @R0 DP13: RLC AMOV 0B0H,CCLR 0B1HSETB 0B1HDJNZ R2, DP13 INC R0DJNZ R1, DP12 RET。
单片机按键扫描实验报告
单片机按键扫描实验报告
实验目的:
通过实验,掌握单片机按键的原理和按键的扫描方法。
实验器材:
1. STC89C52单片机开发板
2. 按键模块
3. 面包板、杜邦线等
实验原理:
单片机按键的原理是通过按键模块接通或断开单片机的某个IO口,从而改变该IO口的电平状态,由单片机检测到电平状态的改变,从而实现对按键的检测和响应。
按键模块一般采用矩阵按键的形式,通过多个IO口设为输出,多个IO口设为输入的方式,实现对多个按键的扫描检测。
按键模块一般会采用行列扫描的方法,即将按键分为多个行和列,按下按键时,某一行和某一列之间接通,从而改变了IO口的电平状态。
实验步骤:
1. 将按键模块连接到单片机开发板的IO口上。
根据按键模块的接口定义将VCC、GND和各个行列引脚分别连接到开发板上。
2. 根据按键模块的引脚定义,编写单片机程序进行按键的扫描。
通过循环检测每个行引脚和每个列引脚之间的电平变化,来判断按键是否被按下。
3. 在程序中可以通过LED等显示设备来显示按键是否被按下的状态。
4. 执行程序,观察按键是否可以正常检测和响应。
实验结果:
实验完成后,观察到按键的检测和响应正常,按下按键时,LED等显示设备可以正确显示按键被按下的状态。
经过实验,掌握了单片机按键的原理和按键的扫描方法,进一步提升了对单片机设备的理解和应用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系别
计算机系
班级
B140504
学号
B14050414
姓名
史锦峰
课程名称
单片机原理及应用
实验日期
2016.04.07
实验名称
行列பைடு நூலகம்键盘
成绩
实验目的:
熟悉uVision4编译软件,掌握C51编程的调试方法及行列式键盘的原理。
实验条件:计算机一台,Proteus和Keil C,实验箱。
char getkey(void) {
char key_scan[]={0xef,0xdf,0xbf,0x7f};
char i=0,j=0;
for(i=0;i<4;i++) {
P2=key_scan[i];
if((P2&0x0f)!=0x0f){
for(j=0;j<16;j++) {
if(key_buf[j]==P2) return j;
3.uVision4中编写和编译C51程序,并生成可执行文件;
4.在ISIS中加载可执行文件,通过仿真运行检验编程的正确性。
三、实验结果
1.电路原理图
图1电路原理图
2.程序调试方法
首先在Keil C编程软件里创建工程,编写代码并进行调试,生成hex文件,运行无语法错误后再与Proteus进行联机仿真,将hex文件加载到单片机模块中,单击菜单中的调试-开始\重新启动调试,正确无误后进行运行仿真。
}}}
return -1;
}
void main(void) {
char key=0;
P0=0x00;
while(1){
key=getkey();
if(key!=-1)
P0=~led_mod[key];
}}
实验总结:
本次实验遇到了一个问题,就是在运行中仿真结果是正确的,连接实验箱的时候,怎么都不正确。老师提示验箱是共阳极显示,而在Proteus中运行仿真结果是共阴极显示。然后我就在C51程序中对字模进行取反(P0=~led_mod[key]),最后重新把程序烧进开发板,并且在开发板上的显示结果正确。
一、实验内容
1.绘制非中断方式键盘接口电路原理图;
2.参照实例完成教材非中断行列式键盘C51语言程序的编译;
3.练习μVision4程序动态调试方法,实现非中断行列式键盘的功能;
4.观察ISIS仿真结果,完成实验报告。
二、实验步骤
1.提前阅读与实验相关的阅读材料;
2.参考P84页的实例7电路原理图,在ISIS中完成电路图的绘制;
3.仿真运行图
图2仿真运行图
5.源代码:
#include <reg51.h>
char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};