单片机电子时钟汇编语言程序
第三章MCS51单片机的指令系统和汇编语言程序示例(第5.

第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]
![毕业设计(论文)-基于单片机多功能电子时钟的设计与仿真(含程序仿真)[管理资料]](https://img.taocdn.com/s3/m/9ad55f3e0508763230121257.png)
程序仿真等全套设计,联系153893706第1章绪论二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。
第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。
第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。
第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步……我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。
商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设计,使其更加的具有市场。
本设计为软件,硬件相结合的一组设计。
在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。
基本的要了解一些主要器件的基本功能和作用。
除了采用集成化的时钟芯片外,还有采用MCU的方案,利用AT89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。
AT89C52是由ATMEL公司推出的一种小型单片机。
95年出现在中国市场。
其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受。
本文介绍了基于AT89C52单片机设计的电子万年历。
选题背景及研究的目的与意义设计的目的电子钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来了极大的方便。
MCS-51系列单片机的指令系统和汇编语言程序

3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
单片机课程设计电子时钟

单片机课程设计电子时钟一、课程目标知识目标:1. 让学生理解单片机的基本原理和编程方法,掌握单片机在电子时钟设计中的应用。
2. 使学生掌握电子时钟的组成和工作原理,包括时、分、秒的显示与计时功能。
3. 帮助学生了解电子时钟设计中涉及的硬件知识,如晶振、计数器、显示器件等。
技能目标:1. 培养学生运用单片机编程实现电子时钟功能的能力,提高学生的动手实践能力。
2. 培养学生分析问题、解决问题的能力,能够针对电子时钟设计过程中遇到的问题进行调试和优化。
3. 培养学生团队协作能力,通过分组合作完成课程设计任务。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养学生主动学习的积极性。
2. 培养学生严谨的科学态度,注重实验数据的真实性,养成良好的实验习惯。
3. 增强学生的创新意识,鼓励学生在课程设计中发挥想象力和创造力,提高学生的创新能力。
课程性质:本课程为实践性课程,注重培养学生的动手能力和实际应用能力。
学生特点:学生已具备一定的单片机基础知识和编程技能,对电子制作有较高的兴趣。
教学要求:结合课本内容,注重理论与实践相结合,通过课程设计提高学生的综合应用能力。
将课程目标分解为具体的学习成果,以便在教学设计和评估过程中有针对性地指导学生。
二、教学内容1. 理论知识:- 单片机原理与编程:复习课本第三章内容,重点掌握单片机的内部结构、工作原理、指令系统及编程方法。
- 电子时钟原理:学习课本第四章关于时钟电路的设计,了解时、分、秒的计数原理及显示技术。
2. 实践操作:- 硬件设计:根据课本第五章内容,选用51单片机及相关元器件,设计电子时钟的硬件电路,包括晶振、计数器、显示器件等。
- 软件编程:运用C语言或汇编语言,编写电子时钟的程序代码,实现时、分、秒的显示与计时功能。
3. 教学大纲:- 第一周:复习单片机基础知识,讲解电子时钟原理,分配课程设计任务。
- 第二周:进行硬件电路设计,学习并选用合适的元器件,绘制原理图。
单片机课程设计报告--电子时钟(2021整理)

一、设计内容该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。
二、电子时钟设计思想:用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY〔自己计算〕。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms 计数,计20次产生秒计数器78H单元加1,秒计数器加到60那么分计数器79H单元加1,分计数器加到60那么时计数器7AH单元加1,时计数器加到24那么时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
三、MCS-51单片机系统简介单片机应用系统由硬件系统和软件系统两局部组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。
在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。
配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED 指示灯就可以进行处理了。
在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。
大学课件MCS51单片机指令系统与汇编语言程序设计

ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。
单片机汇编语言程序设计实验报告

单片机实验1 汇编语言程序设计实验---- 存储器块赋值一.实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二.实验内容指定存储器中某块的起始地址和长度,要求将其内容赋值。
例如将4000H 开始的100个字节内容清零或全部赋值为33H(参考程序),要求根据参考程序修改:修改程序,赋值内容为(10,9,8,7,6,5,4,3,2,1。
)三.实验仪器微机、VW,WAVE6000编程环境软件,(单片机实验箱)仿真器--仿真器设置-选择仿真器选择仿真头选择CPU Lab8000/Lab6000通用微控制器 MCS51实验 8051前3个软件实验勾选√使用伟福软件模拟器四实验步骤注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
编译器默认设置:程序框图参考例程序:Block equ 4000hmov dptr, #Block ; 起始地址mov r0, #10 ; 清10个字节mov a, #33h ; 将33H赋值给aLoop:movx @dptr, a 将a写入外部RAMinc dptr ; 指向下一个地址djnz r0, Loop ; 记数减一ljmp $ ; $当前程序指针相当于一直执行自己;ljmp $ end说明:$:是当前语句的程序指针(地址)相当于一直执行自己:ljmp $,程序死循环要求赋值数据为10,9,8,7,6,5,4,3,2,1则以上程序该如何改动? 自己修改程序实现。
基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。
键盘采用动态扫描方式。
利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机架构下时钟控制程序;KEYA A键功能程序开启/关闭定时器;KEYB B键功能程序时值加1;KEYC C键功能程序分值加1;KEYD D键功能程序秒值加1;KEYE E键功能程序12/24时值转换;BEEP_BL整点报时;P0 显示接口;系统初始化程序****************************************************KEYA EQU P3.0 ;单片机控制设置KEYB EQU P3.1 ;单片机控制设置KEYC EQU P3.2 ;单片机控制设置KEYD EQU P3.3 ;单片机控制设置KEYE EQU P3.4 ;单片机控制设置BEEP EQU P3.7 ;单片机控制设置ORG 0000HAJMP MAIN ;转到系统初始化程序ORG 000BHAJMP PITO ;转到定时器0中断服务程序ORG 0100HMAIN: MOV SP, #60H ;确立堆栈区MOV TMOD, #01H ;设定定时器0为工作方式1MOV TL0, #0DCH ;装计数器初值MOV TH0, #0BHCLR 21H.0CLR TR0 ; TR0置"0",定时关闭SETB EA ; EA置"1",中断总允许SETB ET0 ; ET0置"1",定时器0中断; 允许MOV 30H, #10H ; 循环次数MOV 7EH, #0AH ; P.点显示初始化MOV R0, #79HMOV R1, #05HPP: MOV @R0, #0BHINC R0DJNZ R1, PPMOV R0, #31H ; 时、分、秒值存储单元清零Q00: MOV @R0, #00HINC R0DJNZ R1, Q00;监控程序**********************************************************LOOP: LCALL DIR ; 调显示子程序LCALL KEY ; 调键扫描子程序LOOP1: JB 20H.0, KEYA ; A键是否按下,是跳转到A键功能程序开启/关闭定时器JB 20H.1, KEYB ; B键是否按下,是跳转到B键功能程序时值加1JB 20H.2, KEYC ; C键是否按下,是跳转到C键功能程序分值加1JB 20H.3, KEYD ; D键是否按下,是跳转到D键功能程序秒值加1JB 20H.4, KEYE ; E键是否按下,是跳转到E键功能程序12/24时值转换LCALL DIRLJMP LOOP ; 跳转到监控程序;A键功能子程序****************************************************KEYA: CPL TR0 ;开启/关闭定时器SETB 21H.0AJMP LOOP ;返回;B键功能子程序****************************************************KEYB: JB TR0, KEYB1 ; 定时器是否运行,是跳转JNB 21H.0, KEYB2MOV R0, #36H ; 时值存储单元地址送R0LCALL DAAD1 ; 调加1子程序MOV A, R3 ; 时值加1后的值送累加器ALCALL BEEP_BL ; 整点报时XRL A, #12H ;时值是否到12时JNZ KEYB0 ;BACK: XRL A, #24H; 判是否到24时JNZ KEYB1 ; 时值是否到24时,否返回LCALL CLR0 ; 时值存储单元清零KEYB0: JB 20H.4, KEYB1; 是否启用12时值,否返回LCALL CLR0 ; 时值存储单元清零KEYB1: MOV 7DH, 35HMOV 7EH, 36HKEYB2: LJMP LOOP ; 返回监控程序;C键功能子程序****************************************************KEYC: JB 8CH, KEYC1 ; 定时器是否运行,否跳转MOV R0, #34H; 分值存储单元地址送R0LCALL DAAD1 ; 调加1子程序MOV A, R3 ;分值加1后的值送累加器AXRL A, #60H ;JNZ KEYC1 ; 分值是否到60分,否返回LCALL CLR0 ; 分值存储单元清零KEYC1: MOV 7CH, 34HMOV 7BH, 33HKEYC2: LJMP LOOP ; 返回监控程序;D键功能子程序**************************************************** KEYD: JB 8CH, KEYD1 ; 定时器是否运行,否跳转JNB 21H.0, KEYD2MOV R0, #32H ; 秒值存储单元地址送R0LCALL DAAD1 ; 调加1子程序MOV A, R3 ; 秒值加1后的值送R0XRL A, #60HJNZ KEYD1 ; 秒值是否到60秒,否返回LCALL CLR0 ; 秒值存储单元清0 KEYD1: MOV 79H, 31HMOV 7AH, 32HKEYD2: LJMP LOOP ; 返回监控程序;中断服务程序****************************************************** PITO: PUSH PSW ;中断服务程序,现场保护PUSH ASETB RS0 ;选第三组通用寄存器SETB RS1MOV TL0, #0DCH ; 计数器重新加载MOV TH0, #0BHMOV A, 30H ;循环次数减1DEC AMOV 30H, AJNZ RETO ;不满16次,转RET0返回MOV 30H, #10H ;满16次开始计时操作MOV R0, #32H ;秒显示单元地址ACALL DAAD1 ; 秒加1MOV A, R3 ; 加1后秒值在R3中XRL A, #60H ; 判是否到60秒JNZ RETO ; 不到转RET0返回ACALL CLR0 ; 到60秒显示单元清0MOV R0, #34H ;分显示单元地址ACALL DAAD1 ; 分加1MOV A, R3 ; 加1后分值在R3中XRL A, #60H ; 判是否到60分JNZ RETO ; 不到转RET0返回ACALL CLR0 ; 到60分显示单元清0MOV R0, #36H ; 时显示单元地址ACALL DAAD1 ; 时加1MOV A, R3 ; 加1后时值在R3中LCALL BEEP_BL ; 整点报时XRL A, #12H ; 时值是否到12时JNZ KEYB3 ;XRL A, #24H ; 判是否到24时JNZ RETO ; 不到转RET0返回ACALL CLR0 ; 到24时显示单元清0 KEYB3:JB 20H.4, RETO; 是否启用12时值,否返回ACALL CLR0 ; 时值存储单元清零RETO: CLR RS0 ; 返回第0组通用寄存器CLR RS1POP A ; 现场恢复POP PSWMOV 79H, 31H ; 时、分、秒值放缓冲区MOV 7AH, 32HMOV 7BH, 33HMOV 7CH, 34HMOV 7DH, 35HMOV 7EH, 36HRETI ; 中断返回;加1子程序******************************************************* DAAD1: MOV A, @R0 ; 加1子程序,十位送ADEC R0SW AP A ; 十位数占高4位ORL A, @R0 ; 个位数占低4位ADD A, #01H ; 加1DA A ; 十进制调整MOV R3, A ; 全值暂存R3中ANL A, #0FH ; 屏蔽十位数,取出个位数MOV @R0, A ; 个位值送显示缓冲单元MOV A, R3INC R0ANL A, #0F0H ; 屏蔽个位数取出十位数SW AP A ; 使十位数占低四位MOV @R0, A ; 十位数送缓冲单元RET ; 返回CLR0: CLR A ; 清缓冲单元子程序MOV @R0, A ; 十位缓冲单元清"0"DEC R0MOV @R0, A ; 个位数缓冲单元清"0"RET ; 返回;键盘扫描子程序*************************************************** KEY: LCALL KEYCHULI ; 调键值处理子程序JZ EXIT ; 没有键按下转到返回LCALL DIRLCALL DIR ; 调显示去抖动LCALL KEYCHULI ; 调键值处理子程序JZ EXIT ; 没有键按下转到返回MOV B, 20H ; 保存键值KEYSF: LCALL KEYCHULI ; 调键值处理子程序JZ KEY1 ; 键释放,转到恢复键值LCALL DIR ; 调显示子程序延时AJMP KEYSF ; 等到键释放KEY1: MOV 20H, B ; 键值送20H单元保存EXIT: RET ; 返回KEYCHULI: PUSH PSW ; 保护现场CLR RS1 ; 改变寄存器组号SETB RS0MOV P1, #0FFH ; 先向P1口写1MOV A, P1 ; P1口值送累加器ACPL A ; A值取反ANL A, #0FH ; 保存P1口的低4位MOV 20H, A ; A值送20H保存CLR RS1 ; 改变寄存器组号CLR RS0 ;POP PSW ; 恢复现场RET;显示子程序******************************************************** DIR: PUSH PSW ; 恢复现场SETB RS1 ; 改变寄存器组号CLR RS0MOV R0, #79H ; 建立显示缓冲区首地址MOV R3, #0FBH ; 设置位控码LD0: MOV P2, R3 ; 送位控码MOV A, @R0 ; 缓冲区值送累加器A DISP1: ADD A, #1BHMOVC A, @A+PC ; 取段控码并送A中DISP2: MOV P0, A ; 送段控码MOV R2, #09H ; 设置延时循环次数ACALL DEY ; 延时点亮INC R0 ; 缓冲区地址加1MOV A, R3 ; 位控码送AJNB ACC.1, HERE ; 是否到最高位,是转到返回JB ACC.5, LD2RL ARL A ; 不到向显示器高位移位LD2:RL AMOV R3, A ; 位控值保存到R4中AJMP LD0 ; 继续扫描HERE: CLR RS0 ; 改变寄存器组号CLR RS1POP PSW ; 恢复现场RET ; 返回DBB: DB 0C0HDB 0F9HDB 0A4HDB 0B0HDB 99HDB 92HDB 82HDB 0F8HDB 80HDB 90HDB 0CHDB 0FFH;整点报时********************************************************** BEEP_BL: MOV R6,#100BL1:CALL BL2CPL BEEPDJNZ R6,BL1MOV R5,#25CALL DEYRET ;返回计时BL2:MOV R7,#180BL3:NOPDJNZ R7,BL3RET;延时子程序******************************************************** DEY: PUSH 12HDEY0: PUSH 12HDEY1: PUSH 12HDEY2: DJNZ R2, DEY2POP 12HDJNZ R2, DEY1 POP 12HDJNZ R2, DEY0 POP 12HDJNZ R2, DEY RETEND。