您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页单片机实验三 键盘检测控制实验

单片机实验三 键盘检测控制实验

来源:筏尚旅游网
昆明理工大学信息工程与自动化学院学生实验报告

( 2014 — 2015 学年 第 2 学期)

课程名称:嵌入式技术 开课实验室:信自楼402 2015年5月19日

年级、专业、班 计科122 学号 201210405204 实验项目名称 实验三 键盘实验 该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 教 该同学的实验能力: A.强 □ B.中等 □ C.差 □ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 师 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 评 实验过程是否详细记录: A.详细□ B.一般 □ C.没有 □ 语 教师签名: 姓名 邹华宇 指导教师 成绩 江虹 年 月 日 一、实验目的

掌握单片机系统中矩阵键盘的编程控制方法,学会实时程序的调试技巧。

二、实验原理

键盘是单片机应用中常用的输入设备,在应用系统中,操作人员可通过键盘向系统输入指令、地址和数据,实现简单的人机通信。

键盘实际上是一组按键开关的集合,平时总是处于断开状态,当按下键时它才闭合。按键在闭合和断开时,触点会存在抖动现象,抖动时间一般为5-10ms,如下图示:

键盘的处理主要涉及以下3个方面的内容:  按键的识别

所接I/O口线是高还是低电平(根据连接情况)

 抖动的消除

硬件消抖

软件消抖(延时)

 判断键值

独立式键盘 矩阵式键盘

实验板电路原理图如下:

三、实验内容

按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...

四、实验步骤

1、按实验要求在KeilC中创建项目,编辑、编译程序。 源代码:

#include

#define uint unsigned int #define uchar unsigned char

void init();//初始化子程序 void delay(uint);//延时子程序 void display(uint);//显示子程序 uint keyscan();//按键扫描子程序

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar temp;

uint num;

sbit duan=P2^6; sbit wei=P2^7;

void main() {

init(); while(1)

display(keyscan()); }

void init() {

num=0; P0=0xff; }

void delay(uint ms) {

uint x,y;

for(x=ms;x>0;x--) for(y=110;y>0;y--); }

void display(uint a) {

uchar bai,ge,shi; if(a==0) {

duan=1; P0=0x3f; duan=0; wei=1; P0=0xfe; wei=0; } else {

if(a<10) {

P0=0; duan=1;

P0=table[a]; duan=0;

P0=0xff ; wei=1; P0=0xfe; wei=0; P0=0x0 ; }

else if(a<100) {

shi=a/10; ge=a%10; duan=1;

P0=table[shi]; duan=0; wei=1; P0=0xfe; wei=0;

delay(1);

P0=0xff; duan=1;

P0=table[ge]; duan=0; wei=1; P0=0xfd; wei=0;

delay(1); P0=0xff; }

else if(a<1000) {

bai=a/100; shi=a%100/10; ge=a%10;

duan=1;

P0=table[bai]; duan=0; wei=1; P0=0xfe; wei=0;

delay(1);

P0=0xff; duan=1;

P0=table[shi]; duan=0; wei=1; P0=0xfd; wei=0;

delay(1); P0=0xff; duan=1;

P0=table[ge]; duan=0; wei=1; P0=0xfb; wei=0;

delay(1); P0=0xff;

} } }

uint keyscan() {

P3=0xfe; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(5); temp=P3;

if(temp!=0xf0) {

temp=P3;

switch(temp) {

case 0xee:num=1;break;

case 0xde:num=4;break; case 0xbe:num=9;break; case 0x7e:num=16;break; } }

while(temp!=0xf0) {

temp=P3;

temp=temp&0xf0;

} } P3=0xfd; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(5); temp=P3; temp=temp&0xf0; if(temp!=0xf0) {

temp=P3;

switch(temp) {

case 0xed:num=25;break; case 0xdd:num=36;break; case 0xbd:num=49;break; case 0x7d:num=64;break; } }

while(temp!=0xfd) temp=P3; } P3=0xfb; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(5); temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

temp=P3;

switch(temp) {

case 0xeb:num=81;break; case 0xdb:num=100;break;

case 0xbb:num=121;break; case 0x7b:num=144;break; } }

while(temp!=0xfb)

temp=P3; }

P3=0xf7; temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

delay(5); temp=P3;

temp=temp&0xf0; if(temp!=0xf0) {

temp=P3;

switch(temp) {

case 0xe7:num=169;break; case 0xd7:num=196;break; case 0xb7:num=225;break; case 0x77:num=256;break; } }

while(temp!=0xf7) temp=P3; }

return num; }

2、将编译生成的目标码文件(后缀为.Hex)下载到实验板电路中。 3、在实验板中运行程序,观察实验运行结果并记录。

五、实验总结

通过本次的实验充分了解了矩阵键盘的检测和数码管的显示。本次试验程序的基本思想为首先检测键盘的哪一行被按下,然后在检测此行的哪一列被按下。检测结束后根据被按下的键得到此键数值的平方。键盘检测函数将返回平方值。在显示函数中根据传进来的平方值进行判断位数,根据判断得到的位数进行个位,十位,百位的拆分显示。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务