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

上传人:b****0 文档编号:9827286 上传时间:2023-05-21 格式:DOCX 页数:12 大小:76.43KB
下载 相关 举报
汇编数码显示及键盘实验实验报告.docx_第1页
第1页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第2页
第2页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第3页
第3页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第4页
第4页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第5页
第5页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第6页
第6页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第7页
第7页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第8页
第8页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第9页
第9页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第10页
第10页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第11页
第11页 / 共12页
汇编数码显示及键盘实验实验报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《汇编数码显示及键盘实验实验报告.docx》由会员分享,可在线阅读,更多相关《汇编数码显示及键盘实验实验报告.docx(12页珍藏版)》请在冰点文库上搜索。

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

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

数码显示及键盘实验

【实验内容】

1、数码管显示0-7

2、独立按键识别

【需要了解的知识】

1、GPIO设定

2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理

【实验预习】

仔细预读实验指导电子文档的实验六、七及其前面的实验流程

【实验设备】

KeilC51软件、ICE52仿真驱动、MEFlash编程软件、USB驱动程序

【实验过程】

实验一数码管显示0-7

实验任务:

1)先将“0-7”数码管的段码值写入存储器中,使8位数码管从右至左显示0-7.

实验步骤:

1)首先在硬盘上建立一个文件夹;

2)启动KeilC51软件;

3)执行KeilC51软件的菜单“Project|NewProject……”,弹出一个名为“CreateNewProject”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;

4)紧接着弹出“OptionsforTarget‘Target1’”,为刚才的项目选择ATMEL的AT89S52的CPU。

选择之后,点击“确定”按钮;

5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;

6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“SaveAs”的对话框,将文件名改为“.asm”后缀,然后保存;

7)添加源程序文件到工程中,一个空的源程序文件建成。

单击KeilC51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“SourceGroup1”文件夹弹出下拉菜单,单击其中的“AddFilestoGroup‘SourceGroup1’”项;

8)在弹出的对话框中先选择文件类型为“AsmSourcefile(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“SourceGroup1”文件夹中;

输入源程序代码;

9)点击工具栏“Optionsfortarget”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

点击Output选项,选中“CreateHexFile”,

10)单击编译按钮,编译当前源程序;

11)运行。

12)将JP21的8个短接子用短接帽短接,使数码管的位控制线与P2端口接通。

13)将JP22的9个短接子用短接帽短接,使数码管的位控制线与P0端口接通,并使VCC向数码管接口电路供电。

14)将JP24的OFF端用短接帽短接,禁止LCD1602显示功能,否则数码管将不能正常显示。

程序设计:

数码管显示的编程方法:

1)先准备好要显示的数据,放入相应的显示存储单元中。

2)根据要使用的数码管的具体位置来确定扫描初值和扫描方向。

3)根据使用数码管的个数来确定扫描的位数。

4)查表要将显示的数据转换为能使数码管正确显示相对应的段码。

5)分时送段码和位码,数码管开始循环显示。

试验流程图:

汇编源程序:

DISSTARTEQU40H;显示单元首地址

LED_DATAEQUP0;数码管数据口定义

ORG0000H;初始化

AJMPMAIN;跳转到主函数

ORG0050H;初始化

MAIN:

MOVSP,#60H;设置堆栈指针

MOVP0,#0FFH;初始化

MOVP2,#0FFH;初始化

MOVR2,#08H;8组数据

MOVR0,#DISSTART;显示存储单元首地址

MOVR1,#00H;初始化

MAIN1:

MOVA,R1;将0-7分别存入累加器A

MOV@R0,A;将0-7分别存入显示存储单元

INCR1;R1自增1

INCR2;R2自增1

DJNZR2,MAIN1;若不按键则跳转回到MAIN1

LOOP:

ACALLPLAY;循环显示

SJMPLOOP;不长按键则转移到LOOP

PLAY:

;显示子程序

MOVR0,#DISSTART;获得显示单元首地址

MOVR1,#0FEH;位码初始值

MOVR2,#08H;有8位数码管显示

DISP1:

MOVA,@R0;取要显示的数据

MOVDPTR,#TAB_NU;置段码表首址

MOVCA,@A+DPTR;根据数据查段码表

MOVLED_DATA,A;段码输出

MOVP2,R1;位码输出

MOVA,R1;准备下一次显示的位码

RLA

MOVR1,A;保存位码

INCR0;取下一个显存单元地址

ACALLDELAY;调用延时

DJNZR2,DISP1;8位数码管是否显示完

MOVP2,#0FFH;关闭显示

RET;显示完成返回

DELAY:

;1ms延时子程序

MOVR6,#5

DEL1:

MOVR7,#93

DEL2:

DJNZR7,DEL2;第一层循环

DJNZR6,DEL1;第二层循环

RET

TAB_NU:

;断码表

DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H

DB090H,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端口的LEDD00-D07

K1键按下后,D00亮

......

K8键按下后,D07亮

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

实验步骤:

1)首先在硬盘上建立一个文件夹;

2)启动KeilC51软件;

3)执行KeilC51软件的菜单“Project|NewProject……”,弹出一个名为“CreateNewProject”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;

4)紧接着弹出“OptionsforTarget‘Target1’”,为刚才的项目选择ATMEL的AT89S52的CPU。

选择之后,点击“确定”按钮;

5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;

6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“SaveAs”的对话框,将文件名改为“.asm”后缀,然后保存;

7)添加源程序文件到工程中,一个空的源程序文件建成。

单击KeilC51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“SourceGroup1”文件夹弹出下拉菜单,单击其中的“AddFilestoGroup‘SourceGroup1’”项;

8)在弹出的对话框中先选择文件类型为“AsmSourcefile(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“SourceGroup1”文件夹中;

输入源程序代码;

9)点击工具栏“Optionsfortarget”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

点击Output选项,选中“CreateHexFile”,

10)单击编译按钮,编译当前源程序;

11)运行;

12)将JP8的8个短接子全部用短接帽短接,使独立按键与相应的端口接通;

13)将JP9的VCC-VCC3短接子用短接帽短接,使VCC向发光二极管D00-D07供电;

14)将JP15短接子用短接帽短接,使蜂鸣器接口电路工作使能;

15)如果PS2接口插了键盘,请拔下键盘插头或取下JP12上的短接帽

程序流程图:

汇编源程序:

BEEPBITP3.7

ORG0000H;初始化

AJMPMAIN;跳转到主函数

ORG0050H;初始化

MAIN:

;主函数

MOVSP,#60H;设置堆栈指针

MOVP2,#0FFH;初始化

LOOP0:

MOVP0,#0FFH;关闭所有LED显示

MOVP1,#0FFH;为输入状态

MOVP3,#0FFH;初始化

ACALLSCANKEY;第一次判键

CJNEA,#0FFH,LOOP1;

AJMPLOOP0;绝对转移到LOOP0

LOOP1:

MOVR5,#2;延时20ms

ACALLDELAY;延时

ACALLSCANKEY;第二次判键

CJNEA,#0FFH,LOOP2;

AJMPLOOP0;跳转到LOOP0

LOOP2:

MOVP0,A;键值送显示

ACALLBEEP_BL;响应蜂鸣器程序

AJMPLOOP0;跳转到LOOP0

SCANKEY:

;键盘扫描子程序

MOVP1,#0FFH;为输入状态

MOVP3,#0FFH;为输入状态

MOVR0,P1;读P1端口

MOVR1,P3;读P3端口

MOVA,R0;读取P1端口

ANLA,#0F0H;保留高四位

SWAPA;低四位与高四位互换

MOVR0,A;低四位为有效位(K1-K4)

MOVA,R1;读取P3端口

RLA;左移两次

RLA

ANLA,#0F0H;高四位为有效位(K5-K8)

ORLA,R0;重新组合,键值保存在A

RET;返回

BEEP_BL:

;蜂鸣器响一声子程序

MOVR6,#200

BL1:

ACALLBL2;跳转到BL2

CPLBEEP;蜂鸣器取反产生驱动脉冲

DJNZR6,BL1;R6减1,非零则跳转到BL1

SETBBEEP;关闭蜂鸣器

MOVR5,#15;延时150ms,防止键连击

ACALLDELAY;跳转到延时子程序

RET;返回

BL2:

MOVR7,#220

BL3:

NOP

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

RET;返回

DELAY:

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

MOVR6,#50

DEL1:

MOVR7,#93

DEL2:

DJNZR7,DEL2;寄存器R7减1,非零则跳转到DEL2

DJNZR6,DEL1;寄存器R6减1,非零则跳转到DEL1

DJNZR5,DELAY;寄存器R5减1,非零则跳转到DELAY

RET;返回

END;结束

实验结果:

当有键按下,对应的LED灯亮。

K1-K8对应P0端口的LEDD00-D07

K1键按下后,D00亮

......

K8键按下后,D07亮

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

问题及解决:

1)没有正确加载烧写文件。

必须是先选芯片在加载文件

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

可重新选择型号

3)没有放置芯片。

先放芯片,再压下锁紧座手柄锁紧

4)芯片损坏。

换新的芯片重试

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

分析讨论:

经过这次试验,我发现我们在做实验时要有足够的细心和耐心,如果发现程序无法运行要认真寻找发现错误。

比如这次,我输入汇编源程序时新建txt文档后没有直接更改扩展名为asm而是直接输入源程序,之后再更改扩展名最终造成程序无法编译,直接原因是在txt文档中输入时多输入了部分空格。

经过这次教训,我以后一定会更加仔细的。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2