您好,欢迎来到微智科技网。
搜索
您的当前位置:首页汇编数码显示及键盘实验实验报告

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

来源:微智科技网
数码显示及键盘实验

【实验内容】

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的ATS52的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 MOV @R0,A INC R1 INC R2

DJNZ R2,MAIN1

LOOP: ACALL PLAY

SJMP LOOP

PLAY:

MOV R0,#DISSTART MOV R1,#0FEH

MOV R2,#08H

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

;显示存储单元首地址 ;初始化

;将0-7分别存入累加器A ;将0-7分别存入显示存储单元;R1自增1 ;R2自增1

;若不按键则跳转回到MAIN1

;循环显示

;不长按键则转移到LOOP ;显示子程序 ;获得显示单元首地址 ;位码初始值 ;有8位数码管显示

;取要显示的数据 ;置段码表首址 ;根据数据查段码表 ;段码输出 ;位码输出

;准备下一次显示的位码

;保存位码

;取下一个显存单元地址 ;调用延时

DJNZ R2,DISP1 MOV P2,#0FFH RET

;8位数码管是否显示完 ;关闭显示 ;显示完成返回 ;1ms延时子程序

DELAY:

MOV R6,#5

DEL1:

MOV R7,#93

DEL2:

DJNZ R7,DEL2 DJNZ R6,DEL1 RET

;断码表

;第一层循环 ;第二层循环

TAB_NU:

END

DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H DB 090H,088H,083H,0C6H,0A1H,086H,08EH,0FFH

;结束

实验结果:

将“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的ATS52的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 MOV P1,#0FFH MOV P3,#0FFH ACALL SCANKEY

CJNE A,#0FFH,LOOP1

AJMP LOOP0

LOOP1: MOV R5,#2

ACALL DELAY ACALL SCANKEY

CJNE A,#0FFH,LOOP2

AJMP LOOP0

LOOP2: MOV P0,A

ACALL BEEP_BL

AJMP LOOP0

SCANKEY:

;初始化 ;跳转到主函数 ;初始化

;主函数 ;设置堆栈指针 ;初始化

;关闭所有LED显示;为输入状态 ;初始化 ;第一次判键 ;

;绝对转移到LOOP0

;延时20ms ;延时 ;第二次判键 ;

;跳转到LOOP0

;键值送显示 ;响应蜂鸣器程序 ;跳转到LOOP0 ;键盘扫描子程序

MOV P1,#0FFH MOV P3,#0FFH

MOV R0,P1 MOV R1,P3

MOV A,R0 ANL A,#0F0H SWAP A

MOV R0,A

MOV A,R1 RL A

RL A

ANL A,#0F0H ORL A,R0

RET

BEEP_BL:

MOV R6,#200

BL1: ACALL BL2 CPL BEEP

DJNZ R6,BL1 SETB BEEP MOV R5,#15

ACALL DELAY

RET

BL2:

MOV R7,#220

;为输入状态 ;为输入状态

;读P1端口 ;读P3端口

;读取P1端口

;保留高四位

;低四位与高四位互换 ;低四位为有效位(K1-K4)

;读取P3端口 ;左移两次

;高四位为有效位(K5-K8) ;重新组合,键值保存在A ;返回

;蜂鸣器响一声子程序

;跳转到BL2

;蜂鸣器取反产生驱动脉冲 ;R6减1,非零则跳转到BL1 ;关闭蜂鸣器

;延时150ms,防止键连击 ;跳转到延时子程序 ;返回

BL3:

NOP

DJNZ R7,BL3 RET

;寄存器R7减1,非零则跳转到BL3 ;返回

;延时子程序,延时R5*10ms

DELAY:

MOV R6,#50

DEL1:

MOV R7,#93

DEL2:

END

;结束

DJNZ R7,DEL2 DJNZ R6,DEL1 DJNZ R5,DELAY RET

;寄存器R7减1,非零则跳转到DEL2 ;寄存器R6减1,非零则跳转到DEL1 ;寄存器R5减1,非零则跳转到DELAY ;返回

实验结果:

当有键按下,对应的LED灯亮。 K1-K8对应P0端口的LED D00-D07 K1键按下后,D00亮

......

K8键按下后,D07亮

在确认有按键按下是,蜂鸣器会响一声

问题及解决:

1)没有正确加载烧写文件。必须是先选芯片在加载文件

2)芯片型号没有选择正确。可重新选择型号

3)没有放置芯片。先放芯片,再压下锁紧座手柄锁紧 4)芯片损坏。换新的芯片重试

5)仔细输入汇编源程序,最好是新建txt文档后先更改扩展名为asm再输入源程序,否则可能无法编译

分析讨论:

经过这次试验,我发现我们在做实验时要有足够的细心和耐心,如果发现程序无法运行要认真寻找发现错误。比如这次,我输入汇编源程序时新建txt文档后没有直接更改扩展名为asm而是直接输入源程序,之后再更改扩展名最终造成程序无法编译,直接原因是在txt文档中输入时多输入了部分空格。经过这次教训,我以后一定会更加仔细的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务