单片机键盘显示实验报告

单片机键盘显示实验报告
单片机键盘显示实验报告

单片机得键盘与显示实验报告

㈠实验目得

1.掌握单片机I/O得工作方式;

2.掌握单片机以串行口方式0工作得LED显示;

3.掌握键盘与LED显示得编程方法.

㈡实验器材

1.G6W仿真器?一台

2.MCS—51实验板?一台

3.PC机???一台

4.电源一台

㈢实验内容及要求

实验硬件线路图见附图

从线路图可见,8051单片机得P1口作为8个按键得输入端,构成独立式键盘。四个LED显示器通过四个串/并移位寄存器74LS164接口至8051得串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示得段码数据,TXD则作为发送时钟来对显示数据进行移位操作。

编写一个计算器程序,当某一键按下时可执行相应得加、减、乘、除运算方式,在四个显示器上显示数学算式与最终计算结果。

注:①通过按键来选择加、减、乘、除四种运算方式。

②输入两个数字均为一位十进制数,可预先放在内存中。

㈣实验框图(见下页)

㈤思考题

1.当键盘采用中断方式时,硬件电路应怎样连接?

P1、4~P1、7就是键输出线,P1、0~P1、3就是扫描输入线。输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5 V电源,输出端接至8051得外部中断输入端。

2、74LS164移位寄存器得移位速率就是多少?

实验中要求计算得式子与结果之间相差一秒,移位寄存器得移位速率应该就是每秒一位吧。其实这个问题确实不知道怎么回答。.。。。

?LED

实验代码:

ORG0000H

AJMPMAIN

ORG 0030H

MAIN:MOV 41H,#0BBH;对几个存放地址进行初始化MOV 42H,#0BBH

MOV43H,#0BBH

MOV44H,#0BBH

MOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALLDISPLAY ;初始化显示

KEY:MOV R3,#08H;用来存放两个数据

MOV R4,#02H

MOVP1,#0FFH ;初始化P1口

MOVA,P1 ;读取按键状态

CPL A ;取正逻辑,高电平表示有键按下

JZ KEY ;A=0时无键按下,重新扫描键盘

LCALL DELAY1 ;消抖

MOVA,P1;再次读取按键状态

CPL A

JZ KEY;再次判别就是否有键按下

PUSH A

KEY1:MOVA,P1

CPL A

ANL A,#0FH ;判别按键释放

JNZKEY1;按键未释放,等待

LCALLDELAY1;释放,延时去抖动

POPA

JB ACC、0,ADD1 ;K1按下转去ADD1

JBACC、1,SUB1 ;K1按下转去SUB1

JB ACC、2,MUL1 ;K1按下转去MUL1

JBACC、3,DIV1;K1按下转去DIV1

LJMP KEY

ADD1:LCALL BUFFER ;显示加数与被加数MOV43H,#049H

LCALL DISPLAY;显示加号

MOV A,R3

ADDA,R4

DA A

MOV R3,A;相加结果放入R6

ANLA,#0FH

MOV R4,A ;结果个位放入R7

MOV A,R3

SWAP A ;半字节交换,高四位放入低四位

ANL A,#0FH

MOV R3,A ;结果得高位放入R6

LCALL L??;显示缓存区设置

LCALLDELAY2 ?;延时一秒后显示

LCALL DISPLAY

LJMPKEY

SUB1:LCALL BUFFER ;显示减数与被减数MOV43H,#40H

LCALL DISPLAY;显示减号

MOVA,R3

CLR CY;CY清零

SUBB A,R4;做减法

PUSH A

RLCA;带进位循环左移,最高位放入CY JC F ;判断最高位,若为1则跳转到负数

ZHENG:POP A

MOVR4,A

MOV R3,#00H ;高位清零

SJMP OUT

FU:POP A

CPL A ;取绝对值

INCA

MOV R4,A

MOV R3,#11H ;显示负号

OUT: LCALL L;显示缓存区设置

LCALL DELAY2 ;延时1s后显示

LCALL DISPLAY

LJMP KEY

MUL1:LCALL BUFFER ;显示两位乘数MOV43H,#99H

LCALLDISPLAY;显示乘号

MOV A,R3

MOVB,R4

MUL AB;结果放入AB,A中就是低8位,B中就是高8位

MOV B,#0AH

DIV AB ;十进制转换

MOV R4,B;结果个位放入R7

MOV R3,A ;结果得十位放入R6

LCALL L

LCALLDELAY2

LCALL DISPLAY ;延时1s后显示

LJMP KEY

DIV1:LCALL BUFFER ;显示除数与被除数

MOV43H,#62H

LCALLDISPLAY;显示除号

MOV A,R3

MOV B,R4

DIV AB ;A除以B

MOV R4,B;余数放在R4中

MOV R3,A ;商放在R3中

MOV A,R4

MOVC A,A+DPTR;调用段选号

MOV 41H,A;显示余数

MOV A,R3

MOVCA,A+DPTR

MOV43H,A;显示商

MOV42H,#00H

MOV44H,#00H

LCALL DELAY2;延时1S后显示

LCALL DISPLAY

LJMP KEY

BUFFER: MOV41H,#22H ;显示初始化,在做计算之前显示两个操作数,显示等号

MOV DPTR,#TABL

MOV A,R4

MOVC A,A+DPTR

MOV42H,A

MOV A,R3

MOVC A,A+DPTR

MOV 44H,A

RET

DISPLAY:MOV R5,#04H?;共四位需要显示

MOV R0,#41H

DISPLAY1:MOV A,R0

MOV SBUF,A

DISPLAY2:JNB TI,DISPLAY2?;就是否传完了

CLR TI

INC R0

DJNZ R5,DISPLAY1

RET

L:MOVA,R4

MOVC A,A+DPTR

MOV 41H,A ;R4对应得段码

MOV A,R3

MOVC A,A+DPTR

MOV42H,A ;R3对应得段码

MOV43H,#00H

MOV44H,#00H

RET

DELAY1:;普通延时

?MOVR1,#20H

DS1:?MOV R2,#0FFH

DS2:DJNZ R2,DS2

?DJNZ R1,DS1

RET

DELAY2:MOV R6,#14H ;定时1S

MOVTMOD,#01H

DS3:MOV TH0,#3CH

MOV TL0,#0B0H ;50ms

SETB TR0

LOOP:JNB TF0,LOOP

CLR TF0

CLRTR0

DJNZ R6,DS3 ;1s到,中断返回

RET

TABL:DB 0BBH09H 0EAH 6BH;段码表

DB 59H73H0F3H 0BH

DB 0FBH7BH 00H 0DBH

DB0F1H 0B2H 0E9H0F2H

DB0D2H40H

实验结果及分析

按键1:8+2= 结果:10

按键2:8-2=结果: 6

按键3:8*2= 结果:16

按键4:8/2=结果:4

从上面得结果可以瞧出,本次实验基本完成了实验要求。本次实验主要运用了键盘接口与LED显示方面得知识,

掌握了如何读取键盘状态与消抖:

MOV P1,#0FFH ;初始化P1口

MOV A,P1 ;读取按键状态

CPLA;取正逻辑,高电平表示有键按下

JZKEY ;A=0时无键按下,重新扫描键盘

LCALLDELAY1 ?;消抖

MOV A,P1 ;再次读取按键状态

CPL A

JZ KEY ;再次判别就是否有键按下

PUSH A

KEY1:MOVA,P1

CPL A

ANL A,#0FH;判别按键释放

JNZKEY1 ;按键未释放,等待

LCALLDELAY1 ?;释放,延时去抖动

POP A

在计算过程得显示中复习了定时器得知识:

DELAY2:MOVR6,#14H;定时1S

MOVTMOD,#01H

DS3:MOVTH0,#3CH

MOV TL0,#0B0H ;50ms

SETBTR0

LOOP:JNB TF0,LOOP

CLRTF0

CLR TR0

DJNZ R6,DS3 ;1s到,中断返回

RET

对于缓存区得设置这一块儿掌握得还不就是很好,希望经过多次练习可以加深理解。

相关主题
相关文档
最新文档