按键及显示实验

合集下载

按键扫描实验报告

按键扫描实验报告

一、实验目的1. 理解按键扫描的基本原理,掌握按键扫描电路的设计方法。

2. 学习并运用单片机编程技术,实现按键的识别与处理。

3. 掌握按键防抖技术,提高按键识别的准确性。

4. 熟悉数码管显示电路的连接与编程,实现按键值的实时显示。

二、实验原理按键扫描是单片机应用中常见的一种输入方式,通过扫描电路检测按键状态,并转换为单片机可识别的信号。

本实验采用行列扫描法,通过单片机的I/O口输出低电平,逐行扫描按键,同时读取列线状态,判断是否有按键被按下。

三、实验设备1. 单片机实验板(如51单片机实验板)2. 按键(如按钮、触摸按键等)3. 数码管(如7段数码管)4. 电阻、电容等电子元件5. 编程软件(如Keil、IAR等)四、实验步骤1. 电路连接(1)将按键的行线连接到单片机的I/O口,列线连接到数码管的输入端。

(2)数码管的共阳极或共阴极连接到单片机的I/O口。

(3)在按键和数码管之间接入电阻和电容,实现防抖功能。

2. 编程实现(1)初始化单片机的I/O口,将行线设置为输出模式,列线设置为输入模式。

(2)编写按键扫描函数,逐行扫描按键,读取列线状态,判断是否有按键被按下。

(3)编写数码管显示函数,根据按键值显示对应的数字或字符。

(4)编写防抖函数,消除按键抖动干扰。

3. 实验测试(1)上电后,观察数码管显示是否正常。

(2)按下按键,观察数码管是否显示对应的数字或字符。

(3)多次按下按键,观察数码管显示是否稳定。

五、实验结果与分析1. 按键扫描结果实验结果表明,按键扫描电路能够正确识别按键状态,并转换为单片机可识别的信号。

按键按下时,数码管显示对应的数字或字符,按键释放时,数码管显示前一个数字或字符。

2. 防抖效果通过实验发现,防抖函数能够有效消除按键抖动干扰,提高按键识别的准确性。

在按键按下和释放过程中,数码管显示的数字或字符稳定,没有出现跳动现象。

3. 数码管显示实验结果表明,数码管显示电路能够正确显示按键值。

按键显示电路实验报告(3篇)

按键显示电路实验报告(3篇)

第1篇一、实验目的1. 熟悉按键电路的基本原理和设计方法。

2. 掌握按键电路的搭建和调试方法。

3. 了解按键电路在实际应用中的重要性。

4. 提高动手实践能力和电路分析能力。

二、实验原理按键显示电路是一种将按键输入转换为数字信号,并通过显示设备进行显示的电路。

本实验主要涉及以下原理:1. 按键原理:按键通过机械触点实现电路的通断,当按键被按下时,电路接通,产生一个低电平信号;当按键释放时,电路断开,产生一个高电平信号。

2. 译码电路:将按键输入的信号转换为相应的数字信号,以便后续处理。

3. 显示电路:将数字信号转换为可视化的信息,如LED灯、数码管等。

三、实验器材1. 电路板2. 按键3. 电阻4. LED灯5. 数码管6. 电源7. 基本工具四、实验步骤1. 按键电路搭建(1)根据电路原理图,在电路板上焊接按键、电阻、LED灯等元器件。

(2)连接电源,确保电路板供电正常。

2. 译码电路搭建(1)根据电路原理图,在电路板上焊接译码电路所需的元器件。

(2)连接译码电路与按键电路,确保信号传输正常。

3. 显示电路搭建(1)根据电路原理图,在电路板上焊接显示电路所需的元器件。

(2)连接显示电路与译码电路,确保信号传输正常。

4. 电路调试(1)检查电路连接是否正确,确保无短路、断路等问题。

(2)按下按键,观察LED灯或数码管显示是否正常。

(3)根据需要调整电路参数,如电阻阻值、电源电压等,以达到最佳显示效果。

五、实验结果与分析1. 实验结果通过实验,成功搭建了一个按键显示电路,按下按键后,LED灯或数码管能够正确显示数字信号。

2. 结果分析(1)按键电路能够正常工作,实现电路通断。

(2)译码电路能够将按键输入转换为相应的数字信号。

(3)显示电路能够将数字信号转换为可视化的信息。

六、实验总结1. 通过本次实验,掌握了按键电路的基本原理和设计方法。

2. 提高了动手实践能力和电路分析能力。

3. 了解了按键电路在实际应用中的重要性。

4-4按键

4-4按键
//调用 Keypad 类库功能函数 Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){ Serial.begin(9600);
}
void loop(){ char key = keypad.getKey();
if (key != NO_KEY){ Serial.println(key);
} }
5)下载程序
按照 arduino 教程中的程序下载方法将本程序下载到实验板中。
6)程序功能
将程序下载到实验板后,打开串口工具, 此时按下键盘上的某个键, 在串口工具上显 示该按键的值 。如图,我们按下“#”,则显示如下:
{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'},
{'*','0','#','D'} }; //连接 4*4 按键的行位端口,相应控制板的数字 IO 口 byte rowPins[ROWS] = {2,3,4,5}; //连接 4*4 按键的列位端口,相应控制板的数字 IO 口 byte colPins[COLS] = {6,7,8,9};
1)概述
4x4 按键显示实验
4*4 薄膜按键脚位,请看上图。 其原理图如下:
实验器件
z 4*4 薄膜按键:1 个 z 多彩面包板实验跳线:若干 z 面包板 : 1 个

06 12864LCD显示计算器键盘按键实验

06 12864LCD显示计算器键盘按键实验

目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。

设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。

重点就是各部分硬件的连接设计以及程序的编写。

本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。

将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。

1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。

3、分析一下此程序的各部分的功能,各零件的工作原理。

4、对程序进行调试,分析调试结果,观察并得出结论。

1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。

基于C51单片机的键盘及LCD显示

基于C51单片机的键盘及LCD显示
}
}
}
}
1.实验报告格式:
一.实验名称
二.实验目的
三.实验内容
四.设计思想
五.硬件设计
六.程序代码
七.参考文献
2.硬件电路原理图用PROTEL等软件画出。
附录:程序源代码:
附录1
#include "reg51.h"
#include "intrins.h"
#define THCO 0xee
#define TLCO 0x0
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
void InitLCD() //液晶初始化
{
send_command(0x30); //功能设置:一次送8位数据,基本指令集
2)ST7920控制器系列中文图形液晶模块资料手册
三、设计指标
利用实验板上提供的键盘电路,LCD显示电路,设计一人机界面,能实现以下功能:
1.LCD上显示“重庆科技学院”
2.按键至少包括0-9的数字键
3.LCD显示按键值
4.电子钟显示:时,分,秒(选作)
四、实验要求
1.以单片机为核心,设计4*4非编码键盘及LCD的硬件电路,画出电路原理图。
{
unsigned char hi=0;//汉字显示
if(x==0) send_command(0x80+y);//
else if(x==1) send_command(0x90+y);

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验设计内容:给8个按键键盘的每个键定义一个功能,从左到右按键一次按下时,分别显示数字1-8,当有两个及以上的按键按下时,显示数字9。

LCD初始显示个人学号,当有按键按下时,最后一位显示对应的数字。

实验程序:#include <reg51.h>sbit key=P0^6; //键盘公共线,见原理图sbit ls1=P0^2; //千位公共极sbit ls2=P0^3; //百位公共极sbit ls3=P0^4; //十位公共极sbit ls4=P0^5; //个位公共极unsigned char keyval; //读取的键值#define Dat P1 //数据输出端char a;char b[4]={0,3,3,0}; //初始值为学号后四位unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时----------------------------Delay(unsigned int t){ while(t--); }//显示----------------------------void Display(unsigned char mun){ unsigned char j;for(j=0;j<50;j++){ Dat=a;Dat=tab[b[0]]; //把得到7段显示码数据送P1端口ls1=0; //点亮千位Delay(100); //显示一会ls1=1; //关闭,显示下一位Dat=tab[b[1]];ls2=0; //点亮百位Delay(100);ls2=1;Dat=tab[b[2]];ls3=0; //点亮十位Delay(100);ls3=1; //个位Dat=tab[b[3]];ls4=0;Delay(100);ls4=1;}}Dat=0xff; //P1恢复为0xff}//--键盘扫描程序-------------------------------------- Scankey(){ unsigned char i;key=0; //拉低键盘公共线if(Dat!=0xff) //有键按下{ Delay(1000); //消抖动if(Dat!=0xff) //有键按下{ i=~Dat;a=Dat; //读取键盘状态,switch(i){ case 0x01: keyval=0x01;break; //K1case 0x02: keyval=0x02;break; //K2case 0x04: keyval=0x03;break; //K3case 0x08: keyval=0x04;break; //K4case 0x10: keyval=0x05;break; //K5case 0x20: keyval=0x06;break; //K6case 0x40: keyval=0x07;break; //K7case 0x80: keyval=0x08;break; //K8default: keyval=0x09;break; } //其它双键按下不处理,均为9 b[3]=b[2];b[2]=b[1];b[1]=b[0];b[0]=keyval;while(Dat!=0xff){key=1; //暂时关闭键盘,不干扰显示Display(keyval); //等待按键抬起key=0; //开启键盘检测}}}key=1; //释放键盘公共线}//--主程序--------------------------------------------------------- main(){while(1){ Display(keyval); //显示Scankey(); //键盘扫描}}。

实验四:矩阵按键与数码管显示

实验四:矩阵按键与数码管显示

switch(P2) { case(0X70): KeyValue=3;break; case(0XB0): KeyValue=2;break; case(0XD0): KeyValue=1;break; case(0XE0): KeyValue=0;break; } //测试行 P2=0X0F; switch(P2) { case(0X07): KeyValue=KeyValue+12;break; case(0X0B): KeyValue=KeyValue+8;break; case(0X0D): KeyValue=KeyValue+4;break; case(0X0E): KeyValue=KeyValue;break; } //此处是流程图中所缺少的部分请尝试理解与运用 while((a<50)&&(P2!=0x0F)) { Delay(1000); a++; } } } return KeyValue; }
图 4 数码管动态显示
实例:
B C D E F G H
RP1
RESPACK-8 P0.0 P0.1 P0.2 P0.3 P0.7 P0.6 P0.5 P0.4 P1.3 P1.2 P1.1 P1.0
C2
100pF
1 1
U1 X1
19 XTAL1 CRYSTAL P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17

单片机 矩阵键盘实验 实验报告

单片机 矩阵键盘实验 实验报告

单片机矩阵键盘实验实验报告
实验名称:单片机矩阵键盘实验
实验目的:掌握单片机矩阵键盘的原理和应用,能够使用单片机按键输入
实验内容:利用Keil C51软件,采用AT89C51单片机实现一个4x4的矩阵键盘,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。

实验步骤:
1、搭建实验电路,将矩阵键盘与单片机相连,连接好电源正负极,然后将电路焊接成一个完整的矩阵键盘输入电路。

2、打开Keil C51软件,新建一个单片机应用工程,然后编写代码。

3、通过代码实现对矩阵键盘输入的扫描功能,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。

4、编译代码,生成HEX文件,下载HEX文件到单片机中,将单片机与电源相连,然后就可以测试了。

5、测试完成后,根据测试结果修改代码,重新编译生成HEX 文件,然后下载到单片机中进行验证。

实验结果:
经过测试,实验结果良好,能够准确地输入按键的值,显示在液晶屏上。

实验感想:
通过这次实验,我深深地认识到了矩阵键盘技术的重要性以及应用价值,同时也更加深入了解单片机的工作原理和应用技术,这对我的学习和工作都有很好的帮助。

单片机按键实验报告

单片机按键实验报告

单片机按键实验报告篇一:单片机按键扫描实验报告键盘扫描一.实验目的(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:程序正常运行,但按键显示出现乱码解决:动态显示笔形码错误,并改正。

微机原理键盘扫描及显示设计实验

微机原理键盘扫描及显示设计实验

微机原理键盘扫描及显⽰设计实验⼀、实验名称:键盘扫描及显⽰设计实验⼆、实验⽬的1.学习按键扫描的原理及电路接法;2.掌握利⽤8255完成按键扫描及显⽰。

三、实验内容及步骤1. 实验内容编写程序完成按键扫描功能,并将读到的按键值依次显⽰在数码管上。

实验机的按键及显⽰模块电路如图1所⽰。

按图2连线。

图1 键盘及显⽰电路图2 实验连线2. 实验步骤(1)按图1接线;(2)键⼊:check命令,记录分配的I/O空间;(3)利⽤查出的地址编写程序,然后编译链接;(4)运⾏程序,观察数码管显⽰是否正确。

四、流程图五、源程序;Keyscan.asm;键盘扫描及数码管显⽰实验;***************根据CHECK配置信息修改下列符号值*******************IOY0 EQU 9800H ;⽚选IOY0对应的端⼝始地址;*****************************************************************MY8255_A EQU IOY0+00H*4 ;8255的A⼝地址MY8255_B EQU IOY0+01H*4 ;8255的B⼝地址MY8255_C EQU IOY0+02H*4 ;8255的C⼝地址MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址STACK1 SEGMENT STACKDW 256 DUP(?)DATA SEGMENTDTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS ;键值表,0~F对应的7段数码管的段位值CODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,3000H ;建⽴缓冲区,存放要显⽰的键值MOV AL,00H ;先初始化键值为0MOV [SI],ALMOV [SI+1],ALMOV [SI+2],ALMOV [SI+3],ALMOV DI,3003HMOV DX,MY8255_MODE ;初始化8255⼯作⽅式MOV AL,81H ;⽅式0,A⼝、B⼝输出,C⼝低4位输⼊OUT DX,ALBEGIN:CALL DIS ;显⽰刷新CALL CLEAR ;清屏CALL CCSCAN ;扫描按键JNZ GETKEY1 ;有键按下则跳置GETKEY1MOV AH,1 ;判断PC键盘是否有按键按下INT 16HJZ BEGIN ;⽆按键则跳回继续循环,有则退出QUIT:MOV AX,4C00H ;返回到DOSINT 21HGETKEY1:CALL DIS ;显⽰刷新CALL DALLYCALL DALLYCALL CCSCAN ;再次扫描按键JNZ GETKEY2 ;有键按下则跳置GETKEY2GETKEY2:MOV CH,0FEHMOV CL,00H ;设置当前检测的是第⼏列COLUM:MOV AL,CH ;选取⼀列,将X1~X4中⼀个置0 MOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_C ;读Y1~Y4,⽤于判断是哪⼀⾏按键闭合IN AL,DXL1:TEST AL,01H ;是否为第1⾏JNZ L2 ;不是则继续判断MOV AL,00H ;设置第1⾏第1列的对应的键值JMP KCODEL2:TEST AL,02H ;是否为第2⾏JNZ L3 ;不是则继续判断MOV AL,04H ;设置第2⾏第1列的对应的键值JMP KCODEL3:TEST AL,04H ;是否为第3⾏JNZ L4 ;不是则继续判断MOV AL,08H ;设置第3⾏第1列的对应的键值JMP KCODEL4:TEST AL,08H ;是否为第4⾏JNZ NEXT ;不是则继续判断MOV AL,0CH ;设置第4⾏第1列的对应的键值KCODE:ADD AL,CL ;将第1列的值加上当前列数,确定按键值CALL PUTBUF ;保存按键值PUSH AXKON:CALL DIS ;显⽰刷新CALL CLEAR ;清屏CALL CCSCAN ;扫描按键,判断按键是否弹起JNZ KON ;未弹起则继续循环等待弹起POP AXNEXT:INC CL ;当前检测的列数递增MOV AL,CHTEST AL,08H ;检测是否扫描到第4列JZ KERR ;是则跳回到开始处ROL AL,1 ;没检测到第4列则准备检测下⼀列MOV CH,ALKERR:JMP BEGINCCSCAN PROC NEAR ;扫描是否有按键闭合⼦程序MOV AL,00HMOV DX,MY8255_A ;将4列全选通,X1~X4置0 OUT DX,ALMOV DX,MY8255_CIN AL,DX ;读Y1~Y4NOT ALAND AL,0FH ;取出Y1~Y4的反值RETCCSCAN ENDPCLEAR PROC NEAR ;清除数码管显⽰⼦程序MOV DX,MY8255_B ;段位置0即可清除数码管显⽰MOV AL,00HOUT DX,ALRETCLEAR ENDPDIS PROC NEAR ;显⽰键值⼦程序PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显⽰MOV SI,3000HMOV DL,0F7HMOV AL,DLAGAIN:PUSH DXMOV DX,MY8255_AOUT DX,AL ;设置X1~X4,选通⼀个数码管MOV AL,[SI] ;取出缓冲区中存放键值MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值 MOV DX,MY8255_B OUT DX,AL ;写⼊数码管A~DpCALL DALLYINC SI ;取下⼀个键值POP DXTEST AL,01H ;判断是否显⽰完?JZ OUT1 ;显⽰完,返回ROR AL,1MOV DL,ALJMP AGAIN ;未显⽰完,跳回继续OUT1:POP AXRETDIS ENDPPUTBUF PROC NEAR ;保存键值⼦程序MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3003HGOBACK: RETPUTBUF ENDPDALLY PROC NEAR ;软件延时⼦程序PUSH CXMOV CX,00FFHD1: MOV AX,00FFHD2: DEC AXJNZ D2LOOP D1POP CXRETDALLY ENDPCODE ENDSEND START六、体会和感想通过这次的实验我了解到⾃⼰还有很多的不⾜,⽐如做实验的速度很慢,效率很低,思维不集中导致最后⽼师验收的时候没有来的及交,对书本的了解不是很透彻,也因此我决定下次实验的时候⼀定要好好地去思考,尽量在课外把实验看懂!。

实验三按键与显示实验

实验三按键与显示实验

.实验报告课程名称: 微机原理与接口设计 指导老师: 齐杭丽 成绩: 实验名称: 实验三 按键与显示实验 实验类型: 设计型 同组学生姓名:_________1. 实验目的① 熟练运用keil 环境对硬件接口进行调试。

② 掌握IO 扩展键盘的软硬件设计方法;③ 掌握数字转换成显示段码的软件译码方法; ④ 掌握静态显示的原理和相关程序的编写。

⑤ 掌握动态显示的原理和相关程序的编写; 2. 预习要求① 理解51单片机IO 实现独立式键盘扩展的工作原理。

② 理解8段数码管静态显示的电路工作原理,采用静态显示有何优缺点; ③ 理解8段数码管动态显示的电路工作原理,采用动态显示有何优缺点;④ 理解8段数码管静态显示的IO 控制方式及同步串行口控制方式如何实现软件设计; 3. 实验设备计算机 1台; ZDGDTH-1型80C51实验开发系统 1套; 2号导线 、8P 数据线 若干条。

4. 基础型实验内容① 查询式键盘和静态显示实验8个独立式键盘的电路如图2-1所示,串口扩展的6个静态数码管电路如图2-2所示。

设将P0口连接到键盘接口,则如果有键按下,相应的口线输出为低,否则输出为高。

单片机通过读取接口的状态,判断按下什么键。

有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。

8个按键的键值从右至左为0~7。

实验例程是查询按键操作,并将按下的键值在6个静态数码管上显示出来。

6个静态数码管与6片74LS164(串变并移位寄存器)连接,与单片机通过IO 口连接,实现串行静态显示的控制。

电路图:装 订 线R9BK E Y 0BK E Y 1BK E Y 2BK E Y 3BK E Y 4BK E Y 5BK E Y 6BK E Y 7B12345678JD2BK0-7R10B 10k *8R11B R12B R13B R14B R15B R16B P 9BK0P 10BK1P 11BK2P 12BK3P 13BK4P 14BK5P 15BK6P 16BK7VCC专业: 光电信息工程 姓名: 李俊杰 学号: 3071102719 日期: 2009.12.14地点: 东四606.图2-1 8个独立式按键电路图2-2 6位静态数码管显示接口电路DBUF EQU 30HDAT EQU P3.0CLK EQU P3.1ORG 0000HL0: MOV P1, #0FFHL1: MOV A, P1CJNE A, #0FFH,KEYPUTSJMP L1KEYPUT: CJNE A,#0FEH,NEXT1SJMP K0NEXT1: CJNE A,#0FDH,NEXT2SJMP K1……K0: MOV B,#00HLCALL DISPLJMP L0K1: MOV B,#01HLCALL DISPLJMP L0……LJMP L0DISP: MOV DBUF, BMOV DBUF+1,BMOV DBUF+2,BMOV DBUF+3,BMOV DBUF+4,BMOV DBUF+5,BMOV R0,#DBUFMOV DPTR,#TABMOV R2,#06HDP0: MOV A,@R0MOVC A,@A+DPTRMOV R3,#08HDP1: RLC AMOV DAT,CCLR CLKSETB CLKDJNZ R3,DP1INC R0DJNZ R2,DP0RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH ; 0,1,2,3,4,5DB 7DH,07H,7FH,6FH,77H,7CH ; 6,7,8, 9,A,BDB 58H,5EH,79H,71H,00H,40H ; C,D,E,F, ,-END②动态显示实验6位动态数码管显示的接口电路设计如图2-3所示,假设P0口输出显示的段码,P2口输出位码,用8P数据线将80C51/C8051F020MCU模块的JD0(P0口)、JD2(P2口)分别与A7区的JD1A7、JD2A7相连;A7区的电源短路帽JD5A7打到右端。

按键控制实验报告

按键控制实验报告

按键控制实验报告按键控制实验报告一、实验目的本实验旨在让学生掌握按键控制的基本原理和方法,学会使用按键控制模块实现简单的控制功能。

二、实验原理按键控制是通过检测按键的状态来控制电路的工作。

按键控制模块内部一般包含有按键输入电路和微控制器,通过微控制器检测按键的状态,从而控制输出电路的工作。

三、实验步骤1.准备实验器材:按键控制模块、LED灯、杜邦线、面包板等。

2.将按键控制模块连接到面包板上,并将LED灯连接到按键控制模块的输出端。

3.通过杜邦线将按键控制模块的输入端连接到面包板上的按键上。

4.给按键控制模块供电,并使用串口调试助手与微控制器进行通信。

5.编写程序,实现按键控制LED灯的亮灭。

具体程序代码如下:#include <reg52.h>sbit led = P1^0; // LED灯连接在P1.0口sbit key = P1^1; // 按键连接在P1.1口void delay(unsigned int t) // 延时函数{while(t--);}void main(){while(1){if(key == 0) // 检测到按键按下{delay(100); // 延时去抖动if(key == 0) // 再次检测按键状态{led = ~led; // 控制LED灯的亮灭while(key == 0); // 等待按键松开}}}}6.将程序下载到微控制器中,并运行程序。

此时,按下按键,LED灯的状态将会改变。

四、实验结果与分析通过本次实验,我们成功地实现了按键控制LED灯的亮灭。

按下按键时,LED 灯的状态会发生改变。

实验结果表明,我们的程序设计是正确的,按键控制模块也能够正常工作。

在实验过程中,我们也遇到了一些问题。

首先,在连接电路时,需要注意按键控制模块的输入输出端口的接线方式,以免出现错误。

其次,在编写程序时,需要考虑按键的去抖动问题,以避免按键的误判。

最后,在下载程序时,需要注意选择与微控制器型号相匹配的下载方式和下载口,以保证程序的正确下载和运行。

按键功能实验报告总结(3篇)

按键功能实验报告总结(3篇)

第1篇一、实验背景按键作为电子设备中常见的输入装置,其功能丰富,应用广泛。

本实验旨在通过设计和实现一系列按键功能,加深对按键工作原理的理解,并提高电子设计实践能力。

二、实验目的1. 掌握按键的基本原理和电路设计方法。

2. 熟悉按键在不同应用场景下的功能实现。

3. 培养电子设计实践能力,提高问题解决能力。

三、实验内容1. 实验器材:51单片机最小核心电路、按键、LED灯、电阻、电容、面包板等。

2. 实验内容:(1)单按键控制LED灯闪烁(2)按键控制LED灯点亮与熄灭(3)按键控制LED灯亮度调节(4)按键实现数字时钟调整(5)按键实现多功能计数器(6)按键实现密码输入与验证四、实验步骤1. 根据实验要求,设计电路图,并选择合适的元器件。

2. 使用面包板搭建实验电路,包括单片机、按键、LED灯、电阻、电容等。

3. 编写程序,实现按键功能。

4. 对程序进行调试,确保按键功能正常。

5. 实验完成后,撰写实验报告。

五、实验结果与分析1. 单按键控制LED灯闪烁实验结果:按下按键,LED灯闪烁;松开按键,LED灯停止闪烁。

分析:本实验通过单片机定时器实现LED灯的闪烁。

当按键按下时,定时器开始计时;当定时器达到设定时间后,LED灯点亮;定时器继续计时,当达到设定时间后,LED灯熄灭。

如此循环,实现LED灯的闪烁。

2. 按键控制LED灯点亮与熄灭实验结果:按下按键,LED灯点亮;再次按下按键,LED灯熄灭。

分析:本实验通过单片机的I/O口控制LED灯的点亮与熄灭。

当按键按下时,单片机将I/O口置为高电平,LED灯点亮;当按键再次按下时,单片机将I/O口置为低电平,LED灯熄灭。

3. 按键控制LED灯亮度调节实验结果:按下按键,LED灯亮度逐渐增加;松开按键,LED灯亮度保持不变。

分析:本实验通过单片机的PWM(脉宽调制)功能实现LED灯亮度的调节。

当按键按下时,单片机调整PWM占空比,使LED灯亮度逐渐增加;松开按键后,PWM占空比保持不变,LED灯亮度保持不变。

按键控制实验报告

按键控制实验报告

键控计数值显示一、实验目的(1)熟悉Nios II系统构建,并选择简单、合适的系统(2)学习按键中断的控制方法(3)用HDL文本输入方法建立顶层模块、flash编程(4)能够自行改写程序二、实验设备与器件Quartus II 软件、EP4CE115F29实验箱三、实验方案设计实验可实现的功能本实验要求实时显示计数器输出的0~7F计数值,显示终端为八位LED、七段数码管和LCD显示器。

由KEY1~KEY3三个按键选择显示器件。

长按KEY1键时,只在八位LED上进行显示;长按KEY2键时,只在LCD显示器上进行显示;长按KEY3键时,只在七段数码管上进行显示;无键按下时则不显示, 但计数功能保持;KEY0按下时清零。

硬件系统(HDL文本)//=================================================== ====// This code is generated by Terasic System Builder//=================================================== ====module Test_1(//////// CLOCK //////////CLOCK_50,//////// LED //////////LEDG,//////// KEY //////////KEY,CLR,////////COUNT////////////COUNT,//////// SEG7 //////////HEX0,HEX1,//////// LCD ////////// LCD_BLON,LCD_DATA,LCD_EN,LCD_ON,LCD_RS,LCD_RW,//////// SDRAM ////////// DRAM_ADDR, DRAM_BA,DRAM_CAS_N, DRAM_CKE, DRAM_CLK, DRAM_CS_N, DRAM_DQ,DRAM_DQM, DRAM_RAS_N, DRAM_WE_N,//////// Flash //////////FL_ADDR,FL_CE_N,FL_DQ,FL_OE_N,FL_RST_N,FL_RY,FL_WE_N,FL_WP_N,);//=================================================== ====// PARAMETER declarations//=================================================== ====//=================================================== ====// PORT declarations//=======================================================//////////// CLOCK //////////input CLOCK_50;//////////// LED //////////output [7:0] LEDG;//////////// KEY //////////input [2:0] KEY;input CLR;////////////COUNT/////////////input [7:0] COUNT//////////// SEG7 //////////output [6:0] HEX0;output [6:0] HEX1;//////////// LCD //////////output LCD_BLON; inout [7:0] LCD_DATA;output LCD_ON; output LCD_RS; output LCD_RW;//////////// SDRAM //////////output [12:0] DRAM_ADDR; output [1:0] DRAM_BA; output DRAM_CAS_N; output DRAM_CKE; output DRAM_CLK; output DRAM_CS_N; inout [31:0] DRAM_DQ; output [3:0] DRAM_DQM; output DRAM_RAS_N; output DRAM_WE_N;//////////// Flash //////////output [22:0] FL_ADDR;output FL_CE_N; inout [7:0] FL_DQ; output FL_OE_N;input FL_RY;output FL_WE_N;output FL_WP_N;//=================================================== ====// REG/WIRE declarations//=================================================== ====//////// 7-SEG ////////////////wire[2:0] norkey;wire[7:0] count_in;wire[7:0] data;//=================================================== ====// Structural coding//=======================================================wire reset_n;assign reset_n = 1'b1;kernel kernel_inst(// 1) global signals:.clk_50(CLOCK_50),.reset_n(reset_n),.sdram_clk(DRAM_CLK),.sys_clk(clk_sys), ///////////////////////// the_key.in_port_to_the_key(~KEY),//the_count.in_port_to_the_count(count_in[7:0]),// the_lcd.LCD_E_from_the_lcd(LCD_EN),.LCD_RS_from_the_lcd(LCD_RS),.LCD_RW_from_the_lcd(LCD_RW),.LCD_data_to_and_from_the_lcd(LCD_DA TA),// the_led.out_port_from_the_led(LEDG),// the_sdram.zs_addr_from_the_sdram(DRAM_ADDR),.zs_ba_from_the_sdram(DRAM_BA),.zs_cas_n_from_the_sdram(DRAM_CAS_N ),.zs_cke_from_the_sdram(DRAM_CKE),.zs_cs_n_from_the_sdram(DRAM_CS_N),.zs_dq_to_and_from_the_sdram(DRAM_D Q),.zs_dqm_from_the_sdram(DRAM_DQM),.zs_ras_n_from_the_sdram(DRAM_RAS_N ),.zs_we_n_from_the_sdram(DRAM_WE_N),// the_seg7.out_port_from_the_seg7(data),.out_port_from_the_en_seg(en),// the_tri_state_bridge_flash_avalon_slave.address_to_the_cfi_flash(FL_ADDR),.read_n_to_the_cfi_flash(FL_OE_N),.select_n_to_the_cfi_flash(FL_CE_N),.tri_state_bridge_data(FL_DQ),.write_n_to_the_cfi_flash(FL_WE_N),);clk_div clk_div(.clkin(clk_sys),.clk_1KHz(clk_1KHz),.clk_1Hz(clk_1Hz));mydecoder_7seg yima(.clk(clk_1KHz),.segmenth(HEX1),.segmentl(HEX0),.data(data),.en(en));// .lowdata(data[3:0])); counter couter(.clk(clk_1Hz),.clr(CLR),//anjian qingling.count(count_in[7:0]));// Flash Configassign FL_RST_N = reset_n;assign FL_WP_N = 1'b1;///////////////////////////////////////////// LCD configassign LCD_BLON = 0; // not supportedassign LCD_ON = 1'b1; // alwasy onendmodule系统框图实验程序#include"count.h" //关于LCD的相关定义,控制LCD 的输出格式#include <unistd.h>#include <stdio.h>#include"system.h"#include"altera_avalon_pio_regs.h"#include"alt_types.h"#include"sys/alt_irq.h"volatile int a=0;volatile char b;unsigned char count1,count2,count3;static void KeyDown_interrupts(void* context,alt_32 id) //中断函数{IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0);//响应中断后,将中断响应位复位;b=IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE); //读取中断响应值switch(b){case 0x1: //七段数码管显示IOWR_ALTERA_AVALON_PIO_DATA(EN_SEG_BASE,1);//IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);count1=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE);IOWR_ALTERA_AVALON_PIO_DATA(SEG7_BASE,count1);break;case 0x2: //LCD显示count2=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE); printf("%02x", count2);//直接用标准输出函数表示break;case 0x4://LED灯显示IOWR_ALTERA_AVALON_PIO_DATA(EN_SEG_BASE,0);count3=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE);IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,count3);break;default: //无按键时,正常计数,但无显示break;}}void InitPIO(void)//中断初始化{IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0x7);//开中断,允许后三位开中断IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0x0);//中断响应后复位,防止中断一直响应。

汽车按键应用实验报告(3篇)

汽车按键应用实验报告(3篇)

第1篇一、实验目的本次实验旨在深入了解汽车按键的工作原理、设计特点以及在汽车电子系统中的应用。

通过实际操作和理论分析,掌握汽车按键的电路设计、功能实现以及用户体验优化等方面的知识。

二、实验内容1. 汽车按键类型及特点(1)机械按键:采用机械触点进行开关,具有结构简单、成本低廉、耐用性好等特点。

(2)电容式按键:通过检测电容变化实现开关,具有防水、防尘、触感好等特点。

(3)触摸感应按键:通过检测触摸信号实现开关,具有无机械磨损、响应速度快等特点。

2. 汽车按键电路设计(1)机械按键电路:主要包括按键、电阻、电容、微控制器等元件。

按键与电阻、电容等元件连接,通过微控制器控制电路通断。

(2)电容式按键电路:主要包括按键、电容、微控制器等元件。

按键与电容连接,通过微控制器检测电容变化实现开关。

(3)触摸感应按键电路:主要包括触摸感应芯片、微控制器等元件。

触摸感应芯片检测触摸信号,通过微控制器控制电路通断。

3. 汽车按键功能实现(1)开关功能:按键通过电路连接,实现开关功能。

(2)功能扩展:通过按键组合,实现多种功能。

(3)人机交互:按键设计考虑用户体验,实现直观、便捷的操作。

4. 汽车按键在电子系统中的应用(1)仪表盘按键:用于控制仪表盘显示内容,如转速、油量等。

(2)中控台按键:用于控制空调、多媒体、导航等功能。

(3)门把手按键:用于控制车门开关。

(4)座椅按键:用于调整座椅位置。

三、实验步骤1. 准备实验器材:汽车按键、电阻、电容、微控制器、电源等。

2. 组装汽车按键电路:按照电路图连接电阻、电容、微控制器等元件。

3. 编写程序:编写微控制器程序,实现按键功能。

4. 测试与调试:测试按键功能,调试程序。

5. 分析与总结:分析实验结果,总结实验经验。

四、实验结果与分析1. 按键电路设计合理,按键功能实现。

2. 通过编程实现按键功能扩展,提高用户体验。

3. 按键在电子系统中的应用广泛,具有实际意义。

五、实验结论本次实验成功实现了汽车按键在电子系统中的应用,掌握了汽车按键电路设计、功能实现以及用户体验优化等方面的知识。

按键实验现象

按键实验现象

按键实验现象
1.按键状态显示:仅有1、2、3、4这四个开关能对LED灯进行控制。

而其他开关没有控制作用。

2.按键移位:开关1和2能对Led灯进行控制,并且按键一次,灯按顺序点亮一次。

3.按钮控制LED:只有开关1时才有第8盏灯点亮。

受按钮控制。

4.按下亮再按熄灭:长时间按按键,才会出现灯的点亮和熄灭。

5.读按键:按键一次,灯会按二进制递增点亮。

个人认为这个变化频率太快。

可以适当改进。

6.花样灯:此时开关1—4不处于控制状态。

按下开关5,灯从1到8依次点亮熄灭,呈现流水状态,最后停留在第8盏灯处。

按下开关6,偶次灯亮瞬间变化为奇数次灯亮,并呈现持久亮灯的现象。

按下开关7,所有灯熄灭。

按下开关8,灯从8到1依次点亮熄灭。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验原理及电路1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。

因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。

,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。

驱动模块具有八位数据总线,外加一些电源接口和控制信号。

而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。

由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。

实验电路图二、功能说明设计并实现一4×4键盘的接口,键盘与1602显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送1602显示,键盘采用4×4键盘。

将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个1602显示出来,当按下下一个按键时便将这个按键的编号1602上显示出来实验框图四、实验代码#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define lcd_data P3sbit lcd_EN=P2^2;sbit lcd_RW=P2^1;sbit lcd_RS=P2^0;uchar key,a;uchar sys_time1[]="good";uchar sys_time2[]="morning!";uchar sys_time3[]="play";uchar sys_time4[]="basketball!";uchar sys_time5[]="study";uchar sys_time6[]="hard!";unsigned char code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xB7,0x77 };void delayms(uint ms){uchar t;while(ms--){for(t=0;t<120;t++);}}void delay_20ms(void){uchar i,temp;for(i = 20;i > 0;i--){temp = 248;while(--temp);temp = 248;while(--temp);}}void delay_38us(void){ uchar temp;temp = 18;while(--temp);}void delay_1520us(void){ uchar i,temp;for(i = 3;i > 0;i--){temp = 252;while(--temp);}}uchar lcd_rd_status( ) /*读取lcd1602的状态,主要用于判断忙*/{uchar tmp_sts; //声明变量tmp_stslcd_data = 0xff; //初始化P3口lcd_RW = 1; //RW =1 读lcd_RS = 0; //RS =0 命令,合起来表示读命令(状态)lcd_EN = 1; //EN=1,打开EN,LCD1602开始输出命令数据,100nS 之后命令数据有效tmp_sts = lcd_data; //读取命令到tmp_stslcd_EN = 0; //关掉LCD1602lcd_RW = 0; //把LCD1602设置成写return tmp_sts; //函数返回值tmp_sts}void lcd_wr_com(uchar command ) /*写一个命令到LCD1602*/{while(0x80&lcd_rd_status()); //写之前先判断LCD1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 0; //RW=0,RS=0 写命令lcd_data = command; //把需要写的命令写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入}void lcd_wr_data(uchar wdata ) /*写一个显示数据到lcd1602*/{while(0x80&lcd_rd_status()); //写之前先判断lcd1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 1; //RW=0,RS=1 写显示数据lcd_data = wdata ; //把需要写的显示数据写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入lcd_RS = 0;}void Init_lcd(void) /*初始化lcd1602*/{delay_20ms(); //调用延时lcd_wr_com(0x38); //设置16*2格式,5*8点阵,8位数据接口delay_38us(); //调用延时lcd_wr_com(0x0c); //开显示,不显示光标delay_38us(); //调用延时lcd_wr_com(0x01); //清屏delay_1520us(); //调用延时lcd_wr_com(0x06); //显示一个数据后光标自动+1}void show(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time1[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time1[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time2[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time2[i]); //送显示数据}}void show1(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time3[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time3[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time4[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time4[i]); //送显示数据}}void show2(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time5[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time5[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time6[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time6[i]); //送显示数据}}uchar rdkey() //键盘扫描函数{uchar scan1,scan2,keycode,j;P1=0x0f; //列线置低电平,行线输入状态scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //判断是否有按键按下{delayms(30); //调用延时程序去抖动scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //二次判断是否有按键按下{P1=0xf0; //列线作输入,行线置低电平scan2=P1; //读入列值keycode=scan1|scan2; //组合成键编码for(j=0;j<=15;j++) //循环16次{if(keycode== key_code[j])//查表得键值{key=j; //算出最后键值return(key); //返回键值}}}}else P1=0xff;return (16);}void main(){while(1){P1=0x0f;if((P1&0x0f)!=0x0f) //判断是否有键按下{a=rdkey(); //调用键盘扫描函数switch (a){case 0: show(); break;case 1: show1();break;case 2: show2();break;}}}}五、实验过程本实验仪提供了一个4×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

在判断有键按下后,要有一定的延时,防止键盘抖动。

判断完是哪个键按下后,就通过编程,使1602显示对应的内容。

六、实验小结我很清楚这个实验的目的,表面上我们最终仅仅只是实现了设计要求的基本功能,但我觉得,这次课程设计更加深刻的意义是——从这样一个最基本,简单的实验中,从这样一个完整的过程中我了解一种系统设计的流程,甚至说是一种思路,思维。

从最初拿到题目,分析设计要求以及实现的初步思路,然后去查阅资料进行更加具体的设计这次实验无疑要求我们团队协作,互相配合并且整体上比较全面的统筹设计。

于是,初步规划后,我们开始将系统要实现功能的各个模块单独开来用PROTEUS仿真,并最终将各个模块组合后整体调试。

整个过程中我们在仿真上花费了较长时间,因为知道仿真成功是实现真正硬件电路的基础,仿真是从根本上检验设计者的设计逻辑以及思路的,很好的仿真才能使得设计系统在实现要求功能的基础上更加稳定、简单。

在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。

相关文档
最新文档