单片机键盘显示实验报告.docx
《单片机键盘显示实验报告.docx》由会员分享,可在线阅读,更多相关《单片机键盘显示实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
单片机键盘显示实验报告
单片机的键盘和显示实验报告
㈠实验目的
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.当键盘采用中断方式时,硬件电路应怎样连接
~是键输出线,~是扫描输入线。
输入与门用于产生按键中断,其输入端与各列线相连,再通过上拉电阻接至+5V电源,输出端接至8051的外部中断输入端。
移位寄存器的移位速率是多少
实验中要求计算的式子和结果之间相差一秒,移位寄存器的移位速率应该是每秒一位吧。
其实这个问题确实不知道怎么回答。
。
。
。
。
LED显示用的段码与教科书所提供的不同,本实验采用如下段码:
显示数符
段码
显示数符
段码
0
BBH
A
DBH
1
09H
B
F1H
2
EAH
C
B2H
3
6BH
D
E9H
4
59H
E
F2H
5
73H
F
D2H
6
F3H
—
40H
7
0BH
.
04H
8
FBH
┗┛
A1H
9
7BH
┗┛
1AH
灭
00H
P
DAH
实验代码:
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
MOV41H,#0BBH;对几个存放地址进行初始化
MOV42H,#0BBH
MOV43H,#0BBH
MOV44H,#0BBH
MOVSCON,#00H;初始化串行口控制寄存器,设置其为方式0
LCALLDISPLAY;初始化显示
KEY:
MOVR3,#08H;用来存放两个数据
MOVR4,#02H
MOVP1,#0FFH;初始化P1口
MOVA,P1;读取按键状态
CPLA;取正逻辑,高电平表示有键按下
JZKEY;A=0时无键按下,重新扫描键盘
LCALLDELAY1;消抖
MOVA,P1;再次读取按键状态
CPLA
JZKEY;再次判别是否有键按下
PUSHA
KEY1:
MOVA,P1
CPLA
ANLA,#0FH;判别按键释放
JNZKEY1;按键未释放,等待
LCALLDELAY1;释放,延时去抖动
POPA
JB,ADD1;K1按下转去ADD1
JB,SUB1;K1按下转去SUB1
JB,MUL1;K1按下转去MUL1
JB,DIV1;K1按下转去DIV1
LJMPKEY
ADD1:
LCALLBUFFER;显示加数和被加数
MOV43H,#049H
LCALLDISPLAY;显示加号
MOVA,R3
ADDA,R4
DAA
MOVR3,A;相加结果放入R6
ANLA,#0FH
MOVR4,A;结果个位放入R7
MOVA,R3
SWAPA;半字节交换,高四位放入低四位
ANLA,#0FH
MOVR3,A;结果的高位放入R6
LCALLL;显示缓存区设置
LCALLDELAY2;延时一秒后显示
LCALLDISPLAY
LJMPKEY
SUB1:
LCALLBUFFER;显示减数和被减数
MOV43H,#40H
LCALLDISPLAY;显示减号
MOVA,R3
CLRCY;CY清零
SUBBA,R4;做减法
PUSHA
RLCA;带进位循环左移,最高位放入CY
JCF;判断最高位,若为1则跳转到负数
ZHENG:
POPA
MOVR4,A
MOVR3,#00H;高位清零
SJMPOUT
FU:
POPA
CPLA;取绝对值
INCA
MOVR4,A
MOVR3,#11H;显示负号
OUT:
LCALLL;显示缓存区设置
LCALLDELAY2;延时1s后显示
LCALLDISPLAY
LJMPKEY
MUL1:
LCALLBUFFER;显示两位乘数
MOV43H,#99H
LCALLDISPLAY;显示乘号
MOVA,R3
MOVB,R4
MULAB;结果放入AB,A中是低8位,B中是高8位
MOVB,#0AH
DIVAB;十进制转换
MOVR4,B;结果个位放入R7
MOVR3,A;结果的十位放入R6
LCALLL
LCALLDELAY2
LCALLDISPLAY;延时1s后显示
LJMPKEY
DIV1:
LCALLBUFFER;显示除数和被除数
MOV43H,#62H
LCALLDISPLAY;显示除号
MOVA,R3
MOVB,R4
DIVAB;A除以B
MOVR4,B;余数放在R4中
MOVR3,A;商放在R3中
MOVA,R4
MOVCA,@A+DPTR;调用段选号
MOV41H,A;显示余数
MOVA,R3
MOVCA,@A+DPTR
MOV43H,A;显示商
MOV42H,#00H
MOV44H,#00H
LCALLDELAY2;延时1S后显示
LCALLDISPLAY
LJMPKEY
BUFFER:
MOV41H,#22H;显示初始化,在做计算之前显示两个操作数,显示等号
MOVDPTR,#TABL
MOVA,R4
MOVCA,@A+DPTR
MOV42H,A
MOVA,R3
MOVCA,@A+DPTR
MOV44H,A
RET
DISPLAY:
MOVR5,#04H;共四位需要显示
MOVR0,#41H
DISPLAY1:
MOVA,@R0
MOVSBUF,A
DISPLAY2:
JNBTI,DISPLAY2;是否传完了
CLRTI
INCR0
DJNZR5,DISPLAY1
RET
L:
MOVA,R4
MOVCA,@A+DPTR
MOV41H,A;R4对应的段码
MOVA,R3
MOVCA,@A+DPTR
MOV42H,A;R3对应的段码
MOV43H,#00H
MOV44H,#00H
RET
DELAY1:
;普通延时
MOVR1,#20H
DS1:
MOVR2,#0FFH
DS2:
DJNZR2,DS2
DJNZR1,DS1
RET
DELAY2:
MOVR6,#14H;定时1S
MOVTMOD,#01H
DS3:
MOVTH0,#3CH
MOVTL0,#0B0H;50ms
SETBTR0
LOOP:
JNBTF0,LOOP
CLRTF0
CLRTR0
DJNZR6,DS3;1s到,中断返回
RET
TABL:
DB0BBH09H0EAH6BH;段码表
DB59H73H0F3H0BH
DB0FBH7BH00H0DBH
DB0F1H0B2H0E9H0F2H
DB0D2H40H
实验结果及分析
按键1:
8+2=结果:
10
按键2:
8-2=结果:
6
按键3:
8*2=结果:
16
按键4:
8/2=结果:
4
从上面的结果可以看出,本次实验基本完成了实验要求。
本次实验主要运用了键盘接口和LED显示方面的知识,
掌握了如何读取键盘状态和消抖:
MOVP1,#0FFH;初始化P1口
MOVA,P1;读取按键状态
CPLA;取正逻辑,高电平表示有键按下
JZKEY;A=0时无键按下,重新扫描键盘
LCALLDELAY1;消抖
MOVA,P1;再次读取按键状态
CPLA
JZKEY;再次判别是否有键按下
PUSHA
KEY1:
MOVA,P1
CPLA
ANLA,#0FH;判别按键释放
JNZKEY1;按键未释放,等待
LCALLDELAY1;释放,延时去抖动
POPA
在计算过程的显示中复习了定时器的知识:
DELAY2:
MOVR6,#14H;定时1S
MOVTMOD,#01H
DS3:
MOVTH0,#3CH
MOVTL0,#0B0H;50ms
SETBTR0
LOOP:
JNBTF0,LOOP
CLRTF0
CLRTR0
DJNZR6,DS3;1s到,中断返回
RET
对于缓存区的设置这一块儿掌握的还不是很好,希望经过多次练习可以加深理解。