键盘显示单片机实习报告.docx

上传人:b****1 文档编号:1330150 上传时间:2023-04-30 格式:DOCX 页数:30 大小:210.63KB
下载 相关 举报
键盘显示单片机实习报告.docx_第1页
第1页 / 共30页
键盘显示单片机实习报告.docx_第2页
第2页 / 共30页
键盘显示单片机实习报告.docx_第3页
第3页 / 共30页
键盘显示单片机实习报告.docx_第4页
第4页 / 共30页
键盘显示单片机实习报告.docx_第5页
第5页 / 共30页
键盘显示单片机实习报告.docx_第6页
第6页 / 共30页
键盘显示单片机实习报告.docx_第7页
第7页 / 共30页
键盘显示单片机实习报告.docx_第8页
第8页 / 共30页
键盘显示单片机实习报告.docx_第9页
第9页 / 共30页
键盘显示单片机实习报告.docx_第10页
第10页 / 共30页
键盘显示单片机实习报告.docx_第11页
第11页 / 共30页
键盘显示单片机实习报告.docx_第12页
第12页 / 共30页
键盘显示单片机实习报告.docx_第13页
第13页 / 共30页
键盘显示单片机实习报告.docx_第14页
第14页 / 共30页
键盘显示单片机实习报告.docx_第15页
第15页 / 共30页
键盘显示单片机实习报告.docx_第16页
第16页 / 共30页
键盘显示单片机实习报告.docx_第17页
第17页 / 共30页
键盘显示单片机实习报告.docx_第18页
第18页 / 共30页
键盘显示单片机实习报告.docx_第19页
第19页 / 共30页
键盘显示单片机实习报告.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

键盘显示单片机实习报告.docx

《键盘显示单片机实习报告.docx》由会员分享,可在线阅读,更多相关《键盘显示单片机实习报告.docx(30页珍藏版)》请在冰点文库上搜索。

键盘显示单片机实习报告.docx

键盘显示单片机实习报告

 

电子信息工程专业

单片机课程设计报告

 

题目键盘显示模块

姓名

学号

班级

指导教师

 

2010年6月30日

 

课程设计任务书

课程设计题目键盘显示模块

课程设计起止日期6月13日至6月30日

实习地点实验楼106

课程设计内容与要求(包括:

设计任务及要求、设计原理、所需仪器设备、验收标准)

(1)设计任务及要求

及格:

键盘能识别并能显示键号,即按不同的键后能在对应的位置显示按键的值。

中:

能实现按键后能从左到右移动显示。

良:

应用单片机定时器完成时钟设计,并能动态循环显示时、分、秒。

优:

在良的基础之上,能够对时间进行校准。

(2)设计原理

利用单片机扫描键盘来确定行列式2*2键盘是否有键按下,若有键按下则判断是哪个键按下然后在数码管相应位置输出。

(3)所需仪器设备

单片机最小系统pc机、伟福仿真器、电源、导线若干

 

指导教师田悦新

2010年6月30日

1、设计原理与技术方法:

包括:

电路工作分析原理与原理图、元器件选择、电路调试方法与结果说明;

软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。

1.电路原理图见附录

2.电路工作分析

1)键盘工作电路:

键盘为2*2的键盘,与单片机的p1.3-p1.6口连接。

工作时先判断有无键按下,检查行输出是否由高电平变成低电平。

然后再判断是哪个键按下。

最后在相应的位置输出对应的信息。

2)数码管显示电路:

数码管有四个,前面和一个373锁存器相连,用来锁存显示信息。

373通过一个138三八译码器连接在单片机的p2口,其地址可以算出为6000H,数码管COM1,COM2,COM3,COM4,也通过138译码器和单片机的p2口相连,地址分别为8000H,0A000H,0C000H,0E000H。

数码管显示相应键按下的信息,单片机读入键盘的状态,锁存于373中,然后输出在数码管中。

数码管显示时钟,单片机内部的定时器来完成时钟设计在数码管中显示出来。

3.元器件选择、电路调试方法与结果说明

1)元器选择:

74ls138、74ls373、74ls138、74ls04、74ls02、74ls08、数码管、2*2键盘、晶振、电阻、电容、二极管等。

2)电路调试与结果说明:

首先焊接电路,然后再接好电源,如果电源指示灯亮,其他灯不亮且芯片没有太烫的说明电路板焊接良好,且芯片连接正确。

4.软件设计说明书与流程图

1)软件设计说明书:

及格和中的软件设计:

第一步判断有无键按下,判断有键按下的依据时键盘行线电平是否由高变底了,判断出有键按下时要调用延时程序来排除键盘抖动的干扰。

第二步判断是哪个键按下,判断哪个键按下时是先置高其中一条列线再拉底另一条列线,这样当行列线电平都是底电平是则选中对应的键。

第三步,在数码管上相应的位置显示,将键盘按下键的键号放到锁存器中存放,再送如数码管中显示。

良和优的的软件设计:

先利用单片机内部的定时器来完成时钟设计,具体软件设计见流程图,然后在数码管上滚动显示时钟。

最后利用键盘来校准时钟。

2)流程图及软件源程序代码

及格的程序流程图为图1

课程设计报告

图1及格的程序流程图

及格的程序:

ORG0000H

LJMPKEY1

ORG0100H

KEY1:

ACALLKS1;判断是否有键按下子程

CJNEA,#18H,LK1;A与18H不相等时有键按下,跳判键子程序

ACALLLKP;调用显示程序,延时

AJMPKEY1;再判断

LK1:

ACALLDELAY;可能有键按下,延迟10ms软件去抖

ACALLKS1;调用判有无键闭合子程序

CJNEA,#18H,LK2;经去抖动,判断确实有键闭合,跳LK2去处理

AJMPKEY1;抖动引起,跳KEY1

LK2:

CLRP1.5;先判断第一列有无键按下

SETBP1.6

MOVA,P1

JBACC.3,LINE1;P1.3为高电平,转LONE1去处理

MOVR0,#01H;一号键被按下,R0置1

AJMPLK3

LINE1:

JBACC.4,NEXT;P1.4为高电平,转NEXT去处理

MOVR0,#03H;三号被按下,R0置3

AJMPLK3

NEXT:

SETBP1.5;第一列无键按下,判断第二列

CLRP1.6

MOVA,P1

JBACC.3,LINE2

MOVR0,#02H;二号被按下,R0置2

AJMPLK3

LINE2:

MOVR0,#04H;四号被按下,R0置4

LK3:

ACALLLKP

ACALLKS1

CJNEA,#18H,LK3;判键释放否,未释放,则循环

AJMPKEY1

LKP:

MOVA,R0

MOVDPTR,#TAB

MOVCA,@A+DPTR;根据显示数据来查表取段码

MOVDPTR,#6000H

MOVX@DPTR,A

CJNER0,#01H,J2;R0不为1,即不是一号键按下时,转J2处理

MOVDPTR,#8000H

SJMPXS

J2:

CJNER0,#02H,J3;R0不为2,即不是二号键按下时,转J3处理

LED2:

MOVDPTR,#0A000H

SJMPXS

J3:

CJNER0,#03H,J4;R0不为3,即不是三号键按下时,转J4处理

LED3:

MOVDPTR,#0C000H

SJMPXS

J4:

CJNER0,#04H,KEY1;R0不为4,即没有确定键按下时,转KEY1重新扫描

MOVDPTR,#0E000H

XS:

MOVX@DPTR,A;段码送入段地址

RET

KS1:

CLRP1.5;判断有无键按下子程序

CLRP1.6

MOVA,P1

ANLA,#18H

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H

DB82H,0F8H,80H,90H,88H,83H,0C6H

DB0A1H,86H,8EH,0FFH

DELAY:

MOVR5,#14H;延迟10ms子程序

LOOP2:

MOVR6,#0F9H

LOOP1:

DJNZR6,LOOP1

DJNZR5,LOOP2

RET

END

中的程序流程图为图2:

N

N

Y

N

Y

图2中的程序流程图

中的程序:

ORG0000H

LJMPMAIN

ORG1000H

MAIN:

MOV63H,#10H

MOV62H,#10H

MOV61H,#10H

MOV60H,#10H;初始不显示键号

KEY:

ACALLKS1;调用判有无键闭合子程序

CJNEA,#18H,LK1;有键闭合,跳LK1

NI:

ACALLDIR;无键闭合,调用显示子程序后,跳KEY

AJMPKEY

LK1:

ACALLDL12ms;可能有键闭合,延迟12ms,软件去抖

ACALLKS1;调用判有无键闭合子程序

CJNEA,#18H,LK2;经去抖动,判键确实闭合,跳LK2去处理

AJMPKEY;抖动引起,跳KEY

LK2:

CLRP1.5;P1.5代表第一列,有键按下

SETBP1.6;P1.6代表第二列,无键按下

MOVA,P1;读行状态

JBACC.3,LONE;第一行为高,无键闭合,跳LONE,转判第二行

MOVR5,#01H;第一个键闭合,键号1给R5

AJMPLK3;跳LK3

LONE:

JBACC.4,NEXT;第二行为高,无键闭合,跳NEXT,转判第二列

MOVR5,#03H;第三个键闭合,键号3给R5

AJMPLK3;跳LK3

NEXT:

SETBP1.5;P1.5代表第二列,无键按下

CLRP1.6;P1.6代表第一列,有键按下

MOVA,P1;读行状态

JBACC.3,LONE1;第一行为高,无键闭合,跳LONE1,转判第二行

MOVR5,#02H;第二个键闭合,键号2给R5

AJMPLK3;跳LK3

LONE1:

MOVR5,#04H;第四个键闭合,键号4给R5

LK3:

ACALLYIDONG;调用移动显示子程序,显示按键的键号

LKP:

ACALLDIR;调用显示子程序,显示按键的键号

ACALLKS1;调用判有无键闭合子程序

CJNEA,#18H,LKP;判键释放否,未释放,则循环

AJMPKEY;重新开始判键

KS1:

CLRP1.5

CLRP1.6

MOVA,P1

ANLA,#18H

RET

YIDONG:

MOV60H,61H;移动显示子程序,从左向右移动

MOV61H,62H

MOV62H,63H

MOV63H,R5

DIR:

MOVA,63H;最左边数码管

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表

MOVDPTR,#6000H;段控制口

MOVX@DPTR,A

MOVDPTR,#8000H;位控制口

MOVX@DPTR,A

MOVA,62H

CJNEA,#10H,DIR1;只按下一个键,返回,只有一个管显示

AJMPFANHUI

DIR1:

MOVA,62H;从左第二个数码管

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#6000H

MOVX@DPTR,A

MOVDPTR,#0A000H

MOVX@DPTR,A

MOVA,61H

CJNEA,#10H,DIR2;只按下两个键,返回,只有两个管显示

AJMPFANHUI

DIR2:

MOVA,61H;从左第三个数码管

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#6000H

MOVX@DPTR,A

MOVDPTR,#0C000H

MOVX@DPTR,A

MOVA,60H

CJNEA,#10H,DIR3;超过四个键按下,全部显示

AJMPFANHUI;只按下三个键,返回,只有三个管显示

DIR3:

MOVA,60H;从左第四个数码管

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVDPTR,#6000H

MOVX@DPTR,A

MOVDPTR,#0E000H

MOVX@DPTR,A

FANHUI:

RET

DL12ms:

MOVR7,#0CH;延迟12ms子程序

DL:

MOVR6,#0FFH

DL6:

DJNZR6,DL6

DJNZR7,DL

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H;段码表

DB82H,0F8H,80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH,0FFH

END

良的程序流程图

为图3:

 

图3良的程序流程图

良的程序:

ORG0000H

LJMPMAIN

ORG000BH

LJMPITOP

ORG1000H

MAIN:

MOVSP,#80H

MOV71H,#00H

MOV72H,#00H

MOV73H,#00H

MOV74H,#00H

MOV60H,#00H

MOV61H,#00H

MOV50H,#00H

MOV51H,#00H

MOV30H,#00H

MOV31H,#00H

MOVR0,#00H

MOVR1,#00H

MOVTMOD,#01H;设T0工作方式1

MOV20H,#0AH;装入中断次数

CLRA

MOV40H,A;时单元清零

MOV41H,A;分单元清零

MOV42H,A;秒单元清零

SETBET0;允许T0申请中断

SETBEA;CPU开中断

MOVTH0,#3CH;给T0装入计数初值

MOVTL0,#0B0H

SETBTR0;启动T0

HERE:

ACALLDIR;调用显示子程序

NEXT0:

CJNER1,#00H,NEXT1;R1不等于0转NEXT1处理

MOV74H,51H;分的十位

MOV73H,#11H;"-"

MOV72H,30H;时的个位

MOV71H,31H;时的十位

AJMPPD

NEXT1:

CJNER1,#01H,NEXT2;R1不等于1转NEXT2处理

MOV74H,50H;分的个位

MOV73H,51H;分的十位

MOV72H,#11H;"-"

MOV71H,30H;时的个位

AJMPPD

NEXT2:

CJNER1,#02H,NEXT3;R1不等于2转NEXT3处理

MOV74H,#11H;"-"

MOV73H,50H;分的个位

MOV72H,51H;时的个位

MOV71H,#11H;"-"

AJMPPD

NEXT3:

CJNER1,#03H,NEXT4;R1不等于3转NEXT4处理

MOV74H,61H;秒的十位

MOV73H,#11H;"-"

MOV72H,50H;分的个位

MOV71H,51H;分的十位

AJMPPD

NEXT4:

MOVR1,#0FFH

MOV74H,60H;秒的个位

MOV73H,61H;秒的十位

MOV72H,#11H;"-"

MOV71H,50H;时的十位

AJMPPD

PD:

CJNER0,#03H,HER

MOVR0,#00H

INCR1

HER:

AJMPHERE

ITOP:

MOVTH0,#3CH;重新装入初值

MOVTL0,#0B0H

DJNZ20H,TURE;一秒未到返回

MOV20H,#0AH;重置中断次数

MOVA,#01H;秒单元增一

INCR0

ADDA,42H

DAA;秒单元十进制调整

MOV42H,A;秒的BCD码保存秒单元

CJNEA,#60H,TURE;是否到60秒,未到则返回

MOV42H,#00H;计满60秒,秒单元清零

MOVA,#01H;分单元增一

ADDA,41H

DAA;分单元十进制调整

MOV41H,A;分的BCD码存回分单元

CJNEA,#60H,TURE;是否到60分,未到则返回

MOV41H,#00H;计满60分,分单元清零

MOVA,#01H;时单元增一

ADDA,40H

DAA;时单元十进制调整

MOV40H,A;时的BCD码存回分单元

CJNEA,#24H,TURE;是否到24时,未到则返回

MOV40H,#00H;计满24时,时单元清零

TURE:

RETI;中断返回

DIR:

MOVA,42H;"秒"的BCD码存入A

ANLA,#0FH;屏蔽A的高四位

MOV60H,A;秒单元的个位存入60H

MOVA,42H;"秒"的BCD码存入A

ANLA,#0F0H;屏蔽A的低四位

SWAPA

MOV61H,A;秒单元的十位存入61H

MOVA,41H;"分"的BCD码存入A

ANLA,#0FH;屏蔽A的高四位

MOV50H,A;分单元的个位存入50H

MOVA,41H;"分"的BCD码存入A

ANLA,#0F0H;屏蔽A的低四位

SWAPA

MOV51H,A;分单元的十位存入51H

MOVA,40H;"时"的BCD码存入A

ANLA,#0FH;屏蔽A的高四位

MOV30H,A;时单元的个位存入30H

MOVA,40H;"时"的BCD码存入A

ANLA,#0F0H;屏蔽A的低四位

SWAPA

MOV31H,A;时单元的十位存入31H

MOVA,74H

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表

MOVDPTR,#6000H;段控制口,秒或分的个位在第四个数码管显示

MOVX@DPTR,A

MOVDPTR,#0E000H;位控制口

MOVX@DPTR,A

MOVA,73H

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表

MOVDPTR,#6000H;段控制口,秒或分的十位在第三个数码管显示

MOVX@DPTR,A

MOVDPTR,#0C000H;位控制口

MOVX@DPTR,A

MOVA,72H

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表

MOVDPTR,#6000H;段控制口,分或时的个位在第二个数码管显示

MOVX@DPTR,A

MOVDPTR,#0A000H;位控制口

MOVX@DPTR,A

MOVA,71H

MOVDPTR,#TAB

MOVCA,@A+DPTR;查表

MOVDPTR,#6000H;段控制口,分或时的十位在第一个数码管显示

MOVX@DPTR,A

MOVDPTR,#8000H;位控制口

MOVX@DPTR,A

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H

DB82H,0F8H,80H,90H,88H,83H,0C6H

DB0A1H,86H,8EH,0FFH,0BFH

DELAY:

MOVR5,#14H;延迟10ms子程序

LOOP2:

MOVR6,#0F9H

LOOP1:

DJNZR6,LOOP1

DJNZR5,LOOP2

RET

END

优的程序流程图为图4

优的程序:

ORG0000H

LJMPMAIN

ORG000BH

LJMPITOP

ORG1000H

MAIN:

MOVSP,#80H

MOV71H,#00H

MOV72H,#00H

MOV73H,#00H

MOV74H,#00H

MOV60H,#00H

MOV61H,#00H

MOV50H,#00H

MOV51H,#00H

MOV30H,#00H

MOV31H,#00H

MOVR0,#00H

MOVR1,#00H

MOVR3,#0FFH

MOVTMOD,#01H;设T0工作方式1

MOV20H,#0AH;装入中断次数

CLRA

MOV40H,A;时单元清零

MOV41H,A;分单元清零

MOV42H,A;秒单元清零

SETBET0;允许T0申请中断

SETBEA;CPU开中断

MOVTH0,#3CH;给T0装入计数初值

MOVTL0,#0B0H

SETBTR0;启动T0

HERE:

ACALLDIR;调用显示子程序

KEY1:

ACALLKS1;调用判断是否有键按下子程序

CJNEA,#18H,LK1;A与18H不相等时有键按下,跳判键子程序

LJMPNEXT0;无键闭合,调用显示程序,延时

LK1:

ACALLDELAY;可能有键按下,延迟10ms软件去抖

ACALLKS1;调用判有无键闭合子程序

CJNEA,#18H,LK2;经去抖动,判断确实有键闭合,跳LK2去处理

LJMPNEXT0;抖动引起,跳NEXT0

LK2:

CLRP1.5;先判断第一列有无键按下

SETBP1.6

MOVA,P1

JBACC.3,LINE1;S2未按下,跳LINE1处理

INCR3

LK3:

CJNER3,#00H,KAI;R3不等于0时开中断

CLRTR0;R3等于0,关中断

XUN:

ACALLDIR

ACALLKS1

CJNEA,#18H,XUN;判断关中断的键是否释放

LINE1:

JBTR0,NEXT0

CLRP1.5;先判断第一列有无键按下

SETBP1.6

MOVA,P1

JBACC.4,NEXT;P1.4为高电平,转NEXT去处理

MOVR1,#02H;显示对应数码管分的位置

MOVR0,#00H

MOVA,#01H;S3键按下,分单元增一

ADDA,41H

DAA;分单元十进制调整

MOV41H,A;分的BCD码存回分单元

CJNEA,#60H,LK4;是否到60分,未到则返回

MOV41H,#00H;计满60分,分单元清零

LJMPLK4

NEXT:

JBTR0,NEXT0

SETBP1.5;第一列无键按下,判断第二列

CLRP1.6

MOVA,P1

JBACC.3,LINE2

MOVR0,#00H

MOVR1,#00H;显示对应数码管时的位置

MOVA,#01H;时单元增一

ADDA,40H

DAA;时单元十进制调整

MOV40H,A;时的BCD码存回分单元

CJNEA,#24H,LK4;是否到24时,未到则返回

MOV40H,#00H;计满24时,时单元清零

LJMPLK4

LINE2:

JBTR0,NEXT0

JBACC.4,TT

MOVR0,#00H;显示对应数码管秒的位置

MOVR1,#04H

MOVA,#01H;秒单元增一

ADDA,42H

DAA;秒单元十进制调整

MOV42H,A;秒的BCD码保存秒单元

CJNEA,#60H,LK4;是否到60秒,未到则返回

MOV42H,#00H;计满60秒,秒单元清零

LJMPLK4

TT:

MOVR3,#0FEH

LJMPLK4

KAI:

SETBTR0;R3不等于0时,开中断

LK4:

ACALLDIR

ACALLKS1

CJNEA,#18H,LK4;判键释放否,未释放,则循环

NEXT0:

CJNER1,#00H,NEXT1;R1不等于0转NEXT1处理

MOV74H,51H;分的十位存在第四个数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2