《单片机led闹钟程序》由会员分享,可在线阅读,更多相关《单片机led闹钟程序(24页珍藏版)》请在金锄头文库上搜索。
1、嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! 单片机单片机 LED 闹闹钟程序钟程序 作者作者: 嵌入式应用软件园 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! 目目 录录 第第 1 章章 程序功能程序功能 . 3 1.1 调整时钟的时间 . 3 1.2 设定闹钟的时间 . 3 第第 2 章章 程序代码程序代码 . 5 2.1 文本版代码 . 5 2.2 图片版代码 . 16 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢!
2、第第 1 章章 程序功能程序功能 单片机 P0 口,接 4 位 8 段共阳数码管,用于显示时间。数码管是以动态扫描的方式显示时钟的。时间的显示格式如下。 23:59 单片机 P2.4,P2.5,P2.6,P2.7 外接按键。这 4 个按键分别命名为 K1,K2,K3,K4。 P1.0 接发光二极管,配合调整时间使用。蜂鸣器用于配合产生闹钟的声音。 1.1 调整调整时钟的时间时钟的时间 K1: 设置键。按一下后,可以自己对时了。 K2: 调整小时。 K3: 调整分钟。 K4: 确认键。对时完成后,按一下,时钟开始运转。 1.2 设定设定闹钟的时间闹钟的时间 K2: 按一下后,开启闹钟功能,可以设
3、定闹钟时间了。 K2: 调整小时。 K3: 调整分钟。 K4: 确认键和停止闹钟。闹钟时间设定完成后,按一下,闹钟开始运转。闹钟鸣叫时,用于停止闹钟。 单片机数码管闹钟原理图如下图。 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! 第第 2 章章 程序代码程序代码 2.1 文本版代码文本版代码 我们的辛勤付出,需要您的肯定,请访问: 嵌入式应用软件园。 ;* ;模 块:LED ;文件名:LED_Alarm.asm ;作 者:嵌入式应用软
4、件园 http:/ ;修 订: ; 版本号 原因 ; 1.0 初始版本 ;* ;*变量定义* ; 定义存放计时单元地址 ALB EQU 20H.0 ;闹铃设置标志 HH EQU 38H ;闹铃设置小时变量 MM EQU 39H ;闹铃设置分钟变量 BUF EQU 30H ;3033H 连续 4 字节存放显示器数据 HOUR EQU 34H ;存放小时变量 MIN EQU 35H ;存放分钟变量 SEC EQU 36H ;存放秒钟变量 DEDA EQU 37H ;存放 5 ms 计数值 ;*变量定义结束* ;*89C51 接口定义* ;按键输入引脚定义 K1 EQU P2.4 ;按键 1 引脚定
5、义 K2 EQU P2.5 ;按键 2 引脚定义 K3 EQU P2.6 ;按键 3 引脚定义 K4 EQU P2.7 ;按键 4 引脚定义 ;压电喇叭和指示灯引脚定义 SPK EQU P3.4 ;压电喇叭控制信号 WLED EQU P1.0 ;工作指示灯引脚定义 ;*接口定义结束* ;*程序开始* 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! ORG 0000H ;程序代码由地址 0 开始执行 JMP MAIN ORG 000BH ;定时器 0 中断地址设置 JMP TO_ISR ;* ;函数名:MAIN ;输 入:无 ;输 出:无
6、;调 用:BZ,LED_BL,INIT,INIT_TIMER,CONV,DISP,SET_TIME ;描 述:主函数 ;* ORG 0030H MAIN: ;开始 CLR ALB ;清除闹铃标志 ACALL BZ ;压电喇叭连续两次鸣响一声 ACALL BZ ACALL LED_BL ;LED 闪动,表示程序开始执行 ACALL INIT ;初始变化量 ACALL INIT_TIMER ;设置定时器 MOV A,#0C0H ;显示0 MOV P0,A LOOP: ;无穷循环 ACALL CONV ;转换 时时:分分 数据 ACALL TIME_PRO ;检查闹铃时间 ACALL DISP ;扫
7、描显示 JB K1,M1 ;未按下 K1 键则继续扫描 ACALL LED_BL ;LED 闪动 ACALL SET_TIME ;设置目前时间 JMP LOOP ;继续循环执行 M1: JB K2,M4 ;未按下 K2 键则继续扫描 ACALL LED_BL ACALL SET_ATIME ;设置闹铃时间 JMP LOOP ;继续循环执行 M2: JB K3, M3 ;未按下 K3 键则继续扫描 JMP LOOP ;继续循环执行 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! M3: JB K4,M1 ;未按下 K4 键则继续扫描 CPL
8、 ALB JNB ALB,M31 ;闹铃启动连续 3 次发出响声 ACALL BZ ACALL BZ ACALL BZ JMP LOOP ;继续循环执行 M31: ACALL BZ ;闹铃停止,发出一声响 JMP LOOP ;继续循环执行 M4: JMP LOOP ;继续循环执行 ;* ;函数名:INIT_TIMER ;输 入:无 ;输 出:无 ;调 用:无 ;描 述:定时器 T0 模式 0 计时 ;* INIT_TIMER: ;初始化定时器, 使用定时器 0 模式 1 计时 MOV TMOD,#00000000B ;设置定时器 0 工作模式为 0 MOV IE,#10000010B ;启用定
9、时器 0 中断产生 MOV TL0,#(8192-5000) MOD 32 ;加载低字节 MOV TH0,#(8192-5000)/32 ;加载高字节 SETB TR0 ;启动定时器 0 开始计时 RET ;* ;函数名:TO_ISR ;输 入:无 ;输 出:无 ;调 用:无 ;描 述:定时器 T0 中断服务程序 ;* TO_ISR: ;定时器 0 计时中断程序每隔 5ms 中断一次 PUSH ACC ;将累加器放入堆栈 MOV TL0, #(8192-5000)MOD 32 ;加载低字节 嵌入式应用软件园,版权所有,请勿转载/销售。 如果我们的文档,对您有用,请在百度文库中给予好评。谢谢! MOV TH0, #(8192-5000)/32 ;加载高字节 INC DEDA ;5ms 计数值加 1 ;秒输出 MOV A, DE