单片机阵列式键盘实验C语言,单片机4×4矩阵式键盘的课程设计
一、实验目的
1.掌握4×4矩阵式键盘程序识别原理。
2.掌握4×4矩阵式键盘按键的设计方法。
二、设计原理
(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键 “0-F”的序号。
(2)键盘中对应按键的序号排列如图14.1所示。
三、参考电路
图14.2 4×4矩阵式键盘识别电路原理图
图14.1 4×4键盘0-F显示
图14.3 4×4矩阵式键盘识别程序流程图
四、电路硬件说明
(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。
(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
五、程序设计内容
(1)4×4矩阵键盘识别处理 。
(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
六、程序流程图(如图14.3所示)
七、汇编源程序
;;;;;;;;;;定义单元;;;;;;;;;;
COUNT EQU 30H
;;;;;;;;;;入口地址;;;;;;;;;;
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
;;;;;;;;;;主程序入口;;;;;;;;;;
ORG 0100H
START: LCALL CHUSHIHUA
LCALL PANDUAN
LCALL XIANSHI
LJMP START
;;;;;;;;;;初始化程序;;;;;;;;;;
CHUSHIHUA: MOV COUNT,#00H
RET
;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;;
PANDUAN: MOV P3,#0FFH
CLR P3.4
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ SW1
LCALL DELAY10MS
JZ SW1
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,K1
MOV COUNT,#0
LJMP DK
K1: CJNE A,#0DH,K2
MOV COUNT,#4
LJMP DK
K2: CJNE A,#0BH,K3
MOV COUNT,#8
LJMP DK
K3: CJNE A,#07H,K4
MOV COUNT,#12
K4: NOP
LJMP DK
SW1: MOV P3,#0FFH
CLR P3.5
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ SW2
LCALL DELAY10MS
JZ SW2
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,K5
MOV COUNT,#1
LJMP DK
K5: CJNE A,#0DH,K6
MOV COUNT,#5
LJMP DK
K6: CJNE A,#0BH,K7
MOV COUNT,#9
LJMP DK
K7: CJNE A,#07H,K8
MOV COUNT,#13
K8: NOP
LJMP DK
SW2: MOV P3,#0FFH
CLR P3.6
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ SW3
LCALL DELAY10MS
JZ SW3
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,K9
MOV COUNT,#2
LJMP DK
K9: CJNE A,#0DH,KA
MOV COUNT,#6
LJMP DK
KA: CJNE A,#0BH,KB
MOV COUNT,#10
LJMP DK
KB: CJNE A,#07H,KC
MOV COUNT,#14
KC: NOP
LJMP DK
SW3: MOV P3,#0FFH
CLR P3.7
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ SW4
LCALL DELAY10MS
JZ SW4
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,KD
MOV COUNT,#3
LJMP DK
KD: CJNE A,#0DH,KE
MOV COUNT,#7
LJMP DK
KE: CJNE A,#0BH,KF
MOV COUNT,#11
LJMP DK
KF: CJNE A,#07H,KG
MOV COUNT,#15
KG: NOP
LJMP DK
SW4: LJMP PANDUAN
DK: RET
;;;;;;;;;;显示程序;;;;;;;;;;
XIANSHI: MOV A,COUNT
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
SK: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ SK
RET
;;;;;;;;;;10ms延时程序;;;;;;;;;;
DELAY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;;;;;;;;;;200ms延时程序;;;;;;;;;;
DELAY: MOV R5,#20
LOOP: LCALL DELAY10MS
DJNZ R5,LOOP
RET
;;;;;;;;;;共阴码表;;;;;;;;;;
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
;;;;;;;;;;结束标志;;;;;;;;;;
END
八、C语言源程序
#include
unsigned char code table[]={0x3f,0x66,0x7f,0x39,
0x06,0x6d,0x6f,0x5e,
0x5b,0x7d,0x77,0x79,
0x4f,0x07,0x7c,0x71};
void main(void)
{ unsigned char i,j,k,key;
while(1)
{ P3=0xff; //给P3口置1//
P3_4=0; //给P3.4这条线送入0//
i=P3;
i=i&0x0f; //屏蔽低四位//
if(i!=0x0f) //看是否有按键按下//
{ for(j=50;j>0;j--) //延时//
for(k=200;k>0;k--);
if(i!=0x0f) //再次判断按键是否按下//
{ switch(i) //看是和P3.4相连的四个按键中的哪个//
{ case 0x0e:
key=0;
break;
case 0x0d:
key=1;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=3;
break;
}
P0=table[key]; //送数到P0口显示//
}
}
P3=0xff;
P3_5=0; //读P3.5这条线//
i=P3;
i=i&0x0f; //屏蔽P3口的低四位//
if(i!=0x0f) //读P3.5这条线上看是否有按键按下//
{ for(j=50;j>0;j--) //延时//
for(k=200;k>0;k--);
i=P3; //再看是否有按键真的按下//
i=i&0x0f;
if(i!=0x0f)
{ switch(i) //如果有,显示相应的按键//
{ case 0x0e:
key=4;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=7;
break;
}
P0=table[key]; //送入P0口显示//
}
}
P3=0xff;
P3_6=0; //读P3.6这条线上是否有按键按下//
i=P3;
i=i&0x0f;
if(i!=0x0f)
{ for(j=50;j>0;j--)
for(k=200;k>0;k--);
i=P3;
i=i&0x0f;
if(i!=0x0f)
{ switch(i)
{ case 0x0e:
key=8;
break;
case 0x0d:
key=9;
break;
case 0x0b:
key=10;
break;
case 0x07:
key=11;
break;
}
P0=table[key];
}
}
P3=0xff;
P3_7=0; //读P3.7这条线上是否有按键按下//
i=P3;
i=i&0x0f;
if(i!=0x0f)
{ for(j=50;j>0;j--)
for(k=200;k>0;k--);
i=P3;
i=i&0x0f;
if(i!=0x0f)
{ switch(i)
{ case 0x0e:
key=12;
break;
case 0x0d:
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
P0=table[key];
}
}
}
}
九、注意事项
在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。
单片机阵列式键盘实验C语言,单片机4×4矩阵式键盘的课程设计相关推荐
- 查询式键盘实验c语言,单片机实验上机--实验十七查询式键盘实验.doc
实验十七 查询式键盘实验 一.实验目的 1.掌握键盘和显示器的接口方法和编程方法 2.掌握键盘和八段码显示器的工作原理 3.静态显示的原理和相关程序的编写 二.实验说明 本实验提供了8个按钮的小键盘, ...
- 独立式键盘实验c语言,单片机设计报告—独立式键盘控制的4级流水灯.doc
单片机设计报告-独立式键盘控制的4级流水灯 单片机结题报告 独立式键盘控制的4级流水灯 班 级 姓 名 吴泽宇 学 号 2008405340 一.任务目的: 通过采用单片机制作一个独立式键盘控制的4级 ...
- 单片机实例14——4×4矩阵式键盘识别技术(硬件电路图+汇编程序+C语言程序)
14. 4×4矩阵式键盘识别技术 1. 实验任务 如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线:在数码管上显示每个按键 ...
- 代写python期末作业价格_代写program留学生作业、代做Python程序语言作业、代写Python课程设计作业...
代写program留学生作业.代做Python程序语言作业.代写Python课程设计作业 日期:2019-11-29 12:55 Completing the Final Project - Pyth ...
- 查询式键盘实验c语言,查询式键盘与阵列式键盘实验.doc
查询式键盘与阵列式键盘实验 PAGE \* MERGEFORMAT 1 论 文 提 要 在大部分嵌入式系统中,人机交互界面是必不可少的一个重要部分,人机交互界面的设计往往占据很大一部分工作.人机交互界 ...
- 单片机并口应用实验c语言,1单片机并口简单应用(流水灯).docx
试验1单片机并口简单应用(流水灯) 实验目的 1.了解单片机C语言程序的基本结构 2.了解单片机C语言程序的设计和调试方法 3.掌握顺序控制程序的简单编程 4.熟悉51单片机的端口使用 实验仪器 单片 ...
- 山东大学单片机原理与应用实验 C语言程序实验
一.实验题目 C语言程序实验 二.试验要求 片内RAM30H开始的32个单元中分布着随机的有符号8位二进制数,按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据 ...
- pc机串口通讯实验c语言,单片机实验六 单片机与PC机串口通讯
实验报告六 实验名称:单片机与PC机串口通讯 实验目的 : 1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制. 2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议. 3.了解PC机通讯 ...
- p1口输入 输出实验C语言,单片机P1口输入输出实验单片机P1口输入输出实验.ppt
单片机P1口输入输出实验单片机P1口输入输出实验 单片机I/O口输入输出实验 (或单片机数字量输入输出实验);单片机P1口输入输出实验 ;2.实验要求(1).2)为必做,3)为选做) 3) P1口作输 ...
- 单片机io口的控制实验c语言,单片机io口控制实验报告
<单片机io口控制实验报告>由会员分享,可在线阅读,更多相关<单片机io口控制实验报告(5页珍藏版)>请在人人文库网上搜索. 1.单片机io口控制实验报告 精品文档,仅供参考单 ...
最新文章
- Redis学习(4)-数据类型set和zset
- TikTok游戏话题浏览上涨,预示出海新机会
- 004_Bean标签
- sdut 2139BFS
- 特征训练、预测一致性管理工具:开源项目Feast
- 大剑无锋之了解什么是CAP吗?【面试推荐】
- 根据不同地区的名称显示不同的页面
- Silverlight语音朗读
- Android/Linux之procrank查内存工具
- Linux文件的基本属性
- 生活情景英语:英语国家生存英语精选
- python汉化版下载-Python中文版
- 安卓支持AES 256加密解密
- ads1115应用电路及驱动程序
- 数据分析 | 多元线性回归
- 正则表达式 第一次碰到某个特定字符就返回
- Karplus-Strong Algorithm 弦乐器模拟 吉他弦乐器发声原理 泛音 乐理概述
- 红外对管应该如何选择比较好
- NBA常规赛总得分排行榜(数据截止至11年4月14日)
- 模拟浏览器整理电影榜单
热门文章
- 预测大盘最准确的指标_通达信大盘预测指标,通达信副图指标,需要写一个关于大盘每日成交量的指标高手请进啊...
- 招聘PHP聚合系统,Thinkphp5开发OA办公系统之招聘申请
- 网盘助手插件chrome插件
- 图解深度学习的笔记:1.MP模型,感知器,BP下的多层感知器
- python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...
- 智慧能源:浅谈新一代信息技术在智慧能源的应
- 最新京东批量试用助手
- 基于 Retinex 的几种图像增强算法总结
- 多尺度图像增强Retinex相关算法学习及实现
- pdfjs实现pdf预览