键盘数码管显示综合实验.docx
- 文档编号:17529448
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:15
- 大小:232.40KB
键盘数码管显示综合实验.docx
《键盘数码管显示综合实验.docx》由会员分享,可在线阅读,更多相关《键盘数码管显示综合实验.docx(15页珍藏版)》请在冰点文库上搜索。
键盘数码管显示综合实验
单片机原理及应用
实验报告
姓名:
学号
班级:
指导教师:
许强
单片机原理及应用实验报告
实验项目名称:
键盘、数码管显示综合实验
实验日期:
实验成绩:
实验评定标准:
1)实验报告是否按照规定格式
A()B()C()
2)实验内容及说明是否完整
A()B()C()
3)实验步骤及说明是否正确
A()B()C()
4)实验结果及分析是否合理
A()B()C()
一、实验目的
通过实验,掌握单片机在输入输出口线不够用时,怎样扩展接口的方法来支持8位LED显示和16键盘集成实现。
熟悉8155、8279等芯片性能;掌握其编程方法。
掌握键盘子程序调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开发、软件编程必须掌握的方法。
二、实验器材
安装有keiluVision和proteus软件的PC机一台
以8155为扩展方式的器件
80C51.BUS
CRYSTAL
PHYC0402NP022P
7404
7SEG-MPX6-CC-BLUE
RESPACK-8
8155
HITEMP10U50V
BUTTON
MINRES10K
三、实验内容
①编写并调试出一个键盘实验子程序;
②用子程序调用方法,分别调用键盘子程序和显示子程序,将按一个键的键值(0-F),在数码管上显示出来。
四、实验步骤
(1)仿真实验过程:
打开Keil程序,执行菜单命令“Project”‡“NewProject”创建“键盘数码管显示综合实验”项目,并选择单片机型号为AT89C52.BUS。
执行菜单命令“File”‡“New”创建文件,输入源程序,保存为“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”。
在“Project”栏的File项目管理窗口中右击文件组,选择“AddFilestoGroup‘SourceGroup1’”将源程序“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”添加到项目中。
执行菜单命令“Project”‡“OptionsforTarget‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“GreateHEXFile”。
执行菜单命令“Project”‡“BuildTarget”,编译源程序。
如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“键盘数码管显示综合实验.HEX”文件。
在proteus仿真平台上建立如图,并将程序上载到虚拟芯片上调试及运行。
(2)实作实验
(1)线路连接
按图脚插座板、20脚插座板、六位数显板、按键拼集成焊接,并连好每条线,检查无误后,进行下一步。
(2)硬件好坏诊断
由于键盘电路比较特殊,按键有没有效,要用软硬件综合考虑、检测,一般的方法是先用万用表欧姆档测量一下,线是否连好,若连好了,就编一段测试程序,仿真测试或固化测试均行,下面分别叙述。
①仿真调试在PE状态下输入以下程序
②固化调试固化后,按0-F键数码管应有显示。
五、实验结果及分析
8255修改后:
8155汇编程序:
ORG0000H
START:
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
MOV7AH,#00
MOV7BH,#01
MOV7CH,#02
MOV7DH,#03
MOV7EH,#04
MOV7FH,#05
MOVDPTR,#7F00H;8155命令口地址
MOVA,#03H
MOVX@DPTR,A
LOOP:
LCALLDISP
LCALLKEY
MOVA,R4
CJNEA,#88H,DSP
SJMPLOOP
DSP:
MOV7AH,A;键值送入显示缓存区单元7AH
MOV7BH,#010H
MOV7CH,#010H
MOV7DH,#010H
MOV7EH,#010H
MOV7FH,#010H
SJMPLOOP
;按键识别子程序
KEY:
MOVR4,#00H
MOVR2,#01H
KEY1:
MOVDPTR,#7F02H
MOVA,R2
MOVX@DPTR,A
INCDPTR
MOVXA,@DPTR
JBACC.0,KEY2
MOVA,#00H
AJMPKEY5
KEY2:
JBACC.1,KEY3
MOVA,#01H
AJMPKEY5
KEY3:
JBACC.2,KEY4
MOVA,#02H
AJMPKEY5
KEY4:
JBACC.3,NEXT
MOVA,#03H
KEY5:
ADDA,R4
MOVR4,A
RET
NEXT:
MOVA,R4
ADDA,#04
MOVR4,A
MOVA,R2
JBACC.3,NEXT1
RLA
MOVR2,A
AJMPKEY1
NEXT1:
MOVR4,#88H
RET
;数码管显示组程序
DISP:
MOVR0,#7AH
MOVR3,#01H
DISPB1:
MOVDPTR,#7F02H
MOVA,#0H
MOVX@DPTR,A
MOVDPTR,#7F01H
MOVA,@R0
ADDA,#014H
MOVCA,@A+PC
MOVX@DPTR,A
MOVA,R3
MOVDPTR,#7F02H
MOVX@DPTR,A
ACALLDELAY
INCR0
MOVA,R3
JBACC.6,DISPB2
RLA
MOVR3,A
AJMPDISPB1
DISPB2:
MOVR3,#01H
RET
SEGPT2:
Db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
db00h,02h,08h,00h,59h,0fh,76h
;延时子程序
DELAY:
MOVR4,#0FFH
DELAY1:
DJNZR4,DELAY1
RET
END
C语言:
#include
#include
#include
typedefunsignedintuint;
typedefunsignedcharuchar;
#definecom8255XBYTE[0x7fff]
#definePA8255XBYTE[0x7cff]
#definePB8255XBYTE[0x7dff]
#definePC8255XBYTE[0x7eff]
sbitgw=P1^0;
sbitsw=P1^1;
ucharcodescancode[4]={0xfe,0xfd,0xfb,0xf7};
ucharcodeledlight[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchartemp;
voiddelay(uinti)
{
uintj;
while(i--)
{
for(j=0;j<125;j++)
;
}
}
voidinit8255(void)
{
com8255=0x82;
}
voidscan()
{
uchartem;
PC8255=0x00;
tem=PB8255;
if(~tem)
{
delay(10);
PC8255=0x00;
tem=PB8255;
if(~tem)
PC8255=scancode[0];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case0xfe:
temp=0;break;
case0xfd:
temp=4;break;
case0xfb:
temp=8;break;
case0xf7:
temp=12;break;
}
while(~tem)
{
PC8255=scancode[0];
tem=PB8255;
}
}
PC8255=scancode[1];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case0xfe:
temp=1;break;
case0xfd:
temp=5;break;
case0xfb:
temp=9;break;
case0xf7:
temp=13;break;
}
while(~tem)
{
PC8255=scancode[1];
tem=PB8255;
}
}
PC8255=scancode[2];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case0xfe:
temp=2;break;
case0xfd:
temp=6;break;
case0xfb:
temp=10;break;
case0xf7:
temp=14;break;
}
while(~tem)
{
PC8255=scancode[2];
tem=PB8255;
}
}
PC8255=scancode[3];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case0xfe:
temp=3;break;
case0xfd:
temp=7;break;
case0xfb:
temp=11;break;
case0xf7:
temp=15;break;
}
while(~tem)
{
PC8255=scancode[3];
tem=PB8255;
}
}
}
}
voidDelay10us()//@12.000MHz
{
unsignedchari;
_nop_();
_nop_();
i=27;
while(--i);
}
voiddisplay()
{
if(temp<10)
{
gw=0;
sw=1;
PA8255=ledlight[temp];
}
elseif(temp>=10)
{
PA8255=ledlight[temp/10];
sw=0;
Delay10us();
sw=1;
PA8255=ledlight[temp-10];
gw=0;
Delay10us();
gw=1;
}
}
voidmain()
{
init8255();
while
(1)
{
scan();
display();
}
}
自由状态:
按下键时:
实验结果分析:
本实验通过8155芯片的扩展功能,建立描述线与数据线同步功能,加上16个按键,而且按键和位选口选用PB口,同时此处为了节省接口线,直接将显示输出和扫描输出何用PA口。
按键显示时,分别对应显示0-F。
心得体会:
本次试验相对于其它几个实验是比较难的,在做实验的过程中,刚开始时没有头绪的,在做实验的过程中渐渐地了解了一些,但是做实验的过程中遇见了很多问题,通过查资料和同学交流对此次实验有了一定的了解。
我觉得理论知识比较抽象和实验结合,有利于理论知识的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘 数码管 显示 综合 实验