数码管显示4×4矩阵键盘的键盘号 - 硬件的

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

《单片机原理及应用课程设计》报告

——数码管显示4×4矩

阵键盘的键盘号

专业:电子信息科学与技术

班级:电科0911

姓名:冯卫蓉

学号:0920108133

指导教师:黄伟军

2012年5月15日

1、课程设计目的

1.1巩固和加深对单片机原理和接口技术知识的理解;

1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;

1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;

1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;

1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。

2、课程设计要求

单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。

3、硬件设计

3.1 设计思想

分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。则本系统主要由以下几大模块构成:

显示模块,共阴极LED数码管;

输入模块,4X4矩阵键盘;

3.2主要元器件介绍

LOGO51Var1.1 开发板

3.3 功能电路介绍

一、矩阵键盘电路

二、八位数码管显示

三、主芯片电路

4、软件设计

4.1 设计思想

通过对矩阵键盘的逐行扫描,来获得所按下键的键盘号,最终通过数码管显示出来。

4.2软件流程图

开始

初始化

结束,返回

若有按键按下,显示键盘号

扫描键盘第一行

若无按键按下

扫描键盘第二行

若无按键按下

扫描键盘第三行

若无按键按下

扫描键盘第四行

若无按键按下

结束,返回

4.3 源程序

#include

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0};

uchar num,temp,num1;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

uchar keyscan();

void main()

{

P1=0xf8;

num=17;

while(1)

{

P2=table[keyscan()-1] ;

}

}

uchar keyscan()

{

P0=0xfe;

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P0;

switch(temp)

{

case 0xee:num=1;

break;

case 0xde:num=2;

break;

case 0xbe:num=3;

break;

case 0x7e:num=4;

break;

}

while(temp!=0xf0)

{

temp=P0;

temp=temp&0xf0;

}

}

}

P0=0xfd;

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P0;

switch(temp)

{

case 0xed:num=5;

break;

case 0xdd:num=6;

break;

case 0xbd:num=7;

break;

case 0x7d:num=8;

break;

}

while(temp!=0xf0)

{

temp=P0;

temp=temp&0xf0;

}

}

}

P0=0xfb;

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P0;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P0;

switch(temp)

{

case 0xeb:num=9;

break;

case 0xdb:num=10;

break;

case 0xbb:num=11;

break;

case 0x7b:num=12;

break;

}

while(temp!=0xf0)

{

temp=P0;

temp=temp&0xf0;

相关文档
最新文档