微机实验10(外扩按键及数码管)_第1页
微机实验10(外扩按键及数码管)_第2页
微机实验10(外扩按键及数码管)_第3页
微机实验10(外扩按键及数码管)_第4页
微机实验10(外扩按键及数码管)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、综合设计性实验预习报告实验项目: 多功能I/O接口扩充设计 一 引言:利用外扩键盘、数码管实现按键输入与数码管显示。二 实验目的:1.进一步熟悉接口、熟悉键盘控制和七段数码管及其他芯片的使用2.学习并掌握8255的各种工作方式及其应用。3.熟练掌握8255编程。三 实验原理:1、键盘及扫描程序行列式键盘有八行二列,与8255A接口芯片连接使用。如附图所示,八根行列线与PA口相连,两根列线与PC口的PC6、PC7相连。按键设置在行、列交点处,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V,键盘中有哪个键被按下由行线输出状态和列线读入状态来判断。(1)先判断键盘上无键被按下。输出行线P

2、A7至PA0全为零,然后读入列线PC6、PC7的状态,若全为“1”,则该行没有键按下;若不全为“1”则说明有键被按下。(2)确定按下键的键值。键值=行号+列号*8行号: 输出行线PA7至PA0:01111,111011111,110121111,101131111,011141110,111151101,111161011,111170111,1111列号:读入行线PC7PC6:010101求出按下键的键值后可安排一些条件转移指令,使程序转到相应的地址去完成该键的操作。(3)保证键闭合一次,CPU只进行一次键功能操作。由于程序运行的速度较快,可能在按键还没释放前相应的程序就运行完了,导致CPU

3、对同一次键闭合重复响应。为了避免这种情形发生,程序中必须加入等待键释放的程序。具体方法是判断PC6、PC7是否全为一,若是则本次按键已释放,可以把键号送累加器;否则本次按键未释放,继续等待按键释放。(4)去除按键的机械抖动的影响。对于由机械触点构成的按键,由于机械触点的弹性作用,触点在闭合及断开的瞬间会有一个抖动过程,一般为5ms至10ms。为了消除抖动影响,在编写程序时可作以下处理:当判断有键按下后,先延迟一段时间,然后再判断一次键盘状态,如果仍判断为有键按下状态,则认为有一个确定的键按下,否则当作是按键抖动处理。2、LED显示器及显示子程序六位LED显示板的引脚连接如图所示。LED数码管采

4、用动态显示方式工作,即在每一瞬间只使某一位显示相应字符。在此瞬间,8255A的PB7至PB0输出相应字符段码,8255A的PC2-PC0输出显示位的位码给74LS138,经过74LS138译码后选中显示位。如此轮流,使每位显示相应字符,并保持延迟一段短时间,约1至5ms,以造成视觉暂留效果。不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。 +5V 四 实验内容:自己制作外扩16位按键,6位显示数码管。利用外扩的按键与数码管实现按键输入与数码管显示。五 重点问题:程序编写、电路调试六 参考文献:广州大学微机原理实验指导书(10-11-1)林土胜单片机技术及工程实践北京:机械工业出

5、版社广州大学实验原始数据记录表实验项目 多功能I/O接口扩充设计 指导教师 姓 名 班 别 学 号 学 院 专 业 实验进行时间 年 月 日第 周 , 时至 时;实 验 地 点 电子信息科学与技术503 原始数据记录(自行设计记录表格):注:此表格必须附在实验报告内一并交给任课老师。指导教师对学生情况记录:综合设计性实验实验报告实验名称: 多功能I/O接口扩充设计 一 引言:利用外扩键盘、数码管实现按键输入与数码管显示。二 实验要求:自己制作外扩16位按键,6位显示数码管。利用外扩的按键与数码管实现按键输入与数码管显示。三 实验仪器:1、电脑2、伟福编译器3、伟福实验箱四 实验步骤:(1) 制

6、作外扩电路板。(2) 输入程序并检查,保存程序。(3) “编译”程序。(4) “全速执行”程序。(5) 记录实验结果及分析。五 数据处理及实验结果表示:初始化后会显示两个人的学号,当按键触发时,则显示相应触发的按键值,右移显示。六 实验结果分析:本实验按照预期的效果,实现了利用外扩的按键与数码管实现按键输入与数码管显示。七 实验心得: 由于是外扩硬件,而母体在实验室,所以调试程序有所困难,此时,仿真及理论就比较重要了,所以,我们应该重视仿真的练习以及理论的加深。 八 参考文献:广州大学微机原理实验指导书(10-11-1)林土胜单片机技术及工程实践北京:机械工业出版社九 附录(程序源代码等,应有

7、适当的注释):MODE EQU 88H ;PA方式0输出,PB方式0输出,PC高位输入低位输出KEYLL EQU 8001H ;键盘行地址LEDD EQU 8002H ;数码管段地址LEDBIT EQU 8000H ;数码管位地址CTRL EQU 8003H ;控制字地址KEYL EQU 41H ;列线键值KEYH EQU 42H ;行线键值LEDBUF EQU 43H ;显示缓冲区 ORG 0000H LJMP MAIN ORG 0100H;显示码LEDTAB: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5

8、EH,79H,71H;查键TESTKEY:MOV DPTR,#KEYLL MOV A,#0 MOVX DPTR,A ;行线输出全为0 MOV DPTR,#LEDBIT MOVX A,DPTR ;获取列线值 ANL A,#0C0H CJNE A,#0C0H,TESTL;列线不全为高,有键按下,则跳转 CLR A ;列线全为高,未有键按下,清标志 RETTESTL:MOV R3,#10 LCALL DL ;调用延时函数进行延时去抖动 MOVX A,DPTR ANL A,#0C0H CJNE A,#0C0H,GETL1;确实有键按下,跳转获取列线值 CLR A ;未有键按下,清标志 RET;查列值G

9、ETL1:CJNE A,#80H,GETL2 ;若不是次高位列线按下,则跳转 MOV KEYL,#0 ;次高位列线按下,赋列线值 LJMP GETR ;跳转到查行线值GETL2:CJNE A,#40H,trn ;若不是最高位列线按下,则跳转 MOV KEYL,#1 ;最高位列线按下,赋列线值 LJMP GETR ;跳转到查行线值trn: RET;查行值GETR:MOV R0,#0 ;R0为行线值 MOV A,#0FEH ;A为行线测试值,由低到高逐位为0进行检测GLP:MOV B,A ;备份当前测试值 MOV KEYH,R0 ;获取行线值 MOV DPTR,#KEYLL MOVX DPTR,A

10、 ;输出行线测试值 MOV DPTR,#LEDBIT MOVX A,DPTR ;获取列线值 ANL A,#0C0H CJNE A,#0C0H,WAIT ;有键按下,跳转等待键释放 INC R0 ;行线值加1 MOV A,B ;备份行线测试值赋值给A寄存器 RL A ;A寄存器值左移 CJNE R0,#8,GLP ;循环8次 RET;读键取显示码GETKEY:MOV A,KEYL RL A RL A RL A ;行线值左移8位,相当于乘以8 ADD A,KEYH ;行线值左移8位后与列线值相加,结果放在A寄存器中 MOV DPTR,#LEDTAB ;装显示码表头 MOVC A,A+DPTR ;读

11、显示码 RET;显示左移LM:MOV R0,LEDBUF+5 CJNE R0,#0,LLP ;若最后一位有显示,则跳转,进行显示左移 MOV LEDBUF+5,A ;若最后一位无显示,则在最后一位显示键值 RETLLP:MOV LEDBUF,LEDBUF+1 MOV LEDBUF+1,LEDBUF+2 MOV LEDBUF+2,LEDBUF+3 MOV LEDBUF+3,LEDBUF+4 MOV LEDBUF+4,LEDBUF+5 MOV LEDBUF+5,A ;显示左移,最后一位为最近一次的键值 RET;查键释放WAIT:LCALL DISPLAY ;显示 MOV A,#0 MOV DPTR

12、,#KEYLL MOVX DPTR,A ;赋行线值 MOV DPTR,#LEDBIT MOVX A,DPTR ;获取列线值 ANL A,#0C0H CJNE A,#0C0H,WAIT ;等待键释放 MOV R3,#10 LCALL DL ;延时 MOVX A,DPTR ANL A,#0C0H CJNE A,#0C0H,WAIT ;按键确实释放 RET;延时子函数DL: MOV R4,#0DL0: DJNZ R4,DL0 DJNZ R3,DL RET;显示DISPLAY:MOV R2,#6 ;R2值指示动态扫描位 MOV R1,#30H ;R1值控制三-八译码器的输入端选择显示位 MOV R0,

13、#LEDBUF ;R0装显示码DLP:MOV A,#00H MOV DPTR,#LEDD MOVX DPTR,A ;初始显示 MOV A,R0 MOV DPTR,#LEDD MOVX DPTR,A;赋显示段码 MOV A,R1 MOV DPTR,#LEDBIT MOVX DPTR,A ;选择位码 MOV R3,#100 LCALL DL ;延时 DEC R2 ;改变扫描位 INC R1 ;选择位加1 CJNE R1,#60H,DLP1 MOV R1,#00H;改变选择位DLP1:INC R0;装下一个显示码 CJNE R2,#0,DLP ;循环6次 RET;初始化函数INIT:MOV DPTR,#CTRL MOV A,#MODE MOVX DPTR,A ;置8255工作方式0 MOV LEDBUF+0,#6DH MOV LEDBUF+1,#AFH MOV LEDBUF+2,#AFH MOV LEDBUF+3,#07H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论