中山大学单片机实验文档格式.docx

上传人:b****5 文档编号:20299242 上传时间:2023-01-21 格式:DOCX 页数:13 大小:19.81KB
下载 相关 举报
中山大学单片机实验文档格式.docx_第1页
第1页 / 共13页
中山大学单片机实验文档格式.docx_第2页
第2页 / 共13页
中山大学单片机实验文档格式.docx_第3页
第3页 / 共13页
中山大学单片机实验文档格式.docx_第4页
第4页 / 共13页
中山大学单片机实验文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

中山大学单片机实验文档格式.docx

《中山大学单片机实验文档格式.docx》由会员分享,可在线阅读,更多相关《中山大学单片机实验文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

中山大学单片机实验文档格式.docx

42H中放显示的字符码,初值为0FFH

STA1:

MOVDPTR,#PCTL;

设置控制字,ABC口工作于方式0

MOVA,#82H;

AC口输出而B口用于输入

MOVX@DPTR,A

LINE:

MOVDPTR,#PC0;

将字符码从C口输出显示

MOVA,42H

CPLA

MOVDPTR,#PA;

从A口输出全零到键盘的列线

MOVDPTR,#PB;

从B口读入键盘行线值

MOVXA,@DPTR

MOV40H,A;

行线值存于40H中

CPLA;

取反后如为全零

JZLINE;

表示没有键闭合,继续扫描

MOVR7,#10H;

有键按下,延时10MS去抖动

DL0:

MOVR6,#0FFH

DL1:

DJNZR6,DL1

DJNZR7,DL0

MOVDPRT,#PCTL;

重置控制字,让A为输入,BC为输出

MOVA,#90H

MOVA,40H

刚才读入的行线值取出从B口送出

从A口读入列线值

MOV41H,A;

列线值为存入41H中

JZSTA1;

表示没有键按下

MOVDPTR,#TABLE;

TABLE表首地址送DPTR

MOVR7,#18H;

R7中置计数值16

MOVR6,#00H;

R6中放偏移量初值

TT:

MOVXA,@DPTR;

从表上取键码前半字节,行线值与实

CJNEA,40H,NN1;

际输入的行线值相等吗?

不等转NN1

INCDPTR;

相等,指针指向后半字节,即列线值

列线值与列线值

CJNEA,41H,NN2;

不相等吗?

不等转NN2

MOVDPTR,#CHAR;

相等,CHAR表基址和R6中的依偏移量

MOVA,R6;

取出相应的字条码

MOVCA,@A+DPTR

MOV42H,A;

字符码存于42H

BBB:

重置控制字,让AC为输出,B为输入

MOVDPTR,#PCTL

MOVA,#82H

AAA:

MOVA,42H;

将字符码从C口送到二极管显示

MOVDPTR,#PC0

MOVDPTR,#PA;

判断按下的键是否释放

CLRA

MOVDPTR,#PB

JNZAAA;

没有释放转AAA

MOVR5,#02;

已释则延时0.2秒,减少总线负担

DEL1:

movR4,#200

DEL2:

MOVR3,#126

DEL3:

DJNZR3,DEL3

DJNZR4,DEL2

DJNZR5,DEL1

JMPSTART;

转START

NN1:

INCDPTR;

指针指向后半字节即列线值

NN2:

INCDPTR;

指针指向下一键码前半字节即行线值

INCR6;

CHAR表偏移量加一

DJNZR7,TT;

计数值减一,不为零则转TT继续查找

JMPBBB

TABLE:

TABLE为键值表,每个键位占

DW0FE06H,0FD06H,0FB06H,0F706H;

两个字节,第一个字节为行

DW0BF06H,07F06H,0FE05H,0FD05H;

线值,第二个为列线值

DW0EF05H,0DF05H,0BF05H,07F05H

DW0FB03H,0F703H,0EF03H,0DF03H

CHAR:

字符码表

DB00H,01H,02H,03H,04H,05H,06H,07,08H,09H

DB0AH,0BH,0CH,0DH,0EH,0FH,10H,11H,12H,13H

DB14H,15H,16H,17H

END

内容二:

自编程序

一、设计一个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。

三、代码分析

PORTEQU0CFA0H

ORG4000H

MOVB,#31H

MOVR0,#30H

MAIN:

;

****************************************************************************显示函数开始

PUSHACC

PUSHPSW

ANLPSW,#0C7H

ORLPSW,#10H

DISPLAY:

;

调用显示函数

MOVA,B

CLRC

SUBBA,#30H

JZNONUM

NOP

DS1:

MOVR0,B;

R0赋予要显示段码的地址

MOVR4,#60H;

扫描需要显示60次

MOVR2,#01H;

位码的初值

MOVR5,#06H;

即使只显示一位,也要扫描六位,防止数码管烧坏

DS2:

MOVA,@R0;

A里面暂存RAM里的数据

ACALLTABLE;

取段码

MOVDPTR,#PORT;

送段码的入口地址

MOVX@DPTR,A;

送段码

MOVA,R2;

读位码

CPLA;

取反

MOVP3,A;

送位码

MOVR3,#0FFH;

适当延时

DEL:

DJNZR3,DEL;

判断地是否结束

CLRC;

清C

MOVA,R2

CLRA

MOVR2,A;

剩余五位均不显示

MOVA,R0

DJNZR5,DS2;

若没有显示到足够的码,则继续扫描

MOVR2,#20H;

重新赋给R2显示的位码

DJNZR4,DS2;

扫描60次完毕

MOVR4,#60H

SJMPDS1;

整个程序循环执行

JMPNONUM;

显示程序完,准备退出显示程序

INCA;

算上RET一个字节

MOVCA,@A+PC

RET

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

NONUM:

POPPSW

POPACC

*******************************************************************************显示函数结束

*******************************************************************************扫描函数

MOV30H,#0FEH;

设定扫描的初值

SCAN:

MOVP1,30H

MOVA,P1

CJNEA,30H,CHECK

MOVA,30H

RLA

MOV30H,A

CJNEA,#0F7H,SCAN

JMPMAIN

CHECK:

ACALLDEL1

CJNEA,30H,SEARCH

JMPSCAN

MOVR0,30H;

选取数值存储的地址首位

SEARCH:

MOV30H,A;

把A的值暂时存入30H中

MOVDPTR,#DATA1

MOVR4,#00H

LOOP:

MOVA,R4;

读取第R4个数据

MOVCA,@A+DPTR;

把R4个数据存入A

INCR4;

R4加1

MOVB,30H;

重新读出30H中的数据

CJNEA,B,LOOP;

比较30H与R4个数据是否相等

相等说明就是第R4个数据,将其赋给A

MOV@R0,A;

把A的值赋给@R0,即第几个数

MOVB,R0;

B赋值为当前存储到的地址

LJMPMAIN;

扫描结束

MOVR2,#20

MOVR3,#126

DJNZR3,DEL3

DJNZR2,DEL2

DJNZR1,DEL1

MOVR1,#10

DATA1:

DB0EEH,0EDH,0EBH,0DEH,0DDH,0DBH,0BEH,0BDH,0BBH

JM:

MOVP3,0FFH

JMPJM

END

三、现象及分析

1、每按相应的键,则在数码管上显示相应的字符

四、结论

1、因为实验箱的数码管并不有串接相应的限流电阻,所以要求我们不能用静态显示,否则将烧坏数码管。

内容三:

输入的数动态显示

一、接线方法:

二、代码分析:

PORTEQU0CFA0H

ORG4000H

MOV30H,#01H

MOV31H,#01H

MOV32H,#01H

MOV33H,#01H

MOV34H,#01H

MOV35H,#01H

MOVB,#30H

MOVB,36H;

把B赋予要显示的最后个数据的地址

JZNONUM;

若还没有键输入,则不显示

R0赋予要显示的最后一个数据地址

RRCA

MOVR2,A;

右移位码

DECR0

CJNEA,#30H,DS2;

重新赋给R0要显示的最后一个数的地址

******************************************************************显示模块结束

******************************************************************扫描模块

CJNEA,30H,CHECK

CJNEA,#0F7H,SCAN

CJNEA,30H,SEARCH

CJNEA,B,LOOP;

INCR0;

R0加1,至下一地地址

CJNEA,#37H,MAIN1;

若读到第六个数,结束

JMPJM

MAIN1:

三、实验现象及分析

1、没有键被按下时没有显示,当有键按下时,在数码管的最右边显示所按下键对应的数

2、再按键则原先的数值左移,刚被按下的键所对应的数显示在数码管的最右边

3、当按下第七个键盘的时候,数码管停止更新,熄灭。

此程序虽然能完成任务,但是数码管的亮度随着显示字符的变多而减弱,这是因为程序设计者在设计程序时不了解实验箱的内部结构,不知道单个数码管显示亮度过高会烧坏数码管。

(注:

本资料素材和资料部分来自网络,仅供参考。

请预览后才下载,期待您的好评与关注!

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

当前位置:首页 > 高中教育 > 高考

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

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