汇编数码显示及键盘实验实验报告.docx
- 文档编号:5598309
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:12
- 大小:43.79KB
汇编数码显示及键盘实验实验报告.docx
《汇编数码显示及键盘实验实验报告.docx》由会员分享,可在线阅读,更多相关《汇编数码显示及键盘实验实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
汇编数码显示及键盘实验实验报告
数码显示及键盘实验
【实验内容】
1、数码管显示0-7
2、独立按键识别
【需要了解的知识】
1、GPIC设定
2、数码管动态扫描显示原理,键盘扫描工作原理,输入与输出及其处理
【实验预习】
仔细预读实验指导电子文档的实验六、七及其前面的实验流程
【实验设备】
KeilC51软件、ICE52仿真驱动、MEFIash编程软件、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
软件左边项目工作窗口“Targetl”上的“+”,将其展开。
然后右击“SourceGroupT文件夹弹出下拉菜单,单击其中的“AddFilestoGroup'SourceGroupl'”项;
8)在弹出的对话框中先选择文件类型为“AsmSourcefile
(*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工
作窗口的“SourceGroupl”文件夹中;
输入源程序代码;
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)分时送段码和位码,数码管开始循环显示。
试验流程图:
■祚曙国((址B0-40H:
晝位扫胃航愼WI-FLH;
■杞幡衣苍R2=O8H)
■出也码列P2
贱即2示
;显示单元首地址
;数码管数据口定义
;初始化
;跳转到主函数
;初始化
;设置堆栈指针
;初始化
汇编源程序:
DISSTARTEQU40H
LED_DATAEQUP0
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVSP,#60H
MOVP0,#0FFH
MOVP2,#0FFH
MOVR2,#08H
MOVR0,#DISSTART
MOVR1,#00H
MAIN1:
MOVA,R1
MOV@R0,A
INCR1
INCR2
DJNZR2,MAIN1
LOOP:
ACALLPLAY
SJMPLOOP
PLAY:
MOVR0,#DISSTART
MOVR1,#0FEH
MOVR2,#08H
DISP1:
MOVA,@R0
MOVDPTR,#TAB_NU
MOVCA,@A+DPTR
MOVLED_DATA,A
MOVP2,R1
MOVA,R1
RLA
MOVR1,A
INCR0
ACALLDELAY
;初始化
;8组数据
;显示存储单元首地址
;初始化
;将0-7分别存入累加器A
;将0-7分别存入显示存储单元
;R1自增1
;R2自增1
;若不按键则跳转回到MAIN1
;循环显示
;不长按键则转移到LOOP
;显示子程序
;获得显示单元首地址
;位码初始值
;有8位数码管显示
;取要显示的数据
;置段码表首址
;根据数据查段码表
;段码输出
;位码输出
;准备下一次显示的位码
;保存位码
;取下一个显存单元地址
;调用延时
DJNZR2QISP1
MOVP2,#0FFH
RET
DELAY:
MOVR6,#5
DEL1:
MOVR7,#93
DEL2:
DJNZR7,DEL2
DJNZR6,DEL1
RET
TAB_NU:
;8位数码管是否显示完
;关闭显示
;显示完成返回
;1ms延时子程序
;第一层循环
;第二层循环
;断码表
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”上的“+”,将其展开。
然后右击“SourceGroupT文件夹弹出下拉菜单,单击其中的“AddFilestoGroup‘SourceGroup1"项;
8)在弹出的对话框中先选择文件类型为“AsmSourcefile(*.s*;*src;*a*)”,这时对话框内创建的空的源程序文件已经出现在项目工
作窗口的“SourceGroupl”文件夹中;
输入源程序代码;
9)点击工具栏“Optionsfortarget”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。
点
击Output选项,选中“CreateHexFile”,
10)单击编译按钮,编译当前源程序;
11)运行;
12)将JP8的8个短接子全部用短接帽短接,使独立按键与相应的端口接通;
13)将JP9的VCC-VCC短接子用短接帽短接,使VCQ向发光二极管D00-D07供电;
14)将JP15短接子用短接帽短接,使蜂鸣器接口电路工作使能;
15)如果PS2接口插了键盘,请拔下键盘插头或取下JP12上的短接帽
程序流程图:
图6.16EX6KEY流程图
汇编源程序:
BEEPBITP3.7
ORG0000H
AJMPMAIN
ORG0050H
MAIN:
MOVSP,#60H
MOVP2,#0FFH
LOOP0:
MOVP0,#0FFH
MOVP1,#0FFH
MOVP3,#0FFH
ACALLSCANKEY
CJNEA,#0FFH,LOOP1
AJMPLOOP0
LOOP1:
MOVR5,#2
ACALLDELAY
ACALLSCANKEY
CJNEA,#0FFH,LOOP2
AJMPLOOP0
LOOP2:
MOVP0,A
ACALLBEEP_BL
AJMPLOOP0
;初始化
;跳转到主函数
;初始化
;主函数
;设置堆栈指针
;初始化
;关闭所有LED显示
;为输入状态
;初始化
;第一次判键
?
;绝对转移到LOOP0
;延时20ms
;延时
;第二次判键
?
;跳转至ULOOP0
;键值送显示
;响应蜂鸣器程序
;跳转至ULOOP0
;键盘扫描子程序
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
DJNZR5QELAY
;寄存器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文档中输入时多输入了部分空格。
经过这次教训,我以后一定会更加仔细的。
新年快乐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 数码 显示 键盘 实验 报告