单片机实验讲义
单片机原理实验讲义

10H
2000H
变址寻址示意图
返 回
相对寻址
以当前程序计数器PC的内容为基础,加上指 令给出的一字节补码数(偏移量)形成新的 PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序 的分支转移。
例:SJMP 08H
51 单 片 机 的 引 脚 配 置 图
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST/VPD RXD/P3.0 TXD/P3.1 INT0/P3.2 INT1/P3.3 T0/P3.4 T1/P3.5 WR/P3.6 RD/P3.7 XTAL2 XTAL1 VSS
地 址 锁 存 器
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 D7 D6 D5 D4 D3 D2 D1 D0
AB
DB
MCS-51单片机存储器结构
FFH 特 殊 功 能 寄 存 器 F0H E0H D0H B8H B0H A8H A0H 98H 90H 88H 80H FFFFH 特 殊 功 能 寄 存 器 中 位 寻 址 FFFFH
实验准备
实验课前,学生必须预习实验指导书中的实验内 容,了解本次实验的目的、要求、仪器设备、实验原 理、实验步骤等;实验过程中,按照指导老师的要求 进行实验,遵守仪器设备的操作规程;实验结束后, 应将实验数据或结果送交指导老师审阅、签字,然后 将仪器恢复原状并搞好实验现场的环境卫生,经许可 后方可离开实验室。
1 0.256 s
1 0.256 (1 0.256 X 1 0.256 1 0.256) 200 0.110
单片机原理实验讲义(DOC)

目录实验一、单片机集成开发环境入门实验二、I/O口输入输出实验――循环灯程序设计实验三、I/O口输入输出实验――LED数码管动态显示与按键去抖程序设计实验四、定时器应用实验――LED数码动态显示与矩阵键盘赋值程序设计实验五、计数器应用实验――基于热敏电阻和555时基电路的简易温度计设计实验一、单片机集成开发环境入门一、实验目地1.掌握单片机集成开发软件“W A VE 3.2”的开发环境配置。
2.掌握单片机集成开发软件“WA VE 3.2”的基本功能,了解MCS-51系列单片机应用系统的软件开发过程。
●掌握创建工程项目和管理工程项目的方法。
●掌握MCS-51系列单片机汇编程序的编辑、编译方法。
●掌握MCS-51系列单片机汇编程序的仿真调试方法和观察窗口的使用。
二、实验设备PC 兼容机一台,操作系统为WindowsXP,安装有单片机集成开发软件“W A VE3.2”。
三、实验原理1.单片机集成开发软件“W A VE 3.2”简介单片机应用程序的设计步骤通常可分为以下几步:(1)根据单片机应用系统的功能进行算法构思和设计,画出程序流程图;(2)用单片机汇编语言、C语言或PLM语言(初学者一般应采用汇编语言)编写源程序;(3)将源程序翻译成单片机可执行的机器码程序,即所谓的目标程序,该过程称为汇编或编译;(4)程序调试,将目标程序下载到目标单片机(即应用系统板中的单片机),运行目标程序,对运行结果进行监控。
若运行结果与预期结果相符,程序正确,调试结束;否则由结果的差异分析算法或程序的可能错误,重复步骤2至4,修改源程序、重新汇编、再调试,直至程序正确。
以上步骤2至4可应用单片机集成开发软件在个人计算机上完成。
“W A VE 3.2”是一款功能强大的单片机集成开发软件,可开发多个系列的单片机应用系统。
该软件主要功能有:(1)集成了文本编辑器,可对源程序进行编辑、修改;(2)集成了汇编器,可对源程序进行汇编,自动查找源程序中的语法错误,并将无语法错误的源程序翻译成目标程序;(3)集成了仿真调试器,可对目标系统进行在线仿真调试,也可在个人计算机上对目标程序进行模拟仿真调试。
单片机实验讲义

单片机原理与应用实验指导书(电科07用)扬州大学物理学院电子教研中心张凯2009.3Keil集成开发环境介绍Keil C51是由Keil Software公司出品的51系列兼容单片机C语言软件开发系统,是目前最流行的开发MCS-51 系列单片机的软件。
Keil C51提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部份组合在一起。
μVision for Windows是Keil C51在32位Windows环境的版本,它的人机界面友好,操作方便,是开发者的首选。
运行Keil 软件需要Pentium 或以上的CPU,16MB或更多RAM,20M 以上空闲的硬盘空间,WIN98、NT、WIN2000、WINXP等操作系统。
一、Keil 工程的建立、设置与编译连接首先启动Keil 软件的集成开发环境,如果已正确安装了该软件,可以从桌面上直接双击μVision的图标以启动该软件。
启动画面如图。
μVision启动后,程序窗口的左边有一个工程管理窗口,该窗口有5个标签,分别是Files、Regs、Books、Functions和Templates,这三个标签页分别显示当前项目的文件结构、CPU 的寄存器及部份特殊功能寄存器的值(调试时才出现)、所选CPU 的附加说明文件、函数和模板,如果是第一次启动Keil,那么这三个标签页全是空的。
1、建立工程在项目开发中,首先要为这个项目选择CPU(Keil 支持数百种CPU,而这些CPU的特性并不完全相同),确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等,为管理和使用方便,Keil 使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译(汇编)和连接等操作,下面我们就一步一步地来建立工程。
单片机原理与应用实验讲义

单片机原理与应用实验讲义第一局部 DVCC—52JH+单片机仿真系统仿真器是一种计算机〔单片机〕应用系统的开发工具,也称为开发机,用户设计的系统〔硬件和软件〕,在仿真器的控制下进行逐步调试以期到达设计要求。
仿真系统提供编辑、汇编、反汇编、监控命令和高级语言编辑等工具帮助用户设计、调试和修改用户系统的硬件和软件。
因此,熟悉仿真系统的使用与掌握微机或单片机原理具有同等重要性。
DVCC—52JH+单片机仿真系统主要用于MCS—51系列单片机的仿真开发。
由于随机器附带的操作手册内容繁琐,特别是接口地址分配的不透明,给用户使用带来不便,为了使初学者能在较短时间内高效率地掌握开发系统主要功能及根本使用方法,第一局部有针对性地介绍DVC—52JH+的操作使用,这是完成第二局部实验必须先修的内容。
第一节键盘监控命令简介一、键盘布局每个键中央标注的文字是单片机仿真系统的控制命令表示,大局部键有两个功能或作用,如77R 键表示存放器R7或数字7。
整个键盘分为两大局部,左边的16个键是数字0~F 键或存放器代码键;右边的16个键是功能键,功能键通常与数字键互相配合进行程序调试。
二、数据的显示单片机仿真系统采用LED 〔发光二极管〕七段显示器作数据显示,共有6个LED ,如图1所示,其中“·〞用来显示小数点。
左边的4个LED 一般用于显示程序存储器和数字存储器的地址,右边的2个LED 用来显示对应地址单位的内容。
图1:LED 显示器1、程序存储器和片外数据存储器用4位十六进数表示地址,占满了左边4个LED 。
例如,输入102F ,左边4个LED 显示该数102F ,假设再按MEM 键〔表示程序存储器〕,右边2个LED 那么显示程序存储器102FH 单元的内容;假设输入102F 后再按ODRW 〔表示片外数据存储器〕,左边2个LED 显示片外数存102FH 单元的内容。
2、片内数据存储器有两种显示方式。
〔1〕R0~R7、DPL 、DPH 、A 、B 、PSW 、PCH 、PCL 和SP 这16个存放器键盘上已有,只需按该键一次,左边4个LED 显示一位对应的代码,右边2个LED 就能显示相应单元的内容。
单片机实验讲义

3
第二章 DICE-5210K 单片机实验开发系统介绍
ห้องสมุดไป่ตู้
信息学院
第二章 DICE-5210K单片机实验开发系统介绍
DICE-5210K多功能单片机实验开发系统为51单片机相 关课程提供配套的实验。以小系统、多功能、易扩展为设 计思想,系统的地址总线、数据总线、控制总线全部引出, 对用户开放,并留有扩展单元(区),教师可以从需要出 发,灵活选配各种扩展模块,可为各类院校的实验教学、 课程设计、毕业设计提供了良好的实验开发环境,也是科 研、开发工作者的得力工具。图2-1 DICE-5210K单片机实 验箱。
2
单片机实验讲义
可在现场完成仿真调试工作。 1.2 应用系统的开发过程 一般来说,随着用途的不同,应用系统的硬件和软件结构也不相同,但研制、开发的方
法和步骤基本上是相同的。综合前面所讲的内容,可以看出应用系统的开发过程主要有下面 几个步骤;
1. 预研; 2. 总体设计; 3. 系统硬件设计; 4. 系统软件设计; 5. 仿真调试(包括按件调试和软件调试); 6. 固化应用程序,脱机运行。
单片机实验讲义
第一章 单片机仿真系统与单片机应用系统的开发
一个单片机应用系统经过预研、总体设计、硬件设计、软件设计、制板、元器件安装后, 在系统的程序存储器中放入编制好的应用程序,系统即可运行。但一次性成功几乎是不可能 的,多少会出现一些硬件、软件上的错误,这就需要通过调试来发现错误并加以改正。由于 单片机在执行程序时人工是无法控制的,为了能调试程序,检查硬件、软件运行状态,就必 须借助某种开发工具模拟用户实际的单片机,并且能随时观察运行的中间过程而不改变运行 中原有的数据性能和结果,从而进行模仿现场的真实调试。完成这一在线仿真工作的开发工 具就是单片机在线仿真器。
单片机实验讲义

单片机实验指导书实验软件的学习一:学生学会应用两个关于单片机的软件,KEIL 软件的应用如下:安装好软件后由下列的图示进入程序的编写和调试。
先建一个工程,点Project.出现一个界面。
接着进行下一步。
点击NEW Project保存文件,可以是任意的文件名和保存路径。
按保存。
出现界面后选择Atmel,双击,找到AT89C51,按确定。
右击Target 1弹出如上图界面。
点击option for target 1.弹出如图窗口24改成12,接着点击output,出现下面窗口在creat hex 前的小格打钩。
按确定即可。
点击FILE ,点击NEW.弹出如图窗口接着保存,路径随意。
但文件名要在名称后面加后缀名。
C.即YU.C点击TARGET1前的框,弹出上图,右击source group.弹出下面窗口。
点击ADD FILE TO,选到路径后找到刚才所保存的.C文件。
即可。
可以在里边编写程序编译完成后点击就可。
成功后就可以退出进行下一步。
下面学习Proteus软件点击左边的P,进行元件的选择。
输入所需要找的元件即可。
双击调出。
即可以连线。
保存好后进行下一步。
双击89C51路径哪里选择刚才KEIL保存的路径底下的HEX文件即可。
工程项目一闪烁的LED灯实验目标初步学会KEIL和仿真软件的使用。
懂得编写一个简单的闪烁灯程序。
实验要求在KEIL上编写程序进行调试,并进行仿真。
实验原理LED发光二级管的阳极给高电平(1),阴极给低电平(0)时,二极管就可以点亮,同理在相反的电平信号下二极管就会熄灭。
实验内容1,一个灯进行闪烁,并仿真。
2,在原来基础上将一个灯进行改进,要求学生做8个LED灯同时闪烁。
3,进一步改进,做到16个LED灯闪烁。
4,要求在原来程序基础上修改延时时间。
实验参考程序和电路图闪烁的LED/* 名称:闪烁的LED说明:LED 按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0; //延时void DelayMS(uint x) {uchar i;while(x--) { for(i=0;i<120;i++);} } //主程序void main() { while(1) {LED=~LED;DelayMS(150); } }实验过程下面空白的地方由学生编写16个LED灯闪烁的程序,要求延时时间比较长。
单片机原理与应用实验讲义

《单片机原理与应用》实验讲义实验要求及注意事项一.预习实验内容1. 明确本次实验目的及任务,了解和掌握实验所需的理论知识。
2. 通过课上老师讲解,掌握编程方法及相关技巧。
3. 对每次实验,选择一个题目自己试着独立设计编写整个程序。
二.实验过程1. 在实验箱上实验时,连接实验导线一定要关闭实验箱电源,连接好后,在检查一遍是否有误,连接正确后,再依次打开实验箱电源开关及实验底板上电源开关,进行实验。
严禁带电操作。
2. 实验箱底板上的所有芯片出厂时经过严格测试和老化,实验时切忌插拔。
3. 带上理论课教材、实验指导书及准备的实验程序。
4. 调试实验程序,记录实验结果。
5. 实验结束后,关闭实验底板上的电源开关及实验箱电源开关,确认关闭后,整理好自己的实验导线,摆放老师交代的地方。
三.编写实验报告1. 实验题目。
2. 分析设计思想,绘制实验原理图、流程图。
3. 程序清单及相关注释。
4. 分析实验结果。
5. 说明在实验过程中遇到了哪些问题,是如何处理的。
6. 收获体会,不足之处和今后应注意的问题等。
实验目录实验一、单片机P1口实验(02 广告流水灯控制实验)实验二、外部中断实验(12单一外部中断实验)实验三、单片机定时/计数器实验(14 定时器实验)实验四、单片机与与矩阵键盘接口(32 PS/2 键盘实验)实验五、单片机与A/D转换器实验(31 模/数转换器(ADC0809)实验)实验六、单片机串行口实验(16 串行通信RS232 实验)实验一、单片机P1口实验(02 广告流水灯控制实验)一.实验目的1.以P1 口为例,学会使用51 系列单片机I/O 口的基本输出功能;2.学习循环指令的用法和软件延时的编程方法;3. 掌握RR.RL 指令的用法;二.实验内容编写程序,利用单LED 灯有条件的左右扫描,八个LED 发光二极管L0-L7 分别接在单片机的P1.0-P1.7 接口上,输出“0”时,发光二极管点亮,输出”1”时,发光二极管灭,先由右至左P1.0→P1.1→P1.2→P1.3→┅→P1.7 ,再由左往右P1.7→P1.6→┅→P1.0 亮,重复循环下去。
MCS-51单片机实验讲义

- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一软件实验1.1 实验目的通过实验熟悉DAIS软件仿真环境和MCS-51系列单片机指令系统。
掌握程序编制、调试方法和技巧。
1.2 实验内容1、把R1中内容传送至R0中。
2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
5、应用MOVC A,@A+PC指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:当x>=50时y=x;当x<50时y=5x。
8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H31H单元中,(要求将ASCII码转换部分设计为子程序)。
汇编语言程序如下;1、把R1中内容传送至R0中。
;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中。
;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中。
;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
org 0000hmov r1,#22hmov a,r1 ;1、把R1中内容传送至R0中mov r0,amov 20h,#33hmov 30h,20h ;2、把内部数据存储器20H单元中的内容传送至内部数据存储器30H单元中mov dptr,#2000h ;3、把外部数据存储器2000H单元中的内容传送至内部数据存储器20H单元中mov a,#66hmovx @dptr,aclr amovx a,@dptrmov dptr,#2000h ;4、把外部程序存储器2000H单元中的内容传送至内部数据存储器20H单元中。
clr amovc a,@a+dptrsjmp $org 2000hdb 88hend;5、应用MOVC A,@A+dptr指令求累加器A的平方值Y(设Y<=255),并把结果送至R7中保存。
org 0000hmov a,#3h ;查3的平方值mov dptr,#tab ;指向平方表的表头movc a,@a+dptr ;查表指令sjmp $tab:db 0,1,4,9,16,25,36,47,64,81,100,121,144,169,196,255;平方表end;6、将(R2R3)和(R4R5)中的双字节无符号数相加,结果存放在40H和41H单元中。
org 0000hclr cmov r2,#22hmov r3,#33hmov r4,#44hmov r5,#55hmov a,r3add a,r5mov 40h,amov a,r2addc a,r4mov 41h,asjmp $end;7、设自变量X为一无符号数,存放在内部数据存储器的V AX单元,函数Y存放在FUNC 单元,请编写满足如下关系的程序:;当x>=50时y=x;;当x<50时y=5x。
V AX equ 30HFUNC equ 40Horg 0000hmov V AX,#10mov a,V AXcjne A,#50,fen1fen1:jc fen2 ;小于50跳到fen2sjmp exit1fen2:mov b,#5mul abexit1:mov func,asjmp $end;8、在外部数据存储器从2000H到2030H地址单元中存放有一数据块,请将它们分别传送至3000H单元到3030H单元中。
org 0000hmov dptr,#2000hmov r2,#31hloop:movx a,@dptrmov dph,#30hmovx @dptr,ainc dplmov dph,#20hdjnz r2,loopsjmp $end;9、将8051片内的数据存储器20H单元中存放的单字节二进制数,转化为ASCII码,存放在30H,31H单元中,(要求将ASCII码转换部分设计为子程序)。
org 0000hmov 20h,#2ahmov a,20hanl a,#0fhacall asc1mov 30h,amov a,20hanl a,#0f0hswap aacall asc1mov 31h,asjmp $asc1:cjne a,#10,fen1 ;ASCII码转换子程序fen1:jc fen2add a,#7hfen2:add a,#30hretsjmp $end实验二定时器/计数器实验2.1实验目的熟悉定时器/计数器的工作原理并掌握其编程方法和技巧,加深对中断的理解及运用。
2.2实验内容1、利用定时器T0的方式1编制一段程序,在P1.7引脚上输出一个方波控制一个红色指示灯。
①输出周期为40ms的方波,观察指示灯的变化。
②输出周期为200ms的方波,观察指示灯的变化。
2、利用计数器T1(P3.5)记录脉冲的个数。
每计满10个脉冲,使灯亮1秒,然后重新计数,循环以上操作。
外部脉冲通过实验箱右上角的/SP获得。
3.3实验预习1、熟悉MCS-51系列单片机定时器/计数器系统硬件结构与工作原理。
2、掌握定时器/计数器的编程方法,初值的计算方法等。
3、掌握查询方法和中断方式两种方法处理定时/计数的问题。
3.4注意事项1、注意定时器/计数器4种工作模式的选择以及初值的计算方法。
2、注意中断程序的应用方法。
3、实验系统的晶振为6MHz。
汇编语言程序如下;1、利用定时器T0的方式1编制一段程序,在P1.7引脚上输出一个方波控制一个红色指示灯。
;①输出周期为40ms的方波,观察指示灯的变化。
;②输出周期为1s的方波,观察指示灯的变化。
;实验二1、①org 0000hajmp mainorg 000bhajmp t0fworg 0030hmain:mov tmod,#01h ;T0定时器方式1mov th0,#0D8H ;20ms=10000个MC,因为计数1个内部脉冲为2微妙。
mov tl0,#0F0H ;初值=65536-10000=55536=0D8F0Hsetb easetb et0setb tr0sjmp $t0fw:mov th0,#0D8Hmov tl0,#0F0Hcpl p1.7retiend;实验二1、②org 0000hajmp mainorg 000bhajmp t0fworg 0030hmain:mov tmod,#01h ;T0定时器方式1mov th0,#3CH ;100ms=50000个MCmov tl0,#0B0H ; 初值=65536-50000=15536=3CB0Hsetb easetb et0setb tr0mov r7,#05hsjmp $t0fw:mov th0,#3CHmov tl0,#0B0Hdjnz r7,rtmov r7,#05hcpl p1.7rt:retiend;2、利用计数器T1(P3.5)记录脉冲的个数。
每计满10个脉冲,使灯亮1秒,然后重新计数,循环以上操作。
外部脉冲通过实验箱右上角的/SP获得。
;只利用T1计数,定时用软件定时org 0000hajmp mainorg 001bh;计数器T1中断入口,对外部脉冲计数ajmp t1fworg 0030hmain:mov tmod,#60h ;T1计数器方式2,8位自动重装初值计数器,GATE=0,C/T=1 mov th1,#0F6H ;输入10个脉冲引起中断mov tl1,#0F6Hsetb easetb et1setb tr1sjmp $t1fw: ;计数器T1中断子程序clr p1.7 ;亮灯acall dy1s ;1秒setb p1.7 ;灭灯retidy1s:mov r7,#04h ;1秒=250*4个1msm2:mov r6,#0fahm1:mov r5,#0fahdjnz r5,$ ;内循环=250*4μs=1msdjnz r6,m1djnz r7,m2retend;或者利用T1计数,T0定时org 0000hajmp mainorg 000bhajmp t0fworg 001bhajmp t1fworg 0030hmain:mov tmod,#61h ;T1计数器方式2,T0定时器方式1 mov th1,#0F6Hmov tl1,#0F6Hmov th0,#3ch ;100ms初值mov tl0,#0b0hmov r7,#0ahsetb easetb et1setb et0setb tr1sjmp $t1fw:clr p1.7 ;亮灯setb tr0 ;开定时器T0retit0fw:mov th0,#3CHmov tl0,#0B0Hdjnz r7,rtmov th0,#3CHmov tl0,#0B0Hmov r7,#0ahsetb p1.7 ;灯灭clr tr0 ;关定时器T0rt:retiend实验三键盘/显示实验3.1实验目的1、掌握键盘和显示器的接口方法和编程方法。
2、掌握行列扫描式键盘和动态显示的工作原理。
3.2实验要求利用实验系统提供的键盘电路和显示电路,做一个行列扫描式键盘和数码显示实验,把按下键盘的键码在数码管上显示出来。
实验程序可分成三个模块。
①键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:将显示单元的内容在显示器上动态显示。
③主程序:调用键输入模块和显示模块。
3.3键盘扫描显示控制电路3.4实验说明74LS240为反相缓冲器。
74ls273是带有清除端的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。
74LS245是8路同相三态双向总线收发器,可双向传输数据。
当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;DIR=“1”,信号由 A 向 B 传输;当/CE为高电平时,A、B均为高阻态。
本实验系统自带一个8×4的键盘,在判断有键按下后,要有一定的延时,防止键盘抖动。
数码管为共阴极,0-9的字型代码分别为0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。
汇编语言程序如下;键盘显示,键码在最高两位以十进制方式显示ORG 0mov 30h,#01h ;显示缓冲单元mov 31h,#02hmov 32h,#03hmov 33h,#04hmov 34h,#05hmov 35h,#06hLP8:ACALL KINP ;键盘扫描程序JB PSW.5,LP7 ;无键不处理键值MOV B,#0AH ;有键,分离键码DIV ABMOV 34H,B ;送显示缓冲MOV 35H,ALP7:ACALL DISP ;调显示程序SJMP LP8KINP:LCALL KAP ;扫描键子程序JNZ KP1SETB PSW.5 ;置无键标志RETKP1:LCALL DEL Y ;去抖LCALL KAP ;再次扫描键盘JNZ KP2 ;转识键码程序SETB PSW.5 ;置无键标志RETKP2:CLR PSW.5 ;置有键操作标志MOV R4,#00H ;0列加数KP4:MOV DPTR,#0FFDDHMOV A,R2MOVX @DPTR,A ;送列扫描信号MOV DPTR,#0FFDEHMOVX A,@DPTR ;回读行信号JB ACC.0,L1 ;不是第一行,转第二行MOV A,#00H ;是第一行,行吗=0AJMP KP5L1:JB ACC.1,L2 ; 不是第二行,转第三行MOV A,#08H ;是第二行,行码=8AJMP KP5L2:JB ACC.2,L3 ;不是第三行,转第四行MOV A,#10H ;是第三行,行码=16AJMP KP5L3:JB ACC.3,NEXT ;不是第四行,转下一列MOV A,#18H ;是第四行,行码=24KP5:ADD A,R4 ;对应的行码+对应的列码=键码PUSH ACC ;保护已经得到的键码KP3:LCALL DEL YLCALL KAP ;继续扫描JNZ KP3 ;A值不等于0,表示手未松开!POP ACC ;A值等于0,手已经松开,弹回键码!RETNEXT:INC R4 ;下一列列码加1MOV A,R2JNB ACC.7,KINP ;列到最后列了吗?RL AMOV R2,A ;下一列AJMP KP4 ;扫描下一列KAP:MOV A,#00H ;全扫描字(列)MOV DPTR,#0FFDDHMOV DPTR,#0FFDEHMOVX A,@DPTR ;回读行信息CPL AANL A,#0FH ;得到A值,=0,无键;≠0,有键RETDELY:MOV R6,#14H ;去抖!DL:MOV R7,#0FFHDJNZ R7,$DJNZ R6,DLRETDISP:MOV R0,#30H ;显示缓冲首址MOV R2,#01H ;位控初始码(先亮最低位)LOOP:MOV A,#0FFH ;共阳灭码MOV DPTR,#0FFDCHMOVX @DPTR,AMOV A,R2 ;送位控信号MOV DPTR,#0FFDDHMOVX @DPTR,AMOV A,@R0 ;从显示缓冲中取数MOV DPTR,#TABMOVC A,@A+DPTR ;查出字形代码MOV DPTR,#0FFDCHMOVX @DPTR,A ;送显示字符段代码ACALL DY1MS ;稳定显示信息INC R0 ;取下一个数MOV A,R2JB ACC.5,EXIT ;判断是否送到最高位?RL AMOV R2,A ;得到下一个位控信号AJMP LOOPEXIT:RETDY1MS:MOV R7,#0FFHDJNZ R7,$RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F end- 11 -。