单片机电子时钟汇编语言程序_第1页
单片机电子时钟汇编语言程序_第2页
单片机电子时钟汇编语言程序_第3页
单片机电子时钟汇编语言程序_第4页
单片机电子时钟汇编语言程序_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、51单片机架构下时钟控制程序;KEYA A键功能程序 开启/关闭定时器 ;KEYB B键功能程序 时值加1;KEYC C键功能程序 分值加1;KEYDD键功能程序 秒值加1;KEYEE键功能程序 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 0000H AJMP MAIN;转到系统

2、初始化程序 ORG 000BH AJMP PITO;转到定时器0中断服务程序 ORG 0100H MAIN: MOV SP, #60H;确立堆栈区 MOV TMOD, #01H;设定定时器0为工作方式1 MOV TL0, #0DCH;装计数器初值 MOV TH0, #0BH CLR 21H.0 CLR TR0;TR0置0,定时关闭 SETB EA;EA置1,中断总允许 SETB ET0 ; ET0置1,定时器0中断 ; 允许 MOV 30H, #10H;循环次数 MOV 7EH, #0AH;P.点显示初始化 MOV R0, #79H MOV R1, #05H PP: MOV R0, #0BH

3、INC R0 DJNZ R1, PP MOV R0, #31H;时、分、秒值存储单元清零 MOV R1, #06H Q00: MOV R0, #00H INC R0 DJNZ R1, Q00;监控程序* LOOP: LCALL DIR;调显示子程序 LCALL KEY ;调键扫描子程序 LOOP1: JB 20H.0, KEYA ; A键是否按下,是跳转到A键功能程序 开启/关闭定时器 JB 20H.1, KEYB ; B键是否按下,是跳转到B键功能程序 时值加1 JB 20H.2, KEYC ; C键是否按下,是跳转到C键功能程序 分值加1 JB 20H.3, KEYD ; D键是否按下,是

4、跳转到D键功能程序 秒值加1JB 20H.4, KEYE ; E键是否按下,是跳转到E键功能程序 12/24时值转换 LCALL DIR LJMP LOOP;跳转到监控程序;A键功能子程序* KEYA: CPL TR0 ;开启/关闭定时器 SETB 21H.0 AJMP LOOP ;返回;B键功能子程序* KEYB: JB TR0, KEYB1 ; 定时器是否运行,是跳转 JNB 21H.0, KEYB2 MOV R0, #36H; 时值存储单元地址送R0 LCALL DAAD1 ; 调加1子程序 MOV A, R3 ; 时值加1后的值送累加器ALCALL BEEP_BL ; 整点报时 XRL

5、 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, 35H MOV 7EH, 36H KEYB2: LJMP LOOP; 返回监控程序;C键功能子程序* KEYC: JB 8CH, KEYC1 ; 定时器是否运行,否跳转 JNB 21H.0, KEYC2 MOV R0, #34H; 分值存储单元地址

6、送R0 LCALL DAAD1; 调加1子程序 MOV A, R3; 分值加1后的值送累加器A XRL A, #60H ; JNZ KEYC1; 分值是否到60分,否返回 LCALL CLR0; 分值存储单元清零 KEYC1: MOV 7CH, 34H MOV 7BH, 33H KEYC2: LJMP LOOP; 返回监控程序;D键功能子程序* KEYD: JB 8CH, KEYD1 ; 定时器是否运行,否跳转 JNB 21H.0, KEYD2 MOV R0, #32H ; 秒值存储单元地址送R0 LCALL DAAD1 ; 调加1子程序 MOV A, R3 ; 秒值加1后的值送R0 XRL

7、A, #60H JNZ KEYD1;秒值是否到60秒,否返回 LCALL CLR0;秒值存储单元清0 KEYD1: MOV 79H, 31H MOV 7AH, 32H KEYD2: LJMP LOOP;返回监控程序;中断服务程序* PITO: PUSH PSW;中断服务程序,现场保护 PUSH A SETB RS0;选第三组通用寄存器 SETB RS1 MOV TL0, #0DCH;计数器重新加载 MOV TH0, #0BH MOV A, 30H;循环次数减1 DEC A MOV 30H, A JNZ RETO;不满16次,转RET0返回 MOV 30H, #10H;满16次开始计时操作 MO

8、V R0, #32H;秒显示单元地址 ACALL DAAD1;秒加1 MOV A, R3;加1后秒值在R3中 XRL A, #60H;判是否到60秒 JNZ RETO;不到转RET0返回 ACALL CLR0;到60秒显示单元清0 MOV R0, #34H;分显示单元地址 ACALL DAAD1;分加1 MOV A, R3;加1后分值在R3中 XRL A, #60H;判是否到60分 JNZ RETO;不到转RET0返回 ACALL CLR0;到60分显示单元清0 MOV R0, #36H;时显示单元地址 ACALL DAAD1;时加1 MOV A, R3 ;加1后时值在R3中LCALL BEE

9、P_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 RS1 POP A;现场恢复 POP PSWMOV 79H, 31H;时、分、秒值放缓冲区 MOV 7AH, 32H MOV 7BH, 33H MOV 7CH, 34H MOV 7DH, 35H MOV 7EH, 36

10、H RETI ;中断返回;加1子程序* DAAD1: MOV A, R0 ; 加1子程序,十位送A DEC R0 SWAP A;十位数占高4位 ORL A, R0;个位数占低4位 ADD A, #01H;加1 DA A;十进制调整 MOV R3, A;全值暂存R3中 ANL A, #0FH;屏蔽十位数,取出个位数 MOV R0, A;个位值送显示缓冲单元 MOV A, R3 INC R0 ANL A, #0F0H;屏蔽个位数取出十位数 SWAP A;使十位数占低四位 MOV R0, A;十位数送缓冲单元 RET;返回 CLR0: CLR A;清缓冲单元子程序 MOV R0, A;十位缓冲单元清

11、0 DEC R0 MOV R0, A;个位数缓冲单元清0 RET;返回 ;键盘扫描子程序* KEY: LCALL KEYCHULI;调键值处理子程序 JZ EXIT;没有键按下转到返回 LCALL DIR LCALL DIR;调显示去抖动 LCALL KEYCHULI;调键值处理子程序 JZ EXIT;没有键按下转到返回 MOV B, 20H ;保存键值 KEYSF: LCALL KEYCHULI;调键值处理子程序 JZ KEY1;键释放,转到恢复键值 LCALL DIR;调显示子程序延时 AJMP KEYSF;等到键释放 KEY1: MOV 20H, B;键值送20H单元保存 EXIT: R

12、ET;返回 KEYCHULI: PUSH PSW;保护现场 CLR RS1;改变寄存器组号 SETB RS0 MOV P1, #0FFH;先向P1口写1 MOV A, P1;P1口值送累加器A CPL 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 RS0 MOV R0, #79H;建立显示缓冲区首地址 MOV R3, #0FBH;设置位控码 LD0: MOV P

13、2, R3;送位控码 MOV A, R0; 缓冲区值送累加器A DISP1: ADD A, #1BH MOVC A, A+PC;取段控码并送A中 DISP2: MOV P0, A;送段控码 MOV R2, #09H;设置延时循环次数 ACALL DEY;延时点亮 INC R0;缓冲区地址加1 MOV A, R3;位控码送A JNB ACC.1, HERE;是否到最高位,是转到返回 JBACC.5, LD2 RL A RL A;不到向显示器高位移位 LD2:RL A MOV R3, A; 位控值保存到R4中 AJMP LD0;继续扫描 HERE: CLR RS0 ;改变寄存器组号 CLR RS1 POP PSW ;恢复现场 RET ;返回 DBB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H DB 0F8H DB 80H DB 90H DB 0CH DB 0FFH;整点报时* BEEP_BL: MOV R6,#100 BL1:CALL BL2 CPL BEEP DJNZ R6,BL1

温馨提示

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

评论

0/150

提交评论