汇编数码显示及键盘实验实验报告

  • 格式: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: ;键盘扫描子程序