ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:19.81KB ,
资源ID:7197645      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7197645.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中山大学单片机实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中山大学单片机实验.docx

1、中山大学单片机实验实验六 键盘显示接口实验一、实验目的1、掌握8255A编程原理2、了解键盘电路的工作原理(键盘电路见附图)3、掌握键盘接口电路的编程方法4、掌握LED数码管动态显示的编程方法二、实验说明1、识别键的闭合,通常采用行扫描法和行反转法行扫描法是使键盘上某一行先为低电平,而其余行接高电平,然后读取列值,如所读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。本实验采用的是行反转法2、程序设计时,要学会灵活地对8255A的各端口进行方式设置3、程序设计时,可将各键对应的键值(行线值,列线值)放在一个表中,将要显示的0F字符放在另一个表中,通过查表来确定按下的哪一个键并

2、正确显示出来三、实验内容内容一:利用8255A做矩阵键盘一、利用实验箱上的8255A可编程并行接口芯片和矩阵键盘,编写程序,做到在键盘 每按一个数字键(0F),用发光二极管将该代码显示出来。二、连线方法:将键盘RL10RL17接8255A的PB0PB7;KA10KA12接8255A的PA0PA2;PC0PC7接发光二极管的L1L8;8255A芯片的片选信号8255CS接CS0。三、代码;8255键盘实验PA EQU 0CFA0HPB EQU PA+1PC0 EQU PB+1PCTL EQU PC0+1ORG 4000HLJMP STARTORG 4100HSTART:MOV 42H,#0FFH

3、 ;42H中放显示的字符码,初值为0FFHSTA1: MOV DPTR,#PCTL ;设置控制字,ABC口工作于方式0MOV A,#82H ;AC口输出而B口用于输入MOVX DPTR,ALINE:MOV DPTR,#PC0 ;将字符码从C口输出显示MOV A,42HCPL AMOVX DPTR,AMOV DPTR,#PA ;从A口输出全零到键盘的列线MOVX DPTR,AMOV DPTR,#PB ;从B口读入键盘行线值MOVX A,DPTRMOV 40H,A ;行线值存于40H中CPL A ;取反后如为全零JZ LINE ;表示没有键闭合,继续扫描MOV R7,#10H ;有键按下,延时10

4、MS去抖动DL0:MOV R6,#0FFHDL1:DJNZ R6,DL1DJNZ R7,DL0MOV DPRT,#PCTL ;重置控制字,让A为输入,BC为输出MOV A,#90HMOVX DPTR,AMOV A,40HMOV DPTR,#PB ;刚才读入的行线值取出从B口送出MOVX DPTR,AMOV DPTR,#PA ;从A口读入列线值MOVX A,DPTRMOV 41H,A ;列线值为存入41H中CPL A ;取反后如为全零JZ STA1 ;表示没有键按下 MOV DPTR,#TABLE ;TABLE表首地址送DPTRMOV R7,#18H ;R7中置计数值16MOV R6,#00H

5、;R6中放偏移量初值TT:MOVX A,DPTR ;从表上取键码前半字节,行线值与实CJNE A,40H,NN1 ;际输入的行线值相等吗?不等转NN1INC DPTR ;相等,指针指向后半字节,即列线值MOVX A,DPTR ;列线值与列线值CJNE A,41H,NN2 ;不相等吗?不等转NN2MOV DPTR,#CHAR ;相等,CHAR表基址和R6中的依偏移量MOV A,R6 ;取出相应的字条码MOVC A,A+DPTRMOV 42H,A ;字符码存于42HBBB: ;重置控制字,让AC为输出,B为输入MOV DPTR,#PCTLMOV A,#82HMOVX DPTR,AAAA:MOV A

6、,42H ;将字符码从C口送到二极管显示MOV DPTR,#PC0CPL AMOVX DPTR,AMOV DPTR,#PA ;判断按下的键是否释放CLR AMOVX DPTR,AMOV DPTR,#PBMOVX A,DPTRCPL AJNZ AAA ;没有释放转AAAMOV R5,#02 ;已释则延时0.2秒,减少总线负担DEL1:mov R4,#200DEL2:MOV R3,#126DEL3:DJNZ R3,DEL3DJNZ R4,DEL2DJNZ R5,DEL1JMP START ;转STARTNN1:INC DPTR ;指针指向后半字节即列线值NN2:INC DPTR ;指针指向下一键码

7、前半字节即行线值INC R6 ;CHAR表偏移量加一DJNZ R7,TT ;计数值减一,不为零则转TT继续查找JMP BBBTABLE: ;TABLE为键值表,每个键位占DW 0FE06H,0FD06H,0FB06H,0F706H ;两个字节,第一个字节为行DW 0BF06H,07F06H,0FE05H,0FD05H ;线值,第二个为列线值DW 0EF05H,0DF05H,0BF05H,07F05HDW 0FB03H,0F703H,0EF03H,0DF03HCHAR: ;字符码表DB 00H,01H,02H,03H,04H,05H,06H,07,08H,09HDB 0AH,0BH,0CH,0D

8、H,0EH,0FH,10H,11H,12H,13HDB 14H,15H,16H,17HEND 内容二:自编程序一、设计一个3X3的矩阵键盘,行和列都与用单片机P1口直接相连,用扫描法编写程序读取键盘信息,并在最左边数码管上直接显示出来。二、边线方法显示连线:数码管的段LEDA-LEDDp与LS273的00-07相连,LED1-LED6与P3.0-P3。5相连,CS273接CS0。键盘连接:列线为KA10-KA12,对应的P1.4-P1.6;行线为:RL10-RL12,对应的P1.0-P1.2。三、代码分析PORT EQU 0CFA0HORG 4000HMOV B,#31H MOV R0,#30

9、H MAIN:;*显示函数开始PUSH ACCPUSH PSWANL PSW,#0C7HORL PSW,#10HDISPLAY: ;调用显示函数MOV A,BCLR CSUBB A,#30HJZ NONUMNOPDS1:MOV R0,B ;R0赋予要显示段码的地址MOV R4,#60H ;扫描需要显示60次MOV R2,#01H ;位码的初值MOV R5,#06H ;即使只显示一位,也要扫描六位,防止数码管烧坏DS2:MOV A,R0 ;A里面暂存RAM里的数据ACALL TABLE ;取段码MOV DPTR,#PORT ;送段码的入口地址MOVX DPTR,A ;送段码MOV A,R2 ;读

10、位码CPL A ;取反MOV P3,A ;送位码MOV R3,#0FFH ;适当延时DEL:NOPDJNZ R3,DEL ;判断地是否结束CLR C ;清CMOV A,R2CLR A MOV R2,A ;剩余五位均不显示MOV A,R0DJNZ R5,DS2 ;若没有显示到足够的码,则继续扫描MOV R2,#20H ;重新赋给R2显示的位码DJNZ R4,DS2 ;扫描60次完毕MOV R4,#60H;SJMP DS1 ;整个程序循环执行 JMP NONUM ;显示程序完,准备退出显示程序TABLE: INC A ;算上RET一个字节MOVC A,A+PCRETDB 3FH,06H,5BH,4

11、FH,66H,6DH,7DH,07H,7FH,6FHNONUM:POP PSWPOP ACC;*显示函数结束;*扫描函数MOV 30H,#0FEH ;设定扫描的初值SCAN:MOV P1,30HMOV A,P1CJNE A,30H,CHECKMOV A,30HRL AMOV 30H,ACJNE A,#0F7H,SCANJMP MAINCHECK:ACALL DEL1MOV P1,30HMOV A,P1CJNE A,30H,SEARCHJMP SCAN;MOV R0,30H ;选取数值存储的地址首位SEARCH:MOV 30H,A ;把A的值暂时存入30H中MOV DPTR,#DATA1MOV

12、R4,#00HLOOP:MOV A,R4 ;读取第R4个数据MOVC A,A+DPTR ;把R4个数据存入AINC R4 ;R4加1MOV B,30H ;重新读出30H中的数据CJNE A,B,LOOP ;比较30H与R4个数据是否相等MOV A,R4 ;相等说明就是第R4个数据,将其赋给AMOV R0,A ;把A的值赋给R0,即第几个数MOV B,R0 ;B赋值为当前存储到的地址MOV A,BLJMP MAIN ;扫描结束DEL1:MOV R2,#20DEL2:MOV R3,#126DEL3:DJNZ R3,DEL3DJNZ R2,DEL2DJNZ R1,DEL1MOV R1,#10RETD

13、ATA1:DB 0EEH,0EDH,0EBH,0DEH,0DDH,0DBH,0BEH,0BDH,0BBHJM: MOV P3,0FFHJMP JMEND三、现象及分析 1、每按相应的键,则在数码管上显示相应的字符四、结论 1、因为实验箱的数码管并不有串接相应的限流电阻,所以要求我们不能用静态显示,否则将烧坏数码管。内容三:输入的数动态显示一、接线方法:显示连线:数码管的段LEDA-LEDDp与LS273的00-07相连,LED1-LED6与P3.0-P3。5相连,CS273接CS0。键盘连接:列线为KA10-KA12,对应的P1.4-P1.6;行线为:RL10-RL12,对应的P1.0-P1.

14、2。二、代码分析:PORT EQU 0CFA0HORG 4000HMOV 30H,#01HMOV 31H,#01HMOV 32H,#01HMOV 33H,#01HMOV 34H,#01HMOV 35H,#01HMOV B,#30H MOV R0,#30HMAIN:;*显示函数开始PUSH ACCPUSH PSWANL PSW,#0C7HORL PSW,#10HDISPLAY: ;调用显示函数;MOV B,36H ;把B赋予要显示的最后个数据的地址MOV A,BCLR CSUBB A,#30HJZ NONUM ;若还没有键输入,则不显示NOPDS1:MOV R0,B ;R0赋予要显示的最后一个数

15、据地址MOV R4,#60H ;扫描需要显示60次MOV R2,#20H ;位码的初值DS2:MOV A,R0 ;A里面暂存RAM里的数据ACALL TABLE ;取段码MOV DPTR,#PORT ;送段码的入口地址MOVX DPTR,A ;送段码MOV A,R2 ;读位码CPL A ;取反MOV P3,A ;送位码MOV R3,#0FFH ;适当延时DEL:NOPDJNZ R3,DEL ;判断地是否结束CLR C ;清CMOV A,R2RRC A MOV R2,A ;右移位码DEC R0MOV A,R0CJNE A,#30H,DS2 ;若没有显示到足够的码,则继续扫描MOV R0,B ;重

16、新赋给R0要显示的最后一个数的地址MOV R2,#20H ;重新赋给R2显示的位码DJNZ R4,DS2 ;扫描60次完毕MOV R4,#60H;SJMP DS1 ;整个程序循环执行 JMP NONUM ;显示程序完,准备退出显示程序TABLE: INC A ;算上RET一个字节MOVC A,A+PCRETDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHNONUM:POP PSWPOP ACC;*显示模块结束;*扫描模块MOV 30H,#0FEH ;设定扫描的初值SCAN:MOV P1,30HMOV A,P1CJNE A,30H,CHECKMOV A,30H

17、RL AMOV 30H,ACJNE A,#0F7H,SCANJMP MAINCHECK:ACALL DEL1MOV P1,30HMOV A,P1CJNE A,30H,SEARCHJMP SCAN;MOV R0,30H ;选取数值存储的地址首位SEARCH:MOV 30H,A ;把A的值暂时存入30H中MOV DPTR,#DATA1MOV R4,#00HLOOP: MOV A,R4 ;读取第R4个数据MOVC A,A+DPTR ;把R4个数据存入AINC R4 ;R4加1MOV B,30H ;重新读出30H中的数据CJNE A,B,LOOP ;比较30H与R4个数据是否相等MOV A,R4 ;相

18、等说明就是第R4个数据,将其赋给AINC R0 ;R0加1,至下一地地址MOV R0,A ;把A的值赋给R0,即第几个数MOV B,R0 ;B赋值为当前存储到的地址MOV A,BCJNE A,#37H,MAIN1 ;若读到第六个数,结束JMP JMMAIN1:JMP MAINDEL1:MOV R2,#20DEL2:MOV R3,#126DEL3:DJNZ R3,DEL3DJNZ R2,DEL2DJNZ R1,DEL1MOV R1,#10RETDATA1:DB 0EEH,0EDH,0EBH,0DEH,0DDH,0DBH,0BEH,0BDH,0BBHJM: MOV P3,0FFHJMP JMEND三、实验现象及分析1、没有键被按下时没有显示,当有键按下时,在数码管的最右边显示所按下键对应的数2、再按键则原先的数值左移,刚被按下的键所对应的数显示在数码管的最右边3、当按下第七个键盘的时候,数码管停止更新,熄灭。四、结论 此程序虽然能完成任务,但是数码管的亮度随着显示字符的变多而减弱,这是因为程序设计者在设计程序时不了解实验箱的内部结构,不知道单个数码管显示亮度过高会烧坏数码管。 (注:本资料素材和资料部分来自网络,仅供参考。请预览后才下载,期待您的好评与关注!)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1