汇编数码显示及键盘实验实验报告
- 格式:doc
- 大小:161.50 KB
- 文档页数:11
数码显示及键盘实验
【实验内容】
1、数码管显示0-7
2、独立按键识别
【需要了解的知识】
1、GPIO设定
2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理
【实验预习】
仔细预读实验指导电子文档的实验六、七及其前面的实验流程
【实验设备】
Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序
【实验过程】
实验一 数码管显示0-7
实验任务:
1)先将“0-7”数码管的段码值写入存储器中,使8位数码管从右至左显示0-7.
实验步骤:
1)首先在硬盘上建立一个文件夹;
2)启动Keil C51软件;
3)执行Keil C51软件的菜单“Project|New Project„„”,弹出一个名为“Create New Project”的对话框。输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮; 4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL的AT89S52的CPU。选择之后,点击“确定”按钮;
5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;
6)执行 菜单“File|New„„”,出现一个名为“Text1”的文档。接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;
7)添加源程序文件到工程中,一个空的源程序文件建成。单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;
8)在弹出的对话框中先选择文件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;
输入源程序代码;
9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“Create Hex File”,
10)单击编译按钮,编译当前源程序;
11)运行。
12)将JP21的8个短接子用短接帽短接,使数码管的位控制线与P2端口接通。
13)将JP22的9个短接子用短接帽短接,使数码管的位控制线与P0端口接通,并使VCC向数码管接口电路供电。
14)将JP24的OFF端用短接帽短接,禁止LCD1602显示功能,否则数码管将不能正常显示。
程序设计:
数码管显示的编程方法:
1)先准备好要显示的数据,放入相应的显示存储单元中。
2)根据要使用的数码管的具体位置来确定扫描初值和扫描方向。 3)根据使用数码管的个数来确定扫描的位数。
4)查表要将显示的数据转换为能使数码管正确显示相对应的段码。
5)分时送段码和位码,数码管开始循环显示。
试验流程图:
汇编源程序:
DISSTART EQU 40H ;显示单元首地址
LED_DATA EQU P0 ;数码管数据口定义
ORG 0000H ;初始化
AJMP MAIN ;跳转到主函数
ORG 0050H ;初始化
MAIN:
MOV SP,#60H ;设置堆栈指针
MOV P0,#0FFH ;初始化 MOV P2,#0FFH ;初始化
MOV R2,#08H ;8组数据
MOV R0,#DISSTART ;显示存储单元首地址
MOV R1,#00H ;初始化
MAIN1:
MOV A,R1 ;将0-7分别存入累加器A
MOV @R0,A ;将0-7分别存入显示存储单元
INC R1 ;R1自增1
INC R2 ;R2自增1
DJNZ R2,MAIN1 ;若不按键则跳转回到MAIN1
LOOP:
ACALL PLAY ;循环显示
SJMP LOOP ;不长按键则转移到LOOP
PLAY: ;显示子程序
MOV R0,#DISSTART ;获得显示单元首地址
MOV R1,#0FEH ;位码初始值
MOV R2,#08H ;有8位数码管显示
DISP1:
MOV A,@R0 ;取要显示的数据
MOV DPTR,#TAB_NU ;置段码表首址
MOVC A,@A+DPTR ;根据数据查段码表
MOV LED_DATA,A ;段码输出
MOV P2,R1 ;位码输出
MOV A,R1 ;准备下一次显示的位码
RL A
MOV R1,A ;保存位码
INC R0 ;取下一个显存单元地址
ACALL DELAY ;调用延时 DJNZ R2,DISP1 ;8位数码管是否显示完
MOV P2,#0FFH ;关闭显示
RET ;显示完成返回
DELAY: ;1ms延时子程序
MOV R6,#5
DEL1:
MOV R7,#93
DEL2:
DJNZ R7,DEL2 ;第一层循环
DJNZ R6,DEL1 ;第二层循环
RET
TAB_NU: ;断码表
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H
DB 090H,088H,083H,0C6H,0A1H,086H,08EH,0FFH
END ;结束
实验结果:
将“0-7”数码管的段码值写入存储器中,8位数码管从右至左显示0-7.
问题解决及讨论:
1)没有正确加载烧写文件。必须是先选芯片在加载文件
2)芯片型号没有选择正确。可重新选择型号
3)没有放置芯片。先放芯片,再压下锁紧座手柄锁紧
4)芯片损坏。换新的芯片重试
5)仔细输入汇编源程序,最好是新建txt文档后先更改扩展名为asm再输入源程序,否则可能无法编译
分析讨论: 经过这次试验,我发现我们在做实验时要有足够的细心和耐心,如果发现程序无法运行要认真寻找发现错误。比如这次,我输入汇编源程序时新建txt文档后没有直接更改扩展名为asm而是直接输入源程序,之后再更改扩展名最终造成程序无法编译,直接原因是在txt文档中输入时多输入了部分空格。经过这次教训,我以后一定会更加仔细的。
实验二 独立按键识别
实验任务:
当有键按下,对应的LED灯亮。
K1-K8对应P0端口的LED D00-D07
K1键按下后,D00亮
......
K8键按下后,D07亮
在确认有按键按下是,蜂鸣器会响一声
实验步骤:
1)首先在硬盘上建立一个文件夹;
2)启动Keil C51软件;
3)执行Keil C51软件的菜单“Project|New Project„„”,弹出一个名为“Create New Project”的对话框。输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;
4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL的AT89S52的CPU。选择之后,点击“确定”按钮;
5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;
6)执行 菜单“File|New„„”,出现一个名为“Text1”的文档。接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;
7)添加源程序文件到工程中,一个空的源程序文件建成。单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项; 8)在弹出的对话框中先选择文件类型为“Asm Source file(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;
输入源程序代码;
9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。点击Output选项,选中“Create Hex File”,
10)单击编译按钮,编译当前源程序;
11)运行;
12)将JP8的8个短接子全部用短接帽短接,使独立按键与相应的端口接通;
13)将JP9的VCC-VCC3短接子用短接帽短接,使VCC向发光二极管D00-D07供电;
14)将JP15短接子用短接帽短接,使蜂鸣器接口电路工作使能;
15)如果PS2接口插了键盘,请拔下键盘插头或取下JP12上的短接帽
程序流程图:
汇编源程序:
BEEP BIT P3.7
ORG 0000H ;初始化
AJMP MAIN ;跳转到主函数
ORG 0050H ;初始化
MAIN: ;主函数
MOV SP,#60H ;设置堆栈指针
MOV P2,#0FFH ;初始化
LOOP0:
MOV P0,#0FFH ;关闭所有LED显示
MOV P1,#0FFH ;为输入状态
MOV P3,#0FFH ;初始化
ACALL SCANKEY ;第一次判键
CJNE A,#0FFH,LOOP1 ;
AJMP LOOP0 ;绝对转移到LOOP0
LOOP1:
MOV R5,#2 ;延时20ms
ACALL DELAY ;延时
ACALL SCANKEY ;第二次判键
CJNE A,#0FFH,LOOP2 ;
AJMP LOOP0 ;跳转到LOOP0
LOOP2:
MOV P0,A ;键值送显示
ACALL BEEP_BL ;响应蜂鸣器程序
AJMP LOOP0 ;跳转到LOOP0
SCANKEY: ;键盘扫描子程序