单片机LED时钟程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;秒钟变量清除为 0
L0:
ACALL DISP
;扫描显示
JNB K2,L1
;未按下 K2 键则继续扫描
JB K2,$
;有按下则等待放开来
;K2 小时调整
INC HOUR
;小时计数加 1
MOV A, HOUR
;函数名:MAIN
;输 入:无
;输 出:无
;调 用:BZ,LED_BL,INIT,INIT_TIMER,CONV,DISP,SET_TIME
;描 述:主函数
;******************************************************************************
;函数名:DISP
;输 入:无
;输 出:无
;调 用:无
;描 述:扫描显示
;**************************************************************************** **
DISP:
MOV R0,#BUF
;指向显示器显示缓冲区起始地址
MOV R2,#4
ORG
0030H
MAIN:
;开始
ACALL BZ
;压电喇叭连续两次鸣响一声
ACALL BZ
ACALL LED_BL
;LED 闪动,表示程序开始执行
ACALL INIT
;初始变化量
ACALL INIT_TIMER
;设置定时器
MOV A,#0C0H MOV P0,A
;显示'0'
LOOP: ACALL CONV ACALL DISP JB K1, M1 ACALL LED_BL ACALL SET_TIME JMP LOOP
TO_ISR:
;定时器 0 计时中断程序每隔 5ms
中断一次
PUSH ACC
;将累加器放入堆栈
MOV TL0, #(8192-5000)MOD 32 ;加载低字节
MOV TH0, #(8192-5000)/32
;加载高字节
INC DEDA
;5ms 计数值加 1
;秒输出
MOV A, DEDA
CJNE A,#200,TT1
;函数名:INIT_TIMER
;输 入:无
;输 出:无
;调 用:无
;描 述:定时器 T0 模式 0 计时
;******************************************************************************
INIT_TIMER:
;初始化定时器,使用定时器 0
ORG 0000H JMP MAIN ORG 000BH JMP TO_ISR
;程序代码由地址 0 开始执行 ;定时器 0 中断地址设置
4
嵌入式应用软件园,版权所有,请勿转载/销售。
;******************************************************************************
; 定义存放计时单元地址
BUF EQU 30H
;30~33H 连续 4 字节存放显示器数据
HOUR EQU 34H
;存放小时变量
MIN EQU 35H
;存放分钟变量
SEC EQU 36H
;存放秒钟变量
DEDA EQU 37H
;存放 5 ms 计数值
;********************************变量定义结束**********************************
;******************************************************************************
;模 块:LED
;文件名:LED_Time.asm
;作 者:嵌入式应用软件园 http://emsys.taobao.com
;修 订:
;
版本号
;输 出:无
;调 用:无
;描 述:转换 时时:分分 数据
;******************************************************************************
CONV:
;转换小时数据
MOV
A,HOUR
MOV B,#10
DIV AB
MOV DPTR,#TABLE ;查表转换
;是否 1s 到了
MOV DEDA,#00H
;计数值清除为 0
CPL WLED
;LED 灯亮灭变换
INC SEC
;秒计数加 1
MOV A,SEC
CJNE A,#60,TT1
;是否 1min 到了
;分输出
INC MIN
;分计数加 1
MOV SEC,#00H
;秒计数清除为 0
MOV A,MIN
CJNE A,#60,TT1
2
嵌入式应用软件园,版权所有,请勿转载/销售。
第 1 章 程序功能
单片机 P0 口,接 4 位 8 段共阳数码管,用于显示时间。数码管是以动态扫 描的方式显示时钟的。时间的显示格式如下。
23:59
单片机 P2.4,P2.5,P2.6,P2.7 外接按键。这 4 个按键分别命名为 K1,K2,K3,K4。 P1.0 接发光二极管,配合调整时间使用。蜂鸣器用于配合产生按键声。
;未按下 K3 键则继续扫描 ;继续循环执行
;未按下 K4 键则继续扫描 ;继续循环执行
;继续循环执行
5
嵌入式应用软件园,版权所有,请勿转载/销售。
;******************************************************************************
RET
;******************************************************************************
;函数名:TO_ISR
;输 入:无
;输 出:无
;调 用:无
;描 述:定时器 T0 中断服务程序
;******************************************************************************
;循环执行 4 次
MOV ACC,#11110111b ;加载扫描信号初值 11110111B
S1:
PUSH ACC
MOV A,@R0
;取出显示器数据
MOV P0,A
;由 P0 送出一位显示器数据
POP ACC
MOV P2,ACC
;由 P2 送出扫描输出信号
MOV R5,#2
;延迟一会儿
ACALL DELAY
;按键 4 引脚定义
;压电喇叭和指示灯引脚定义
SPK EQU P3.4
;压电喇叭控制信号
WLED EQU P1.0
;工作指示灯引脚定义
;********************************接口定义结束**********************************
;**********************************程序开始************************************
MOV BUF+3,A
RET
;共阳数码管段码表 TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
7
嵌入式应用软件园,版权所有,请勿转载/销售。
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;******************************************************************************
模式 1 计时
MOV TMOD,#00000000B
;设置定时器 0 工作模式为 0
MOV IE,#10000010B
;启用定时器 0 中断产生
MOV TL0,#(8192-5000) MOD 32
;加载低字节
MOV TH0,#(8192-5000)/32
;加载高字节
SETB TR0
;启动定时器 0 开始计时
MOVC A,@A+DPTR
MOV BUF,A
MOV A,B
MOVC A,@A+DPTR
MOV BUF+1, A
;转换分钟数据
MOV A,MIN
MOV B,#10
DIV AB
MOV DPTR,#TABLE ;查表转换
MOVC A,@A+DPTR
MOV BUF+2,A
MOV A,B
MOVC A,@A+DPTR
;函数名:SET_TIME
;输 入:无
;输 出:无
;调 用:无
;描 述:调整时间
;******************************************************************************
SET_TIME:
CLR TR0
;定时器动作暂停
MOV SEC,#0
原因
;
1.0
初始版本
;******************************************************************************
;***********************************变量定义***********************************
K1: 设置键。按一下后,可以自己对时了。 K2: 调整小时。 K3: 调整分钟。 K4: 确认键。对时完成后,按一下,时钟开始运转。 单片机数码管时钟原理图如下图。
3
嵌入式应用软件园,版权所有,请勿转载/销售。
第 2 章 程序代码
2.1 文本版代码
我们的辛勤付出,需要您的肯定,请访问: 嵌入式应用软件园。
;是否 1h 到了
;时输出
INC HOUR
;小时计数加 1
6
嵌入式应用软件园,版权所有,请勿转载/销售。
MOV MIN,#00H
MOV A,HOUR
CJNE A,#24,TT1
MOV
DEDA,#00h
MOV SEC,#00H
MOV MIN,#00H
MOV HOUR,#00H
TT1:
POP ACC
RETI
;*******************************89C51 接口定义**********************************
;按键输入引脚定义
K1 EQU P2.4
;按键 1 引脚定义
K2 EQU P2.5
;按键 2 引脚定义
K3 EQU P2.6
;按键 3 引脚定义
K4 EQU P2.7
2.1 文本版代码........................................................................................................4 2.2 图片版代码......................................................................................................12
嵌入式应用软件园,版权所有,请勿转载/销售。
单片机 LED 时钟程序
作者: 嵌入式应用软件园
1
嵌入式应用软件园,版权所有,请勿转载/销售。
目录
第 1 章 程序功能 .......................................................................................................3 第 2 章 程序代码 .......................................................................................................4
;无穷循环 ;转换 时时 分分 数据 ;扫描显示 ;未按下 K1 键则继续扫描 ;LED 闪动 ;设置目前时间 ;继续循环执行
M1: JB
JMP
K2,M2 LOOP
M2:
JB
K3, M3
JMP LOOP
M3:
JB
K4,M4
JMP LOOP
M4: JMP LOБайду номын сангаасP
;未按下 K2 键则继续扫描 ;继续循环执行
;分计数清除为 0
;是否 24h 到了
;秒钟变量清除为 0 ;分钟变量清除为 0 ;小时变量清除为 0
;将累加器由堆栈取出
;******************************************************************************
;函数名:CONV
;输 入:无
;改变扫描码 EX:XXXX1011
RR A
;累加器向右移动一位
INC R0
;显示器显示缓冲区地址加 1
DJNZ R2, S1
;循环判断是否继续执行
RET
;******************************************************************************